什么是包?
因为在同一文件夹中,不能出现同名文件,包的出现是避免同名文件问题,就是定义不同的包,在不同的包可存在相同的文件夹。包的本质是文件夹。包的存在是为了更好的管理文件。
简单定义一个包:
package www.code;
public class Pack
{
public static void main(String[] args)
{
System.out.println("hello day");
}
}
打包编译命令 :javac -d . Pack.java,在编译后,会在当前目录下生成一个文件夹www,在www下会有一个文件夹code,code文件夹下有Pack.class二进制文件。
-d 表示生成目录,根据package定义生成;
. 表示在当前所在目录生成子目录。
在执行时:java www.code.Pack(需要加上包即告诉编译器在哪儿找文件)
包的导入(import):
//定义一个包
package www.code.me;
public class Message
{
public void func()
{
System.out.println("Message 类");
}
}
在主类中导入上面的包:
//包的定义:
package www.code;
import www.code.me.Message; //包的导入
public class Pack
{
public static void main(String[] args)
{
Message message =new Message();
message.func(); //Message类
}
}
多个包的自动匹配编译顺序:在当前目录下按照主类的使用情况自动编译。
对于有多个包编译:javac -d . ./*.java
执行:java www.code.Pack
系统常用包:
- java.lang : 系统常用基础类(String类、Object类、包装类),JDK1.1之后自动导入
- java.util : Java 提供的工具程序包(集合类,ArrayList ,HashMap),需要手动导入
- juc : java.util,concurrent :并发程序包
访问控制权限:
private < default < protected < public
default是默认权限即什么都不写,包访问权限:仅供在同一包下类访问
protected : 继承访问权限,有继承关系的类可以访问。
关于protected:
//protected 属性在同一包的不同类可以访问
class A
{
protected int age=10;
}
public class Eaques
{
public static void main(String[] args)
{
A a=new A();
System.out.println(a.age); //10
}
}
不同包的继承类中访问protected属性:
package www.code.me;
public class Message
{
protected int age=10;
public void func()
{
System.out.println("Message 类");
}
}
定义另外一个包进行继承Message类:
package www.code;
import www.code.me.Message; //包的导入
public class Pack extends Message
{
public static void main(String[] args)
{
Message message =new Message();
message.func(); //Message类
System.out.println(new Pack().age); //10 在不同包的子类中访问protected权限
}
}