本文只做自学笔记使用,之前已有一点点java基础,只记录我不知道的一些知识点,具体以书中内容为准。
一、HelloWorld
1、下面代码实际使用java.lang包下的System类的public static成员变量out,out是PrintStream类型的。println()是PrintStream的一个公共方法,可以将其中的字符串输出并进行换行。与其类似的还有print()方法,这个方法不会进行换行。
System.out.println("今天天气真好啊");
2、关于PATH,这里具体指javac的路径设置,javac将.java文件编译成.class文件。
(1) 安装JDK(JRE)时,Windows会自动把javac放到C:\Windows\system32,但由于系统的原因,这个路径有可能不同。所以为了在编译时能够稳定找到javac,可以设置javac的路径,有以下几种方法:命令行set命令、设置用户环境变量、设置系统环境变量。
(2) 命令行 SET PATH=路径,但是每次打开命令行都要设置,比较麻烦,一般我们都会直接设置用户/系统环境变量。
(3) 当配置多个JDK,以求多个编译方式时,如果所有的JDK的javac路径都放在用户/系统环境变量中,优先级按照“系统>用户”,“前面设置>后面设置”
(4) 可以通过指定javac的路径的方式,在命令行或IDE中使用指定方式进行编译。
3、命令行执行java程序语句
javac HelloWorld.java //编译为.class文件
java HelloWorld //执行.class文件,不可有.class
JVM默认CLASSPATH是当前文件夹中的.class文件,我们也可再执行时指定.class文件的路径CLASSPATH,注意“.;”可以使JVM优先搜索默认目录后再去搜索指定路径,如果没有“.”则只可以搜索指定路径。多个路径要使用“;”进行隔开。
.jar文件实际上是多个.class文件通过zip压缩而成,也可作为CLASSPATH。
java -cp .;C:\workspace HelloWorld
也可以直接设置CLASSPATH,方法与PATH类似:
SET CLASSPATH=C:\classes;C:\lib\abc.jar
4、如果代码中使用本类外的其他类,必须在编译和执行的时候指定对应的.java文件的PATH和.class文件的CLASSPATH。
管理原始码与位码文档
1、javac与SOURCEPATH。
.java文件和.classs文件通常是分离的,为了便于管理。这时,编译指令有些变化,如下。首先确保该路径下有classes和src两个文件夹,src下的文件夹下有Main.Class文件。下面指令表示,src文件夹下的Main类中调用的方法来自于src中,编译后产生的.class文件将会保存在classes文件夹中。
javac -sourcepath src -d classes src/Main.java
更完整的如下,-verbose可以帮助我们在命令行中看到整个编译过程,-cp指定CLASSPATH,如果编译的类中调用其他的类,并且编译成功的.class文件已在指定的CLASSPATH中,则可以减少反复编译的时间。
javac -verbose -sourcepath src -cp classes -d classes src/Main.java
注意:JAR文档的搜索路径与类加载器有关,在17章介绍
2、package和import。为避免多个组织在编写代码是会对类名相同,或者功能分离,所以必须有包管理,其实可以简单看作这个部门的代码都统一放在一个文件夹下,在import时要引入包的某个类,或者是使用*,import这个包下的所有类。不过慎用*,因为当多个包下有相同名称的类,恰好代码中调用该类,则会在编译过程中会因为无法确定该类属于哪个包而失败。
如果不使用import,使用一个类的时候,要通过“包.类”来进行,当包名过长会很不方便。比如“Student student;”,写成如下的方式,zg.practice是Student类所在的包。
zg.practice.Student student;
Java SE API中有很多常用类,如java.lang下的类,不需要import,编译程序会先默认从其中寻找。
位码和原始码都可使用JAR文档进行封装。