方法setThisName的参数是按值传递,所以不影响实际的变量引用

解决方案 »

  1.   

    抛出异常或者输出The name isABC
      

  2.   

    输出的是args[0],
    因为setName()函数是静态的,所以可以作为传递值来用
      

  3.   

    把代码在eclipse里面运行一下为什么出 “at setName.main(setName.java:27)
    Exception in thread "main" ”这个错误呢  我这里为什么不出结果呢
      

  4.   

    xuwannian() 兄的回答简直是胡扯。。oxv() 的回答很全面,连这个都考虑了
    之所以抛出异常,是因为、你没有给命令行参数,args是空的,你上哪里找args[0]阿?
      

  5.   

    其实有必要介绍一下public static void main(String[] args)这个特殊成员方法的入参args.和其它的方法一样,args也是一个入参,它接受console传来的参数。具体点说就是:
    java setName arg1 arg2 …中的arg1,arg2,…把它们按照输入的顺序存放在args这个数组里面。如果入参为空,也就是 java setName 这样执行的话,args将被置为空。可以利用这个对程序的一些参数进行动态的赋值。
      

  6.   

    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0我偷偷的运行了一下。居然出错了。。那我就不讲了。。
      

  7.   

    楼主的程序本身就有问题
    它打印的东西根本就没有toString
    所以,怎么可能出东西呢?
    个人觉得,只能是异常
      

  8.   

    zhang21cnboy(事了抚衣去,不留身与名)兄:
    我解释可能会是错的,但是我想楼主这设计函数据的目的并不是想找出异常,而是想参参数返回值!通过静态函数是可以传递值的,这是我的个人意见!
      

  9.   

    哈哈,字符串的树出还要toString阿?java都是传递值的。
      

  10.   

    args[0]要看你执行时在后面输入的值是多少来定.
    本程序抛出异常
      

  11.   

    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个引用指向的同一对象
    这种情况与上面稍有不同 请指正..