【Java学习记录第二部分】


注:以下操作和命令仅基于Windows系统

1. Java程序的运行原理

  • 一个Java程序是怎样运行的呢?
    首先,Java程序执行需要经过编译、运行两个步骤,分别对应javacjava两个命令。javac命令就是将Java源文件(也就是.java文件)进行编译,生成对应的字节码文件(也就是.class文件),而java命令就是运行.class文件。在此过程中,需要注意的是:
    (1) 编译生成的.class文件默认放在当前文件夹下,当然也可以指定存放的位置。以HelloWorld.java为例:

    public class HelloWorld {
          
          
        public static void main(String[] args) {
          
          
            System.out.println("Hello World!");
        }
    }
    

    在终端窗口中输入以下编译命令:

    javac -d . HelloWorld.java	//或者为:javac HelloWorld.java
    

    其中,-d destdir(此例中.代表当前文件夹),编译命令的常用格式为:

    javac -d destdir srcFile
    

    其中,destdir为想要指定的.class文件的存储位置,只要是磁盘上的有效路径即可;srcFile为Java源文件所在的位置,可以是绝对路径,也可以是相对路径,默认在当前路径下。需要注意的是,两者的路径均需要放在英文双引号之内
    (2) 编译生成的.class文件有默认的文件名,即总是以源文件所定义的类名作为主文件名。当一个源文件内定义了多个类时,将编译生成多个.class文件,比如在类A里定义了一个类B,那么将生成两个.class文件:A.class和A$B.class。
    (3) Java源文件经编译后,便可以等待被调用或者作为主程序运行。若作为主程序运行(也就是包含 main() 方法),则可以在命令行窗口进入主程序所在的路径,然后输入运行命令:

    java HelloWorld
    
    • 值得注意的是,java命令后直接跟上主类名即可。
    • 若主程序需要调用其他的类或者引用第三方jar包,一种妥善的做法是,指定jar包所在的位置(也就是临时指定CLASSPATH的搜索路径),并将需要调用的其他类与主程序放在同一文件夹下,以运行Flips为例,其需要调用其他类,并且需要引用第三方jar包和指定输入参数,具体命令如下:
    java -classpath ".;E:\zp\study\algs4.jar" Flips 1000000 
    

    以上,-classpath是运行命令的参数选项,可以简写为-cp,搜索路径之间用 ; 隔开,并放在英文双引号之内Flips为包含 main() 方法的类,1000000为Flips类中 main() 方法需要输入的参数。

2. 程序入口与输入输出

2.1 Java程序的入口——main()方法

main() 方法的一般定义为:

public static void main(String args[]){
    
    ...}
  • 为了可以让JVM自由调用,将 main() 方法的访问权限定为public(公共访问权限)。
  • static表明 main() 方法属于主类,JVM调用 main() 时可以直接通过该类来调用而不用再另外创建一个对象。
  • 因为 main() 方法的返回值将返回到JVM,这没有任何意义,因此void表明 main() 方法没有返回值。
  • main() 方法的形参argsString数组,args由JVM来进行传值,其来源可以是命令行输入(也可以是标准输入流),如上述运行Flips类时,其后跟的参数1000000。当然,实际传入的参数也可以来源于重定向和管道,如:
  • 重定向:
java -classpath ".;E:\zp\study\algs4.jar" Flips < data.txt  

这条命令会从文件data.txt 中读取Flipsmain() 方法所需要的实际参数。

  • 管道:
java Data | java -classpath ".;E:\zp\study\algs4.jar" Flips

其中,运行java Data会产生Flipsmain() 方法所需要的实际参数。

2.2 输入输出

下图为Java程序整体结构:
Java程序整体结构(1) 相对于终端窗口,其输入可以来源于标准输入流、文件、命令行参数;输出可以为标准输出流、文件、标准绘图等。管道及重定向已在之前讲过,在此不再赘述。
(2) Java提供了强大的输入输出库,可自行查看相应的API。

————to be continued

猜你喜欢

转载自blog.csdn.net/zp_stu/article/details/126170877