目录
编写Java原始码注意事项
在编写程序前,需要将文件的扩展名显现出来,并且要注意以下几点:
1.文件扩展名是 .java
2.主文档名和类名必须完全一致
3.区分大小写
4.空格只能用半角空格符或Tab字符
一个 .java 文件内是可以定义多个类的,但只能有一个公开(public)类且这个主文档名称必须与公开类名一致。
mian()方法的规定写法:
public static void main(String[] args)
Path(路径)的重要性
当输入一个指令时,没有给予一个明确的路径信息,操作系统会依据Path环境变量中设有的路径依次寻找是否有符合的指令。
可通过 echo %PATH% 查看系统Path环境变量目前的路径信息。
如果不设定好路径就无法通过javac指令将.java文件编译为.class文件,因此路径的设定是很重要的。(Path设定详情看错误小结1,给jdk设置环境变量就是这里设置路径)
系统环境变量和用户环境变量的区别:
在一个可以共享给多人使用的系统上,系统环境变量的设定,可以套用给每一个登录此系统的用户,而用户环境变量只影响个别用户。
系统内若安装两个以上的JDK,那么Path路径的设定顺序将会影响到执行哪个JDK下的工具程序,因此确定好要在系统中运行哪个版本的JDK和JRE非常重要,查看并确定环境变量中的Path信息是必须完成的动作。
JVM和CLASSPATH的关系
JVM的可执行文件扩展名是.class,启动JVM的指令就是java。
前面说到实体操作系统执行某个命令时,需要根据Path路径信息寻找可执行文件,同理JVM这个虚拟操作系统也要有路径信息去寻找它的.class。
例如:
通过 -classpath(PS:可以简写为 -cp) 这个指令告诉JVM我要运行的HelloWorld.class文件是在 e:\java01\java0 这个位置。
这个语句意思:
java(启动JVM指令)
-classpath(告知JVM可执行文件在哪的指令)
e:\java01\java0(.class文件位置)
HelloWorld(.class文件名)
有时候我们又想从当前文件夹开始寻找类文件,则可以使用 “.” 指定。
我就解释第二个语句就好了:
java(启动JVM指令)
-cp(告知JVM可执行文件在哪的指令)
. (指定从当前文件夹开始寻找类文件)
;(分隔符)
e:\java01\java0(.当前文件夹找完就从这个文件夹找)
HelloWorld(.class文件名)
使用Java开发的链接库中的那些类文档会封装为JAR文档,扩展名为 .jar。实际就是使用ZIP格式压缩,里面包含许多.class文档,设定classpath时将JAR文档当做特殊的文件夹就好了。
如果某个文件夹里面包含了许多.jar文档,那么就可以使用 * 来表示使用文件夹里所有的.jar文档。
例如:
一开始需要这样:
E:\java01\java0>java -cp .;e:\java01\abc.jar;e:\java01\bcd.jar jar01
变成这样,是不是就简单多了。。
E:\java01\java0>java -cp .;e:\java01\jars\* jar01
文件的分门别类很重要
文件分门别类可以避免很多冲突以及同名文件的覆盖啥的,反正一定要有这个意识。
我用两个文件夹(src和classes)分别存放 .java文件 和 .class文件。
然后就可以通过 -sourcepath 指定寻找类原始码的文件夹,使用 -d 来指定存放编译后位码的存放位置。
在javac编译时,如果要使用其他类链接库,也需要使用 -cp 指定 classpath。
E:\java01\java0>javac -sourcepath src -cp classes -d classes src/Main.java
这个语句的意思是:
javac(启动编译程序的指令)
-sourcepath(指定需要编译文件的文件夹指令)
src(存放需要编译的文件的文件夹)
-cp(设定编译前先去查看目标文件夹内是否存在已经编译后的文件的路径指令)
classes(目标文件夹路径)
-d(指定存放编译后的文件夹指令)
classes(存放编译后文件的文件夹)
src/Main.java(需要编译的文件)
大概就是这个样子吧,有些我身为初学者也是有点懵懵懂懂,理解了又好像没完全理解。。。
package的运用
当类原始码使用package进行分类后,就需要注意以下意义:
1.原始码文件要放与 package 所定义名称层级相同的文件夹层级。
如:
前面不是说将所有原始码存放于 src 文件夹里。
那么我定义一个 aaa类 并将其存放在使用 package 定义的 lsk.yy.a 包下,那 aaa.java 就必须存放在src文件夹中的 lsk/yy/a 文件夹下面。
定义一个 bb类 存放在 package 定义的 lsk.yy 包下,那 bb.java 就必须放在 lsk/yy 文件夹下。
且这些在没有辅助工具的帮助下,文件夹是需要自己创建的。
2.package 所定义的名称与 class 所定义的名称,会结合成为类的完全吻合名称。
如:
上面的 aaa类 位于 lsk.yy.a 包里,那么他的完全吻合名称就是 lsk.yy.a.aaa
bb类 位于 lsk.yy 包里,那么他的完全吻合名称就是 lsk.yy.bb
3.位码文档也要放与 package 所定义的层级相同的文件夹层级。
如:
前面将位码存放于 classes 文件夹里。
因为 aaa类 使用 package 定义的 lsk.yy.a 包下,所以编译出来的 aaa.class 必须放在 classes文件夹 lsk/yy/a 文件夹中。
同理 bb类 存放在 package 定义的 lsk.yy 包下,那编译出来的 bb.class 就必须放在 classes文件夹 lsk/yy 文件夹下。
4.要在包间内可以直接使用的类或方法,就必须声明为 public 。
5.import 是一个方便的工具,可以让你的原始码编写时不用使用完全吻合名称。
JRE的使用
当找到java可执行文件并且执行时,会依照以下规则寻找可用JRE:
1.能否在Java可执行文件文件夹下找到相关原生链接库。
2.能否在上一层目录中找到 jre 目录。
在执行java指令时,可以附带一个 -version 自变量显示执行的 JRE 版本。
大概就这样了,这一章学得有点迷迷糊糊的,有些都是我自己的瞎理解,只能在努力往后学,然后在回来瞅瞅我哪里学的不对劲了,就这样吧今天。。。