public class setName { public static void setThisName(String name,String newname){ name=newname; }
public static void main(String[] args) {
String name="ABC"; setThisName(name,args[0]); System.out.println("The name is" + name);
} } -------------------------------------------------------- 如果在java后没接参数,则args是默认为null 因此访问args[0]会抛出ArrayIndexOutOfBoundsException异常.如果正确输入参数,比如java setName helloworld 结果还是The name isABC.其实这是个老问题了,java中是"传值调用".invoke setThisName方法后,原先在main方法中声明的String name="ABC"的值不会改变. setThisName(String name,String newname)会产生name一份拷贝,但结束调用后 jvm会在适当的时机gc掉这份拷贝,与main中的String name="ABC"无关补充一点: http://java.sun.com/j2se/1.4.2/docs/api/ Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared.注意的是如果setThisName(object ref)方法中是参数是一个对象object的引用ref,还是会产生一份引用的拷贝,不过这时调用setThisName如果通过pref引用修改其值域 则调用结束后 main中原对象的值域会发生相应改变 因为操作的其实都是2个引用指向的同一对象 这种情况与上面稍有不同 请指正..
因为setName()函数是静态的,所以可以作为传递值来用
Exception in thread "main" ”这个错误呢 我这里为什么不出结果呢
之所以抛出异常,是因为、你没有给命令行参数,args是空的,你上哪里找args[0]阿?
java setName arg1 arg2 …中的arg1,arg2,…把它们按照输入的顺序存放在args这个数组里面。如果入参为空,也就是 java setName 这样执行的话,args将被置为空。可以利用这个对程序的一些参数进行动态的赋值。
它打印的东西根本就没有toString
所以,怎么可能出东西呢?
个人觉得,只能是异常
我解释可能会是错的,但是我想楼主这设计函数据的目的并不是想找出异常,而是想参参数返回值!通过静态函数是可以传递值的,这是我的个人意见!
本程序抛出异常
public static void setThisName(String name,String newname){
name=newname;
}
public static void main(String[] args) {
String name="ABC";
setThisName(name,args[0]);
System.out.println("The name is" + name);
}
}
--------------------------------------------------------
如果在java后没接参数,则args是默认为null 因此访问args[0]会抛出ArrayIndexOutOfBoundsException异常.如果正确输入参数,比如java setName helloworld
结果还是The name isABC.其实这是个老问题了,java中是"传值调用".invoke setThisName方法后,原先在main方法中声明的String name="ABC"的值不会改变.
setThisName(String name,String newname)会产生name一份拷贝,但结束调用后 jvm会在适当的时机gc掉这份拷贝,与main中的String name="ABC"无关补充一点:
http://java.sun.com/j2se/1.4.2/docs/api/
Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared.注意的是如果setThisName(object ref)方法中是参数是一个对象object的引用ref,还是会产生一份引用的拷贝,不过这时调用setThisName如果通过pref引用修改其值域 则调用结束后
main中原对象的值域会发生相应改变 因为操作的其实都是2个引用指向的同一对象
这种情况与上面稍有不同 请指正..