黑马程序员技术交流社区

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

作者: 饶正林    时间: 2013-3-29 12:00
标题: args数组的问题
  1. <blockquote>class chapter6_3
复制代码
为何不让输入数据?请讲讲main()中数组args的知识!


2013-03-29_115501.png (7.59 KB, 下载次数: 16)

2013-03-29_115501.png

作者: 饶正林    时间: 2013-3-29 12:02
  1. class chapter6_3
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 if(args.length!=1)
  6.                 {
  7.                         System.out.println("请输入一个字符:");
  8.                 }
  9.                 try{
  10.                         int i=Integer.parseInt(args[0]);
  11.                         System.out.println("你输入的数据为"+"i");
  12.                         }
  13.                 catch(NumberFormatException e){
  14.                         System.out.print("数据格式不正确!");
  15.                        
  16.                         }
  17.         }
  18. }
复制代码

作者: 张洪慊    时间: 2013-3-29 12:35
  1. class chapter6_3
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.           //System.out.println(args.length);
  6.                 if(args.length!=1)
  7.                 {
  8.                         System.out.println("请输入一个字符:");
  9.                 }
  10.                 try{
  11.                         int i=Integer.parseInt(args[0]);
  12.                         System.out.println("你输入的数据为"+"i");//这个位置 :System.out.println("你输入的数据为"+i);
  13.                         }
  14.                 catch(NumberFormatException e){
  15.                         System.out.print("数据格式不正确!");
  16.                         
  17.                         }
  18.         }
  19. }
  20. /*
  21. 同学仔细看下错误提示:
  22. 数组越界异常 0,在第十行:  int i=Integer.parseInt(args[0]);
  23. 这是因为你没有传入任何数据,默认的字符数组的长度为零->arg[0]根本不存在
  24. 你可以在上面加上输出语句看一下.
  25. 如果想要传入数据:
  26. 在运行时: java  chapter6_3  "123"  "456"(表示你传入的数据)->使数组长度为2
  27. */
复制代码

作者: 小黑黑    时间: 2013-3-29 12:48
简单来说,main方法也是一个方法,其实和普通的方法没什么区别,只是作为程序的入口,仅此而已哦。所以,你这里只是声明了一个String[] args的数组,就像你声明普通的数组一样:int[] arr;但是你这个数组并没初始化,什么值都没有,当然会报空指针异常ArrayIndexOutOfBounds咯,所以,你首先需要对这个args数组进行初始化,才能输入字符(串)。比如你可以在if前加上args = new String[10];或者其他类似的初始化语句。这样你再试试。
另外,你这里并没有定义输入的方法,只是简单的打印了“请输入一个字符:”这个语句。给你一个解决方案:
  1. public static void main(String[] args) {
  2.                 args = new String[10];
  3.                 Scanner in = new Scanner(System.in);
  4.                 if(args.length!=1)
  5.         {
  6.                         System.out.print("请输入一个字符:");
  7.                         args[0] = in.next();
  8.         }
  9.                 try{
  10.                         int i=Integer.parseInt(args[0]);
  11.                         System.out.println("你输入的数据为"+"i");
  12.                 }catch(NumberFormatException e){
  13.                         System.out.println("数据格式不正确!");
  14.                 }
复制代码

作者: 张玉保    时间: 2013-3-29 16:24
main()函数,作为主函数,其实就是一个特殊的函数,他可以作为程序的入口,但是main 不是一个关键字,只是一个可以被虚拟机识别的特殊单词。args(全拼arguments)就是一个数组名,可以更改,但是习惯上都是用这个。关于ArrayIndexOutOfBoundsException是由于虚拟机再调用主函数时默认的传入的是
  1. new String[0]
复制代码
, 解决数组越界异常你可以重新创建数组,并定义长度,例如:
  1. args=new String[10]
复制代码

作者: HM朱蛟    时间: 2013-3-30 01:10
什么是主函数?
主函数是一个特殊函数,可被JVM调用,作为程序的入口。
主函数各个参数详解?
_public:最高访问权限。
_static:主函数随着类的加载而存在。
_void:没有返回值。
_main:不是关键字,一个特殊的单词,jvm只认他。
_(String[] args):主函数参数,参数类型为字符串数组类型,这个数组里的元素是字符串。
Ps:args只是数组名字,可以任意取,比如图(String[] x)
扩展:
class Demo
{
public static void main(String[] args)
        {
        String [] arr = {"haha","hehe"};       
        Run.main(arr);//等价于DOS命令下:java Demo haha hehe
        }       
}

class Run
{
                public static void main(String[] s)
                {
                        for (int x=0;x<s.length;x++)
                        {
                         System.out.print(s[x]+",")        ;
                        }
                }
}
补充:
1:DOS命令下:java Demo haha hehe 就是向主函数传递字符串参数
2:一个程序可以拥有多个main函数,编译可以通过




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