不同文件的类相互调用
第一种情况,main函数所在类不写import使用其他类
1、不需要import就能使用其他类有几种情况:
第一、被被调用类是调用类的内部类
第二、被调用的类与调用类在同一个文件编写
第三、被调用类与调用类在同一个包下面(如果类的顶部有package关键字,那么package后面的内容一样)。
第一和第二种情况不演示了
第三种情况:
目录结构:
A类的内容:
B类的内容:
直接在a文件所在目录下面编译运行
第二种情况,main函数所在类import其他类
1、如果一个类可以import其他类,要么系统默认的类加载器能够加载到该类,要么该类的路径在classpath中有定义。
第一种情况,在命令行编译时指定classpath
文件目录结构
A类的内容:
B类的内容:
直接在a目录同级目录下编译运行,并且指定编译后的文件输出位置为bin目录,前提输出位置的文件夹bin需要先创建好
注意一点:如果A类的全名是a.A那么java运行所在目录需要在a目录同级目录下,除非指定了classpath路径
总结一句话,如果不用import就调用某个类,那么该类必须和调用类在同一个包下面,如果不在同一个包下面就要使用import关键字导入,而且classpath下面一定要能找到被import的类,classpath指定路径的深度是类的全名一级域名所在的文件位置,javaboostrap和ExtClassLoader会默认的加载一些jre下面的类
下面讲一下classpath环境变量
1、classpath可以在编译的时候通过-classpat或者-cp来指定,也可以作为环境变量CLASSPATH来指定。
第一、CLASSPATH首先要写的是一个.,代表的是当前目录,如果是命令行运行那么就是命令行所在的目录,如果不加的话,java运行的时候会找不到.class文件
目录结构:
A和B里面没有任何import和package,其他内容和上面A、B文件一样
第二,如果在CLASSPATH下面指定了当前目录和类目录,那么import的类会先从当前目录下面去找,找不到在到其他CLASSPATH下面去找。
CLASSPATH内容:
bin下面的内容
A.java内容
忽略b这个目录没用
直接在a目录下面编译运行A.java
能正常打印是因为CLASSPATH下面有B类的.class文件,如果把bin目录从CLASSPATH下面删掉那么编译和运行都会出问题
第三、可以把bin下的a文件夹打成一个jar包,然后编译运行时引用
第四、上面那种方式需要指定到具体哪一个jar,下面这种方式可以指定该目录下面所有的jar