一、包的定义
由于我们现在的项目大多数是不可能一个人完成的,往往是多人协同完成,因此可能会出现类的重名定义。其实包就相当于我们电脑或手机上的文件目录,将程序文件放在包下,不同的包中,可以出现相同的类名,这样就解决了类的重名问题,方便对类的管理。
在Java中定义包的语句如以下程序所示:
package com.test.first;
需要注意的是:包定义必须放在类的首行
一旦程序之中有包,那么程序编译后的结果就必须将*.class文件保存在指定的目录之中,这时我们可以使用打包编译处理:javac -d . hello.java 其中:
-d 表示生成目录,而目录的结构就是package定义的结构。
. 表示在当前所在目录中生成程序类文件
这时要执行我们的程序就要带着包去执行程序类:java com.test.first.hello
二、包的导入
利用包的定义就可以将不同功能的类放在不同的包中,但是这些类也会存在彼此互相调用的关系,这时我们就需要使用import语句导入其它包中的程序类。
比如有以下Person类:
package com.test.first;
public class Person
{
private int age;
private String name;
public Person(String name,int age){
this.name=name;
this.age=age;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
}
在Demo类中使用Person类:
package com.test.execute;
import com.test.first.Person;
public class Demo
{
public static void main(String args[]){
Person per=new Person("张三",22);
System.out.println(per.getName());
}
}
可以看到,我们使用import语句导入了Person类,并在Demo类中进行了实例化。
当然我们也可以使用如下语句导入,效果完全相同。
import com.test.first.*;
注意:如果我们需要在A类中使用两个不同包中的名称相同的两个类,那么这时在A类中使用时可以加上这两个类的包名,用以区分不同的包中相同名称的类,解决引用不明的问题。
三、包的静态导入
假如有一个类,里面全是静态方法和抽象方法,那么按照原始做法肯定要导入程序所在的“包.类”,然后才可以通过类名称调用这些静态方法。
从JDK1.5开始对于类中全部由静态方法提供的特殊类是可以采用静态导入处理的。
包含静态方法程序:
package com.test.first;
public class Person
{
private int age;
private String name;
public static int addAge(int a,int b){
return a+b;
}
}
包含静态导入的程序:
package com.test.execute;
import static com.test.first.Person.*;
public class Demo
{
public static void main(String args[]){
System.out.println(addAge(20,31));
}
}
因此,我们可以知道静态导入的好处就是我们可以省略包名和类名,想全局方法那样使用我们的静态方法。
四、Jar命令
当一个项目开发完成之后,一定会存在大量的*.class文件,那么对于这些文件的管理往往可以使用一种亚缩结构的形式来处理,而这样的结构在Java中被称为Jar文件或者Jar包。
如果想将我们的程序打包为Jar文件,那么可以直接使用JDK中提供的Jar命令完成。
1.打包jar文件
命令行输入:jar --help 可以得到jar命令的使用帮助文档。
比如指令:jar -cvf hello.jar com 其中个字段含义如下:
"jar" jar命令关键字
"-c" 创建一个新的jar文件
"-v" 得到一个详细的输出
"-f" 设置要生成的jar文件的名称
"com" 要打包的程序文件
2.使用jar文件
每一个*.jar文件都是一个独立的程序路径,如果想在Java程序之中使用此路径,则必须通过CLASSPATH配置:
命令行输入:SET CLASSPATH=.;C:\Users\Mr Chen\Desktop\kele.jar(根据自己的文件路径设置)
当然,如果我们关闭了命令窗口,那么CLASSPATH配置也将失效。
五、系统常见包
Java语言发展至今一直提供有大量的支持类库,这些类库一般由两方面组成:
1、Java自身提供的(除了JDK提供的还会多一些标准);
>>>java.lang:有String、Number、Object等类,这个包在JDK1.1之后自动导入
>>>java.lang.reflect:反射机制处理包,所有的设计从这里开始
>>>java.util:工具类、数据结构的定义
>>>java.io:进行数据输入与输出流的包
>>>java.net:网络程序开发包
>>>java.sql:进行数据库编程的包
>>>java.awt、java.swing:图形用户界面包(GUI),awt是重量级、swing轻量级
2、由第三方厂商提供的Java支持类库,可以完成各种你所需要的功能,并且支持的厂商很多;
六、访问控制权限
Java中一共有四种访问控制权限:private、default、protected、public
访问范围 | private | default | protected | public |
同一包中的同一类 | ✔ | ✔ | ✔ | ✔ |
同一包中的不同类 | ✔ | ✔ | ✔ | |
不同包中的子类 | ✔ | ✔ | ||
不同包的所有类 | ✔ |