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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 涂金哲 中级黑马   /  2012-6-17 10:20  /  2268 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Hello {  
public static void main(String[] args) {   
for(int i=0;i<args.length;i++)
  {    
       System.out.println(args[i]);
      }
   }
}
一个小程序用于输出命令行参数。
Java 的main 函数中有一个参数String[] args ,所以main 方法接收的是一个字符串数组。运行时通过控制台输入命令Java Hello a b c 通过空格区分,打印args中首个元素结果为我们输入命令,而不是我们命名的类名、方法名(我个理解应该为这些,相当于告诉主函数要调用哪些类,方法),难道我们指定运行的字节码文件后,所有的全部被加载,我们无法指定虚拟机加载它们的顺序?

11 个回复

正序浏览
涂金哲 发表于 2012-6-18 09:44
数组非法索引说明了此时没有元素存在,是不是就是说明了没有默认值呢?

从上面的运行结果来看,应该就是没有默认值,必须为其赋值
回复 使用道具 举报
王莹 发表于 2012-6-17 19:29
这个应该是JAVA语言,甚至是别的语言定义的一个规则吧,就是定义一个主函数main,作为程序执行的入口,并 ...

数组非法索引说明了此时没有元素存在,是不是就是说明了没有默认值呢?
回复 使用道具 举报
涂金哲 发表于 2012-6-17 10:50
“只能输出其默认值……“无法理解这句话。如果它单纯的存储我们输入的内容的话,它的存在不就没有意义吗 ...

这个应该是JAVA语言,甚至是别的语言定义的一个规则吧,就是定义一个主函数main,作为程序执行的入口,并且定义了其参数是一个字符串型的数组。
还有,我之前说会输出其默认值,后来把你的程序改成了

public class WhileDemo {  
  public static void main(String[] args) {   
      
        System.out.println(args[0]);
      
    }
}

想输出其默认值,也就是args数组中,我自认为默认值为0这个字符.结果出现了如下的错误:



看来必须在运行时输入字符串,或者之前给字符串数组赋值才能输出
回复 使用道具 举报
王璐 中级黑马 2012-6-17 11:54:21
9#
String[] args 这个字符串数组是保存运行main函数时输入的参数的,例如main函数所在的类名为test   那么你在cmd运行   java   test   a   b   c   时,args[0]   =   a   ,args[1]=b,   args[2]=c     你就可以在你的程序中调用你输入的这些变量了。
回复 使用道具 举报
涂金哲 发表于 2012-6-17 11:02
我异想天开,觉得main 函数的形参的第一个元素因该是一些告诉虚拟机如何执行加载之类的命令,结果显示的 ...

楼主的想法非常不错,我辈汗颜啊
回复 使用道具 举报
李元峰 发表于 2012-6-17 10:42
这是我运行的结果 ,参数打印就像这样?楼主想问什么呢?》

我异想天开,觉得main 函数的形参的第一个元素因该是一些告诉虚拟机如何执行加载之类的命令,结果显示的是我们输入的命令。那这不就使我们和虚拟机隔离了,无法知道它是怎么运行的,也就无法从外界控制它。好奇而以……
回复 使用道具 举报
王莹 发表于 2012-6-17 10:38
这个有主函数main的类可以称为主类,在main函数里,你会定义一些类的对象,使用这些对象时会加载相应的类的 ...

“只能输出其默认值……“无法理解这句话。如果它单纯的存储我们输入的内容的话,它的存在不就没有意义吗?
回复 使用道具 举报
在java Hello命令 后面紧跟 的两个 String会被打印出来
回复 使用道具 举报
在java Hello命令 后面紧跟 的两个 String会被打印出来
回复 使用道具 举报

这是我运行的结果 ,参数打印就像这样?楼主想问什么呢?》


回复 使用道具 举报
这个有主函数main的类可以称为主类,在main函数里,你会定义一些类的对象,使用这些对象时会加载相应的类的属性,函数等。举个例子:

class Person
{
private int age;
public void setAge(int a)
{
  if(a>0 && a<130)
  {
   age = a;
   speak();
  }
  else
   System.out.println("feifa age");
}
public int getAge()
{
  return age;
}
private void speak()
{
  System.out.println("age="+age);
}
}

class PersonDemo
{
public static void  main(String[] args)
{
  Person p = new Person();
  p.setAge(-40);
  p.speak();
}
}

这个程序执行的顺序是:
1.从主类 PersonDemo的主函数main入口,创建Person类的对象p
2.调用p的方法p.setAge
3.调用p的方法p.speak

主函数的命令行参数只能输出其默认值或你所输入的字符串,而真正想运行程序中的类,方法,变量,则是通过主函数中语句的顺序来只执行的。(这是我所理解的)

























评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马