黑马程序员技术交流社区

标题: 参数的问题 [打印本页]

作者: 孙沛    时间: 2012-9-4 21:48
标题: 参数的问题
class  Test
{
        public static String[] args = {"gg","ss","dd","dal"};
        public static void main(String[] args){
             System.out.println(args.length);
        }
}


为什么打印的是0,而不是4

作者: 杨卓儒    时间: 2012-9-4 22:01

  1. class  Test
  2. {
  3.         public static String[] args = {"gg","ss","dd","dal"};//定义字符串数组 args[]
  4.         public static void main(String[] args){  //注意主函数又初始化了args
  5.              System.out.println(args.length);// 所以这里打印的是主函数的元素列表,因为没有传值进去,所以当然是零了
  6.         }
  7. }
复制代码
楼主把你的字符串名字换一下就ok了,换成arrs也行啊,打印的就是4了
作者: 王陶成    时间: 2012-9-4 22:03
这样是传不进去的
public static String[] args = {"gg","ss","dd","dal"};是定义了一个成员变量,它跟main方法里面的args不同。main方法里面的args是局部变量
你要往main方法里面传参数,就要在别的地方调用main方法,传参进去
就像这样

class Demo {
        public static void main(String[] args) {
                String[] arr = {"gg","ss","dd","dal"};
                Test.main(arr);
        }
}

public class Test {
        public static void main(String[] args) {
                for (int x = 0; x < args.length; x++) {
                        System.out.println(args[x]);
                }
        }
}

也可以使用cmd 传参
作者: 杨鹏鹏    时间: 2012-9-4 22:06
public class  Test1
{
       
        public static String[] args = {"gg","ss","dd","dal"};
      static{
                main(args);
                System.out.println("静态代码块"+args.length);
        }
        public static void main(String[] args){
             //System.out.println(args[2]);
                System.out.println("main函数"+args.length);
        }
}
main函数4
静态代码块4
main函数0

作者: 彭润生    时间: 2012-9-4 22:07
楼上说的很对,主线程先从主函数main开始执行所以执行的就是主函数中的参数的长度,默认的长度为0。可以写成public static String[] args1 = {"gg","ss","dd","dal"};然后调用args1.length就可以了
作者: 袁艳超    时间: 2012-9-4 22:08
其实就是一句话,就近访问原则
作者: Tesla时光    时间: 2012-9-4 22:59
本帖最后由 翁发达 于 2012-9-4 23:05 编辑

因为args是成员变量,函数要调用局部同名变量要加this,因为是静态成员变量,所以前面加Test.args.length,写成这样就可以了

1png.png (20.6 KB, 下载次数: 22)

1png.png

作者: 舒远    时间: 2012-9-5 10:55
成员变量和方法参数(局部变量)同名的时候,局部变量会覆盖成员变量,且作用域只在方法内部有效,此时你打印的是局部变量的长度,跟成员变量没有关系。想要打印静态成员变量的长度应该使用类名.属性的方式,如果非静态成员应该使用this.属性的方式。以示区分,避免混淆嘛。一般在类的getter和setter时才会把变量名写的一样,通常不要写成一样的。公司开发规范中也是如此。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2