浓茶淡舞

春来江水绿如蓝
posts - 5, comments - 1, trackbacks - 0, articles - 0

2010年12月17日


在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是public static void 类型的,方法必须接收一个字符串数组的参数等等。

一、main()方法的定义

main()方法的声明为:public static void main(String args[])。必须这么定义,这是Java的规范。

public:表示此方法为公共的,可被外部访问;
static:表示此方法为static方法,可被类名直接调用;
void:表示此方法无返回值;
main:系统规定的方法名称;
String args[]:接受运行时参数;==》表示String类型的对象数组;

为什么要这么定义,这和JVM的运行有关系。
当一个类中有main()方法时,说明这是个Java应用程序,执行命令“java 类名”则会启动虚拟机执行该类中的main方法。

由于JVM在运行这个Java应用程序的时候,首先会调用main()方法,调用时不实例化这个类的对象,而是通过类名直接调用因此需要是限制为public static。
 
对于java中的main方法,jvm有限制,不能有返回值,因此返回值类型为void。

main()方法中还有一个输入参数,类型为String[],这个也是java的规范,main()方法中必须有一个入参,类型必须为String[],至于字符串数组的名字,这个是可以自己设定的,根据习惯,这个字符串数组的名字一般和sun java规范范例中mian参数名保持一致,取名为args。
 
因此,main()方法定义必须是:“public static void main(String 字符串数组参数名[])”。


二、main()方法中字符串参数数组作用

main()方法中字符串参数数组作用是接收命令行输入参数的,命令行的参数之间用空格隔开。

下面给出一个例子,看看如何初始化和使用这个数组的。

 1public class Demo {
 2    public static void main(String args[]) {
 3        //假设要求只能输入两个参数 
 4        if (args.length != 2{
 5            //表示不是两个参数,则要退出系统 
 6            System.out.println("运行参数不正确,正确的格式为:");
 7            System.out.println("java Demo 用户名 密码");
 8            System.exit(1);
 9        }

10         
11        String userName = args[0];
12        String userPasswd = args[1];
13        //判断用户名是否为jason,密码是否为123 
14        //为什么要用字符串.equals去判断而不是用username调用equals
15        //这样可以有效的避免NullPointerException,这是一种经典的写法 
16        if ("jason".equals(userName) && "123".equals(userPasswd)) {
17            System.out.println("登陆成功!");
18        }
 else {
19            System.out.println("用户名或密码不正确!");
20        }

21    }

22}


三、main()方法中可以throw Exception
 
main()方法中可以抛出异常,main()方法上也可以声明抛出异常(throws Exception)。
 
比如,下面这个写法是正确的:

1public class TestMain {
2    public static void main(String[] args) throws Exception {
3        System.out.println("main()方法中可以抛出异常");
4        throw new Exception("");
5    }

6}



总结:

main()方法作为一个特殊的规范,与普通的方法有很大区别,限制很多,理解其原理需要学习JVM相关知识


参考资料:http://lavasoft.blog.51cto.com/62575/53263
 

posted @ 2010-12-17 22:05 爱冷の心无悔 阅读(275) | 评论 (0)编辑 收藏

     摘要:     【问题提出】 假如我们编译运行下面这个程序会看到什么? 1public class Test { 2    public static void main(String[] args) { 3   &nbs...  阅读全文

posted @ 2010-12-17 20:12 爱冷の心无悔 阅读(242) | 评论 (0)编辑 收藏

     摘要: java.math.BigDecimal 不可变的、任意精度的有符号十进制数。BigDecimal 由任意精度的整数非标度值和32位的整数标度(scale)组成。 如果为零或正数,则标度是小数点后的位数。如果为负数,则将该数的非标度值乘以10的负scale次幂。 因此,BigDecimal表示的数值是(unscaledValue × 10-scale)。 与之相关的还有两个类: ...  阅读全文

posted @ 2010-12-17 15:39 爱冷の心无悔 阅读(5511) | 评论 (1)编辑 收藏