Java包
java.lang:java的核心包。Jdk1.2版本以后,该包中的类自动导入。
java.awt:用于制作图形界面。
java.io:用于操作设备上的数据。
java.util:定义的是java的工具类,如集合,日期。
java.net:用于网络通讯。
1、包package
包:就是一个文件夹。用于存放类文件的。不同包中的类文件名可以重复。包的出现让程序的源文件和类文件分离。一般包中存放的.class文件对应的.java文件中不包含测试类(主类)。
包:
① 对类文件进行分类管理。
② 给类提供多层命名空间。
③ 写在程序文件的第一行。
④ 类名的全称:包名.类名。有两个体现。运行、创建。
⑤ 包也是一种封装形式。
如:
Package pack;
class PackageDemo
{
Public static void main(String[] args)
{
System.out.println(“hello package”);
}
}
(1)手动创建包:
在A路径下,建立一个包pack。
打开dos命令行,切换到源文件所在的路径下,输入以下命令:javac PackageDemo.java,则在该路径下产生一个.class文件。再将该.class文件放进包中。如果A路径就是当前路径,则再在dos控制台输入以下命令:java pack.PackageDemo;如果A路径不是当前路径,则运行前在执行一条命令:set classPath=.;A,然后再在dos控制台输入以下命令:java pack.PackageDemo,则会显示出结果。
(2)通过命令创建包:
打开dos命令行,切换到源文件所在的路径下,输入以下命令:javac -d c:\myclass (可以是任意的路径,随你意,如果是当前路径,则用.代替) PackageDemo.java,则在c:\myclass路径下会有一个包pack,里面有一个.class文件。
在分别再dos控制台上先后输入命令:set classPath=c:\myclsss(注意不是c:\myclass\pack)和java pack.PackageDemo,则会显示出结果。
2、包与包之间的访问
(1)包与包之间进行访问,被访问的包中的类以及类中的成员访问权限必须是public。(一个文件中允许有多个类,但是只有一个公共类。因为类前面加了公共以后,类名必须要和java文件名保持一致,现在有多个公共类,到底保存为哪一个就不清楚了。)
(2)在A路径下分别创建两个.java文件。
PackageDemo.java
代码:
package pack;
class PackageDemo
{
public static void main(String[] args)
{
packa.DemoA d=new packa.DemoA();
d.show();
}
}
DemoA.java
代码:
package packa;
pubic class DemoA
{
public void show()
{
System.out.println(“demoa show run”);
}
}
它们的.class文件存放在B路径下。
打开dos命令行,切换到A路径下:
先编译DemoA.java。javac -d c:\myclass DemoA.java。在编译PackageDemo.java,在此之前需指定路径,让虚拟机可以找到DemoA.class文件,就不需要在考虑是不还要编译DemoA.java,通过命令:set classPath=B。也为后面运行成功铺垫,运行时找到是.class文件,而它们都存在B路径下。
再运行PackageDemo.class文件。java pack.PackageDemo。
以前,我们把多个文件都放在一个文件夹下,不管是.java文件还是.class文件。那么我们互相访问的规则和一个文件中多个类之间的访问一样。
protected:
现在:PackageDemo.java、DemoA.java、DemoB.java都存放在A路径下;PackageDemo.class、DemoA.class、DemoB.class文件都存放到B路径下。
DemoA.java
代码:
package packa;
pubic class DemoA extends packb.DemoB
{
public void show()
{
System.out.println(“demoa show run”);
method();
}
}
DemoB.java
代码:
package packb;
public class DemoB
{
public void method()
{
System.out.println(“demoB method run”);
}
}
PackageDemo.java
代码:
package pack;
class PackageDemo
{
public static void main(String[] args)
{
packa.DemoA d1=new packa.DemoA();
d1.show();
packb.DemoB d2=new packb.DemoB();
d2.method();
}
}
编译运行成功。
当是如果:
DemoA.java
代码:
package packa;
pubic class DemoA extends packb.DemoB
{
public void show()
{
System.out.println(“demoa show run”);
method();
}
}
DemoB.java
代码:
package packb;
protected public class DemoB
{
public void method()
{
System.out.println(“demoB method run”);
}
}
PackageDemo.java
代码:
package pack;
class PackageDemo
{
public static void main(String[] args)
{
packa.DemoA d1=new packa.DemoA();
d1.show();
packb.DemoB d2=new packb.DemoB();
d2.method();
}
}
才可以编译运行成功。
包也有层次关系。如:
DemoA.java
代码:
package packa.haha.heihei.hehe;
pubic class DemoA
{
public void show()
{
System.out.println(“demoa show run”);
}
}
PackageDemo.java
代码:
package pack;
class PackageDemo
{
public static void main(String[] args)
{
packa.haha.heihei.hehe.DemoA
d=new packa.haha.heihei.hehe.DemoA();
d.show();
}
}
3、导入import
刚才我们也看到了,包名一旦具有了层次,访问里边的类就比较麻烦。因此我们可以使用关键字:import。导入的是包中类。
如:
DemoA.java
代码:
package packa.haha.heihei.hehe;
pubic class DemoA
{
public void show()
{
System.out.println(“demoa show run”);
}
}
PackageDemo.java
代码:
package pack;
import packa.haha.heihei.hehe.DemoA
class PackageDemo
{
public static void main(String[] args)
{
DemoA d=new DemoA();
d.show();
}
}
如果想使用包中多个类,可以一个一个导入,如:
import packa.haha.heihei.hehe.DemoA
import packa.haha.heihei.hehe.DemoA1
import packa.haha.heihei.hehe.DemoA2
也可以:
import packa.haha.heihei.hehe.*
但是最好需要哪个导入哪个。节省内存。
包名不能重复,建立包名可以使用url来完成定义,url是唯一的。特别是多层次包。
4、jar包
在java当中,jar包是一个压缩包。当包越来越多的时候,我们就将它们压缩成一个jar包。这与Windows中的打包思想相同。Jar包也可以被WinRAR打开。压缩的都能。
打包用到了JDK中的一个工具:jar.exe。在dos控制台中使用该工具要切换到包所在的路径下。
打包命令:jar -cf haha(jar包的包名任意取).jar 包1 包2 包3 ....
查看归档文件:如:jar -tf haha.jar
数据重定向:如:jar -tf haha.jar >c:\1.txt
将haha.jar中的内容复制到c盘下的1.txt文件中
jre下的bin:运行环境类库
jdk中的bin:编译环境类库,bin下面有tool.jar。当程序编译后:NoClassDefFoundError:com/sun/tools/javac/main。则表示jdk中的bin下面的tool.jar丢失。在别处烤一个可恢复。
2015-11-25至2015-11-30著