A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 孙沛 中级黑马   /  2012-9-4 21:48  /  1767 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class  Test
{
        public static String[] args = {"gg","ss","dd","dal"};
        public static void main(String[] args){
             System.out.println(args.length);
        }
}


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

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

8 个回复

倒序浏览

  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了

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
这样是传不进去的
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 传参

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
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

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
楼上说的很对,主线程先从主函数main开始执行所以执行的就是主函数中的参数的长度,默认的长度为0。可以写成public static String[] args1 = {"gg","ss","dd","dal"};然后调用args1.length就可以了
回复 使用道具 举报
其实就是一句话,就近访问原则
回复 使用道具 举报
本帖最后由 翁发达 于 2012-9-4 23:05 编辑

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

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

1png.png

评分

参与人数 1技术分 +1 收起 理由
田建 + 1 赞一个!

查看全部评分

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