仅供自己复习之用,可能有错误不要被误导了。
一。自定义包,并导入包
此java文件我放入如下路径下
通过 dos命令 进入位于Demo文件的目录
现在编译程序生成class文件,如下
-d 命令是将编译生成的class文件存放到指定位置
如果程序有写 package XXX;就会生成的一个XXX文件夹 中存有类文件;
如果aClass文件夹存在则将类文件放入其中,不存在则新建一个aClass文件夹;
这里package aClass;就会在E:\javacc生成一个aClass文件并将类文件放入其中;
再编写一个程序,如下
存放在E:\javacc\java文件夹下 和Demo.java存放的位置一样
然后编译packageDemo.java
编译错误 要导入包的包不存在;
java编译器 默认去当前路径下寻找此包,也就是E:\javacc\java下 而此路径下并没有aClass文件夹 所以出错
这是就需要设置类路径classpath;
类路径的作用是指示java编译器和java虚拟机去指定路径下寻找要导入的包和要编译(javac)的文件要运行(java)的文件。
这里我要将.class文件放入E:\javacc下,路径设置如下
此路径为临时路径,每开启一次cmd就需要设置一次;
路径中的‘ . ’;意思是表示当前路径就是 E:\javacc\java,设置当前路径的作用过会提到
这样就编译成功了,类文件位于当前路径下。
现在E:\javacc\java 如下
现在运行packageDemo.class
运行成功
但如果我们刚刚把classpath设置为如下
然后运行
这是因为 java虚拟机要去寻找packageDemo并运行它
然而他会根据路径去E:\javacc去寻找 没找到就会出错
如果没有设置classpath,java虚拟机默认去当前路径查找,而设置路径后他只会去类路径下查找
所以要加 ' . '; 但是java编译器不管设没设置classpath都会去当前路径查找要编译的.java文件
此次导包我的机器就出现了如上这些问题,
还有一个小问题
如果也将packageDemo.java 写上package bClass,改动后的代码如下
classpath为如下
然后编译,如下
这时 E:\javacc如下
现在通过dos命令进入packageDemo.class所在路径 E:\javacc\bClass
并运行
没有找到类错误
运行带有package XXX的程序格式为: java 包名.类型 ,如下
要记住
java编译器总会去当前目录下寻找,而java虚拟机是根据classpath去寻找。没有设置classpath默认去当前路径和归档文件去寻找。归档文件应该是java自带的类库
当运行时, 如果程序有package XXX,格式为 包名.类名 , 而且 包名会自动成为classpath的一部分
例如 Classpath路径 E:\javacc\java 类名是Demo程序中package设置为java
输入 java java.Demo
java虚拟机就回去 E:\javacc\java\java 找Demo类 这样就编译出错,找不到主类了,有点蛋疼不知道为啥。
将路径设置为E:\javacc就可以了
二。自定义jar包并导入jar包
我因为这个出错很多次这次明白了写下来,下面这个演示是错误的
演示:将.class文件变成jar文件
代码如下
编译.java文件 然后将.class文件打包成jar文件
jar文件位于当前路径下,然后将它移至 E:\javacc\aClass文件下
再编译一个程序导入jar文件类
classpath如下
编译如下
说程序包不存在
后来我试了又试,变成import aClass.*;也不行。 原来只要导入的包中没有java class文件就会出现程序包不存在。
而jarDemo是个文件,不是一个包名自然导入import aClass.jarDemo.*;也是出现程序包不存在。
所以不是将.class文件 打包成jar文件
而是将存有类文件的文件夹,打包成jar文件
然后classpath设置为jar文件的路径
正确做法如下
编译Demo类
这是E:\javacc\aClass 中存有Demo.class
然后将aClass打包成一个jar文件
设置classpath如下
编译如下
出现这个错误将 java文件下的 Demo.java删除即可,我也不知道为啥出这个错误~
然后在编译运行就可以了
如果你看到了这篇文章,请不要全信,因为我是新手,我复习之用。看不懂别骂我