java执行本地命令需要在命令执行时传入参数,怎么办

Python019

java执行本地命令需要在命令执行时传入参数,怎么办,第1张

如果是在程序启动时需要给main方法输入参数

可以跟在主类名后面,用空格隔开

>java xxx 参数1 参数2 参数3

如果是在程序执行过程中需要用户输入,可以在代码中使用Scanner类来获取用户在控制台输入的参数

可以在命令行运行java程序时加上程序的参数。

例子如下:

public class HelloWorld{

public static void main(String args[]){

System.out.println("temp=" + args[0])

}

}

源代码截图:

命令行中截图:

解释一下: String[ ]  args

该参数,是一个字符串数组,用来接收从命令行输入的参数

1. 参数之间用空格隔开

2. java解释器会自动处理,把用空格隔开的每一个参数通过args数组传递给买呢()方法。

3. 参数的下标从0开始,args[0]表示第一个参数,例如java HelloWorld 10 20 30

4.可以有多个空格,多个空格会被忽略。

扩展资料:

Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程 。

Java具有简单性、面向对象、分布式、健壮性、安全性、平台独立与可移植性、多线程、动态性等特点。Java可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用程序等 。

参考资料:百度百科-网页链接

在方法调用时,需要根据方法声明传入适当的参数,通过每次调用方法时传参,极大的增强

了方法的统一性,避免了方法内部功能代码的重复。但是在实际传递参数时,如果在方法内部修改了

参数的值,则调用时使用的变量是否发生改变呢?

请看如下代码:

public class TransferValueDemo

{

public static void main(String[] args)

{

int m = 10

int[] a = {1,2,34}

test(m,a)

System.out.println(m)

System.out.println(a[0])

}

public static void test(int n,int[] t)

{

n = 0

t[0] = 123

}

}

执行该程序以后,程序的输出结果是:10 123。则在调用test方法时,同样都是传入参数,为

什么变量m的值未改变,而a[0]的值发生了改变呢?下面就来说明该问题。

在参数传递时,一般存在两种参数传递的规则,在Java语言中也是这样,这两种方式依次是:

按值传递(by value)

按值传递指每次传递参数时,把参数的原始数值拷贝一份新的,把新拷贝出来的数值传递到方法内部

,在方法内部修改时,则修改的时拷贝出来的值,而原始的值不发生改变。

说明:使用该方式传递的参数,参数原始的值不发生改变。

按址传递(by address)

按址传递指每次传递参数时,把参数在内存中的存储地址传递到方法内部,在方法内部通过存储地址

改变对应存储区域的内容。由于在内存中固定地址的值只有一个,所以当方法内部修改了参数的值以

后,参数原始的值发生改变。

说明:使用该方式传递的参数,在方法内部修改参数的值时,参数原始的值也发生改变。

在Java语言中,对于那些数据类型是按值传递,那些数据类型是按址传递都作出了硬性规定,

如下所示:

按值传递的数据类型:八种基本数据类型和String(这样理解可以,但是事实上String也是传递的地

址,只是string对象和其他对象是不同的,string对象是不能被改变的,内容改变就会产生新对象。

那么StringBuffer就可以了,但只是改变其内容。不能改变外部变量所指向的内存地址。关于String

的特殊性见本博客的String类深入解析)。

按址传递的数据类型:除String以外的所有复合数据类型,包括数组、类和接口

按照这里的语法规则,则上面的代码中变量m的类型是int,属于按值传递,所以在方法内部修改参数

的值时m的值不发生改变,而a的类型是数组,属于按址传递,所以在方法内部修改参数的值时,原始

的值发生了改变。

按值传递和按址传递在实际使用时,需要小心,特别是在方法内部需要修改参数的值时。有些时候,

对于按值传递的参数需要修改参数的值,或者按址传递时,不想修改参数的值,下面是实现这两种方

式时的示例代码。

按值传递时通过返回值修改参数的值:

public class TransferValueDemo1

{

public static void main(String[] args)

{

int m = 10

m = test1(m) //手动赋值

System.out.println(m)

}

public static int test1(int n)

{

n = 15

return n

}

}

在该示例代码中,通过把修改以后的参数n的值返回,来为变量m赋值,强制修改按值传递

参数的值,从而达到修正参数值的目的。

按址传递时通过重新生成变量避免修改参数的值:

public class TransferValueDemo2

{

public static void main(String[] args)

{

int[] a = {1,2,3}

test2(a)

System.out.println(a[0])

}

public static void test2(int[] m)

{

int[] n = new int[m.length]

for(int i = 0i <m.lengthi++)

{

n[i] = m[i]

}

n[0] = 10

}

}

在该示例代码中,通过在方法内部创新创建一个数组,并且把传入数组中每个参数的值都

赋值给新创建的数组,从而实现复制数组内容,然后再修改复制后数组中的值时,原来的参数内容就

不发生改变了。

这里系统介绍了Java语言中参数传递的规则,深刻理解这些规则将可以更加灵活的进行程

序设计。例如使用复合数据类型按址传递的特性可以很方便的实现多参数的返回,代码示例如下:

public int test3(int[] m,int[] n){……}

则该方法中,实际上返回了三种值,一个int的返回值,数组m的值,数组n的值,这只是参

数传递的一种基本使用,在JDK提供的API文档中也大量的存在该方法。

当是对象时,方法取得的是引用的copy。swap(obj a,obj b)

调用是swap(c,d),就是对象a,b的引用进行了复制。引用a和c都指向同一对象,引用b和d都指向同

一对象。如果Integer有setValue方法没有问题,但可惜没有,用int t=p.intValue能取得对象的

值,但还是不能交换。如果创建新对象,影响的只是c和d,不会影响a,b。

注意JAVA和VC的区别,JAVA没有指针,因此在无论方法中的形参怎样变化,方法外的实参不受影响。

(这句话也不完全对)