1、包的定义与使用(文件夹)—package
包实际上就是一个文件夹。如:package www.roman.java;(在java文件首行使用即可)
package www.roman.java;//包的定义与使用
public class Test{
public static void main(String[] args){
System.out.println("hello world");
}
}
//一旦程序出现包名称,那么*.class必须存在相应目录下。在JDK编译时使用配置参数
①.编译时需加上-d选项。
②打包编译命令:javac -d . 类名.java
-d:表示生成目录,根据package定义生成。
. :表示在当前所在目录生成子目录。
2、包的导入:import
编写简单Java类,本类需要被其他程序类所使用。
package www.roman.java.util;
public class Message{
public void print(){
System.out.println("[Message] Hello Package");
}
}
导入包
package www.roman.java.test;
import www.roman.java.util.Message;//导入程序类
public class Test{
public static void main(String[] args){
Message msg = new Message();
msg.print();
}
}
正常情况下,Test类引用Message类,那么首先应编译Message类,而后才是Test类。此时,最好的方法是:
自动匹配编译顺序(在当前目录下按照主类的使用情况自动编译):javac -d . ./*.java
注意:类使用class和public class的区别:
①public class:文件名称必须与类名称保持一致,如果希望一个类被其他包访问,则必须定义为public class。
②class:文件名称可以与类名称不一致,在一个*.java中可以定义多个class,但是这个类不允许被其他包访问。
import 包.类---->只会导入一个类。
import 包.*------>导入包中的多个类。(这种 * 并不意味着将包中所有的类都导入,而是根据你的需求导入)
不同包但是类名相同时:
package www.roman.java.test;
public class Message{
public void print(){
System.out.println("[Message] Hello Java");
}
}
Test同时导入两个包:
package www.roman.java.test;
import www.roman.java.util.*;//导入程序类
import www.roman.java.message.*;//导入程序类
public class Test{
public static void main(String[] args){
Message msg = new Message();
msg.print();
}
}
这时直接使用Message类会产生编译上的歧义。
此时应使用全名称定义:
www.roman.java.message.Message msg = new www.roman.java.message.Message();
3、系统常用包(了解)
(1)java.lang:系统常用基础包(String、Object、包装类),JDK1.1之后自动导入。
(2)java.util(重要):Java提供的工具程序包(集合类,ArrayList HashMap),需要手工导入。
(3)juc:java.util.concurrent:并发程序包
java.lang.reflect:java反射编程包
java.net:进行网络编程开发包
java.sql:进行数据库开发的支持包
java.io:IO编程开发包
java.awt(离不开windows平台)、java.swing:UI开发包,主要进行界面开发包,目前已经不用了。
4、访问控制权限:
private < default(包访问权限,仅在同一个包下访问) < protected(继承访问权限) < public
public:可以被所有其他类访问。
protected:自身、子类及同一个包中的类可以访问。
default:同一包中的类可以访问。
private:只能被自己访问和修改。
不同包中,继承权限仅供子类使用
总结:关于权限选择
①对于封装的描述90%使用private,只有10%会使用protected,这两个都叫封装。
②属性都使用private,方法都是用public。
封装性就是指private、default、protected三种权限的使用。
5、jar命令(important)
jar本质上也是一种压缩文件,里面保存的是*.class文件。要实现某一个功能模块,应把多个类形成压缩包提供给用户。
在JDK中提供实现jar文件操作的命令,只需要输入一个jar即可。常用参数如下:
①“c”:创建新档案
②“f”:指定档案文件名
③“v”:在标准输出中生成详细输出
编译源文件并打包
package www.bit.java.util;
public class Message {
public void print(){
System.out.println("Hello I am Message");
}
}
打包进行程序编译:javac -d . Message.java
将生成的程序类打包为jar文件:jar -cvf Message.jar Message.class
打开后发现有一个META-INF文件夹,里面包含版本号等信息。
此时的Message.jar就包含我们需要的程序类。
编写程序调用Message.jar
package www.roman.java.testjar;
import www.bit.java.util.Message;
public class Testjar{
public static void main(String[] args){
Message msg = new Message();
msg.print();
}
}
要想使用jar文件,还需要配置CLASSPATH,设置jar文件的加载路径才会生效。