Java main方法中的String[] args

时间:2021-10-24 16:54:17

—— Java 命令行参数

—— 关于其中的args以及public static / static public


  Java 命令行参数

    前面已经看到多个使用Java数组的示例,每一个Java应用程序都有一个带String arg[]参数的main方法,这个参数表明main方法将接收一个字符串数组,也就是命令行参数。
    例如,看一看下面这个程序:
------------------------------------------------------------------------------------------------------------------------------------------------------------
public class Message{
    public static void main(String[] args){
        if(args[0].equals("-h"))
            System.out.print("Hello,");
        else if(args[0].equals("-g"))
            System.out.print("Goodbye,");
        //print the other command-line arguments
        for(int i=1;i<args.length;i++)
            System.out.print(" "+args[i]);
        System.out.println("!");
    }
}

------------------------------------------------------------------------------------------------------------------------------------------------------------   
如果使用下面这个形式运行这个程序:
        java Message -g cruel world
    args数组将包含下列内容:
        args[0]: "-g"
        args[1]: "cruel"
        args[2]: "world"
    这个程序将显示下列信息:
        Goodbye, cruel world!
    C++注释:在Java应用程序的main方法中,程序名并没有存储在args数组中。例如当使用下列命令运行程序时
        java Message -h world
    args[0]是"-h",而不是"Message"或"java"。

声明:以上部分系《Java核心技术》(中文版第八版)第三章第十节数组的"命令行参数"文中段落


===========================================================================================================================

关于其中的args
以及public static / static public

    args参数可以写成任意形式,而不影响.class文件大小(它只是个形式参数) 但不提倡这样做 以下方式同样是不提倡的 但我们需要了解这些基本的内容

    我们也可以在主方法中这样写:static public void main
    举个例子 我说一个小伙子很高很帅和说一个小伙子很帅很高是没有区别的(数学上来说 = =)。 static public 这些都是Java当中的修饰符,修饰符等价于汉语当中的形容词
    我们来看看底层是如何实现的(src/java/lang/reflect/Modifier.java):

------------------------------------------------------------------------------------------------------------------------------------------------------------
/**
     * The {@code int} value representing the {@code public}
     * modifier.
     */

    public static final int PUBLIC           = 0x00000001;

/**
     * The {@code int} value representing the {@code static}
     * modifier.
     */

    public static final int STATIC           = 0x00000008;
------------------------------------------------------------------------------------------------------------------------------------------------------------    
Java当中的修饰符在底层实现的时候,采用的是一些整数值数值来实现,public采用的是整数1,static采用的是整数8,而主方法要求修饰符部分必须包含9,它不关心这个9是1+8得出来的,还是8+1得出来的  

【一些提醒而已:在Java当中char类型数据采用16个位即两个字节存储(一个英文占一个字节,一个中文占两个字节?这样过于纯粹的定义显然是不恰当的。事实上这还有个编码的问题。我们可以尝试在windows系统中把一个空的txt文件以Unicode编码存储,查看属性可以看到它已经包含了两个字节)】

声明:以上部分参考自 http://u.youku.com/5_vvvvv