java传入参数
① java 中怎样输入参数
你说的是命令行参数
public static void main(String[] args);
通过命令行来向java应用程序传递参数。
main方法接收亩燃一个让耐轮一个字符串数组参数;从控制台传进来的参数都被当作String类型的来处理,如果需要向应用传递多个参数,则用空格隔开,如果参数本身用双引号引起来
执行时的格式: java 类名 参数1 参数2……
例子:
public class Abc{
public static void main(String[] args){
if(args.length!=2){
System.out.println("请按下列方式执行:"+"java Abc 参数1 参数2");
System.exit(0);
}
String a = args[0];
String b = args[1];
System.out.println("第一个参数是:"+a);
System.out.println("第二个参数是:"+b);
}
}
编译:javac Abc.java
执行:java Abc 参数1 参数2
注意:通过main()方法从控制台接收的参数坦信都是String类型的,如果需要其他
类型参数,需要将接收的String类型参数,显式的转换
② 在java中传递参数的方法有几种做简要的说明
传递参数的方法分为两种:
1.值传递
2.引用传递
③ java 参数传递问题
Java的参数传递总结:
JAVA的参数传递总是传"值",但是传值方式也分为两种方式,它们是靠传递参数的类型区分的。这两种类型分别为JAVA的基础类型和Object(对象)类型;基础类型包括boolean,byte,short,char,int,long,float,double,而Object就是对象,如数组.在参数为基础类型时,见代码:
public class A{
public static void main(String arg[]){
int a=3;
method1(a);
System.out.println(a);
}
public static void method1(int a){
a=4;
}
}
此时结果的输出将是1,而且只要你的值在Main函数中没变,a的值不管怎么传都不回变,这是因为a是传值,而这个"值"是a的一个拷贝数嫌,a的值在传递后的改变只是改变了a的拷贝的内容,并没有改变真正的a的值;对于参数为对象
public class A{ public class A{
public static void main(String arg[]){ public static void main(String arg[]){
int[] a=new int[1]; int[] a=new int[1];
a[0]=3; a[0]=3;
method1(a); method1(a);
System.out.println(a[0]); System.out.println(a[0]);
} }
public static void method1(int[] a){ public static void method1(int[] a){
a[0]--; a=new int[0];
} a[0]=4;
} }
}
左边的结果将是2,右边的结果将是3(未变),原因是:在传递的参数为对象时,这个传递的"值"中放的内容实际上是对向所在的地址,左边的情况是指针定位到对象的地址后,在上面把内容给改了,所以数组的值后会改变,而右边的情况为给对象新分配了一个指针到新的地址上面去,所以所有的薯核手操作都在新的地址上面,并不会影响原来的值氏昌。注:对于String,Interger,Boolean,Double等的系统对象,它们虽然是Object,但是任何方式的传递参数的值得改变并不会影响原来的值。
④ Java参数传递
Java的方法参数传递都是值传递。这个问题需要楼主慢慢理解,如果基础薄弱(C、C++基础弱)就记住就好。如果基础好可以从内存角度理解。
从语法和简单层面理解:str是一个String类型的对象,传递给changeStr方法,传递的是str的引用内容,方法内的changeStr(String value),value变量和str指向了同一个对象,但是value重新赋值后,它的指向改变了,但是str的指向不会发生,所以str的输出还是“Hello”,而changeObjValue方法传入的TEST的对象pt给changeObjValue(TEST ref),ref变量和pt变量指向了同一对象,之后通过改变了对象的内容,pt变量的指向没变,但是执行的对象的变量变了。所以pt的ptValue值变了。
进一步理解,Java对字符串进行了特殊处理,因为字符串这种数据类型太常用了,为了节省内容提高效率。Java把字符串放入了常量池,所以我们没办法在运行时修改一个字符串对象的内容。也就是对value变量的赋值操作是重写建立了一个对象。楼主可以测试经典的java String的代码:
Stringa="a";
Stringb="a";
Stringc=newString("a");
Stringd=newString("a");
System.out.println(a==b);
System.out.println(a==c);
System.out.println(b==c);
System.out.println(d==c);
再深入,Java没有C和C++的指针概念,可以粗暴的理解Java的引用是一种特殊的指针(实际上Java尽量把程序猿从指针中解放出来,或者说避免直接操作内存对象)。有一种不负责的说法:Java的基本类型传递传递的是值,也就是值的副本,引用类型传递的时引用。但是要注意String对象的内容不可变,而且传递的引用指向不可变。运行时Java的局部变量在栈空间中(线程私有),对象在堆内存中(线程公有),changeStr方法相当于在堆内存中又开辟了一块儿空间重写分配了一个对象,但是str没有指向这个新new出来的对象。而changeObjValue方法修改的pt指向的对象的内容也就是修改的是堆内存的数据,ref和pt指向的是一块儿内存。所以pt的对象数据会变化。
⑤ java 怎么传递参数
传对象,之后通过反射,getClass()获得对应的类,具体代码如下
Class<?>type=object.getClass();
Method method=type.getMethod("getId",null);//getId为getId()方法
Object id=method.invoke(object,null);
⑥ java 方法 传参
要是想传字面量的话 就这样
public class D {
public static void main(String[] args) throws Exception {
byte a = 45;
t(a);
t((byte)45);
}
public static void t(byte a) {
System.out.println(a);
}
}
正确的传参方式
⑦ java 方法可以传入多少个参数
java的方法可以动态传入参数,比如methodA(String... values),它相当于传进入一个values的数组,因此在你的内存支持的情况下,参数个数可以是无限个的。
⑧ java 方法传参时,不是必须传的参数如何设置
1、java是强匹配的,调用方法,对应的参数必须要有值,如果不是必须传的,意思是你可能不需要用的,可以传null
2、或者改造原有的方法参数,把多余的参数去掉
3、或者另外写一个方法,少参数的,然后该方法内部,调用原来的方法
4、代码截图如下:
5、看代码,13行的,就相当于调用少一个参数的
拓展资料:
如题,有一个方法里两个形参,我另一个文件类中一个方法想要那个方法的返回值,可是第二个参数在这里用不到,能否只传第一个参数 如何实现,前提这个类不能继承后重写方法,因为多人合同写的。
解决方案
不可以,变通的办法是再写一个只有一个参数的函数重载形式,在其中给另一个参数一个预设值,间接调用。
解决方案二:
一个Action调用两个不同的方法
解决方案三:
调用的时候给一个无影响的值
解决方案四:
讲道理的话是不能这样做的,不过如果你传的第二个参数如果对于当前调用时没有意义也是可以传一个值的。
解决方案五:
首先,Java语法规定了方法的参数列表,那么调用的时候就需要按照方法定义传递给足够的参数,你那种需要少传参的话可以重载方法,不要定义那么多参数就可以了。
解决方案六:
你一个方法传入两个参数,但如果你只调用一个,那么另外一个参数你让人家多尴尬,你让人家尴尬了,人家也不会让你好过的,因此就给你报错啊,当然你可以像楼上所说,传入一个无影响的参数进去,但这又有什么意义,还造成代码的浪费,你这个方法每调用一次,就造成一次浪费,因此,最好的方法就是传入一个参数,写一个重载方法。初学者经验不足,互相指教~
解决方案七:
既然用不到第二个参数,最简单的,给个无关痛痒的初始值。
解决方案八:
方法定义2个参数,在方法体内提供判断参数,看传入的参数是否为null,调用方法时,只传入一个值,另一个是null就行。
解决方案九:
方法 重载一下 就好了。
⑨ Java中函数参数的传递是怎样进行的
Java中函数参数的传递是按值传递。
下面证明Java中参数传递是完完全全是传值而不是传址。
一:
package com.sitinspring;
public class ChangeClass{
public void changeInt(int i){
i=5;
}
public void changeLong(long i){
i=555;
}
public void changeString(String str){
str="5555";
}
public void changeMember(Member member){
member=new Member("Cindy",35);
}
public void changeMemberField(Member member){
member.setAge(20);
member.setName("Andy");
}
public static void main(String[] args){
ChangeClass changeClass=new ChangeClass();
int intValue=10;
changeClass.changeInt(intValue);
System.out.println(intValue);
long longValue=10;
changeClass.changeLong(longValue);
System.out.println(longValue);
String stringValue="1234";
changeClass.changeString(stringValue);
System.out.println(stringValue);
Member member2=new Member("Douglas",45);
changeClass.changeMember(member2);
System.out.println(member2);
Member member=new Member("Bill",25);
changeClass.changeMemberField(member);
System.out.println(member);
}
}
二:
package com.sitinspring;
public class Member{
private String name;
private int age;
public Member(String name,int age){
this.age=age;
this.name=name;
}
public String toString(){
return "Member name="+name+" age="+age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
输出:
10
10
1234
Member name=Douglas age=45
Member name=Andy age=20
解释:
第一个输出10是因为int是基本类型,传递的参数是intValue的拷贝,对拷贝的修改对原值intValue没有影响.
第一个输出10和上面是一个道理.
第三个输出1234.由于String是类类型, str是stringValue的地址拷贝,参数str指向的地址和stringValue的一致,但在函数changeString 中,由于String的特殊性, str=“5555”和str=new String(“5555”)是等价的, str指向了新的”5555”所在的地址,此句后str就与原来的stringValue彻底脱离了联系.
第四个输出Member?name=Douglas?age=45的道理和上面相同.
第五个输出Member?name=Andy?age=20是因为changeMemberField函数中修改了参数member 的值,也就是修改member指向实例的值,而这个实例正是member指向的值,因此member就变成了name=Andy 且age=20.
结论:
Java中参数传递的都是值,对应基本类型,传递的是原值的拷贝;对于类类型,传递的是引用即地址的拷贝.
对于函数对参数的改变是否会影响原值的问题:值类型自然不会影响到原值.而对于类类型要看改变的是参数的地址还是值,如果是前者,参数和原引用指向了不同的地址,它们自然脱离了关系;如果是后者,修改的实例就是原引用指向的实例,这当然对原值进行了修改.
⑩ java里什么叫传入参数,请详细解释。
就是在你调用方法的时纳答乎候方法需要你提供的参数。例如:
public void add(int a, int b){
int c = a+b;
System.out.println("c="+c)
}
当你调用这举亮个方法的时候需要传入洞悉两个数 比如,1 和 2
则会输出结果 3
1 和 2 就是 传入的参数