一、包:库单元
包内包含同一组类,它们在单一的名字空间之下被组织在了一起。
例如:在java.util包下,有一个名为ArrayList的类,则这个类的全名为: java.util.ArrayList eg:
//使用import关键字之前
java.util.ArrayList<String> sList1 = new java.util.ArrayList<String>();
sList1.add("Hello");
sList1.add("World");
System.out.println(sList1);
复制代码
为了避免代码过于冗长,引入import关键字:
eg:
在第一行导入包:
import java.util.ArrayList;
复制代码
此后,可在代码中直接使用ArrayList
//使用import关键字之后
ArrayList<String> sList2 = new ArrayList<String>();
sList2.add("Hello");
sList2.add("World");
System.out.println(sList2);
复制代码
补充:如果想导入java.util包下的全部类,则可以使用:
import java.util.*
复制代码
package关键字
用于创建包。
为了创建一个独一无二的包名,我们通常会使用域名反转的方式来作为包名的前半部分,包名的后半部分则表示当前包的功能。例如:
package com.kosmoleung.service
复制代码
package语句必须是文件中第一行非注释代码
运行过程:
找出环境变量CLASSPATH,CLASSPATH用于查找class文件的根目录。从根目录开始,解释器将包名的句点替换成反斜杠,即将com.kosmoleung.service替换为com/kosmoleung/service。解释器会在这个目录下,查找与创建类相关的class文件
静态导入
import static PACKAGE.NAME
复制代码
在权限许可的范围内,允许在代码中直接引用别的类的static变量和方法。
二、JAVA权限修饰词
1.包访问权限(默认)
当前包下的所有其他类对成员具备访问权限,但包以外的类不具备访问权限。
2.接口访问权限
修饰符public,项目下的全部成员均可访问。
3.私有访问权限
修饰词private,只有当前类的成员才有权限访问。
4.继承访问权限
修饰词protected,基类的protected成员只有派生类(子孙类)能够访问。同时,也具备包访问权限
修饰词 | 同一个类 | 同一个包 | 子孙类 | 其他包 |
---|---|---|---|---|
public | yes | yes | yes | yes |
protected | yes | yes | yes | no |
friendly(默认) | yes | yes | no | no |
private | yes | no | no | no |
三、类的访问权限
修饰词必须出现于class关键字之前。
例如:
public class Demo{}
复制代码
限制:
1.每一个文件只能有一个public类
2.这个public类的名称必须完全与文件名匹配
3.类的访问权限既不可以用private来修饰,也不能用protected来修饰。 (如果不需要其他任何人对该类具有访问权限,则可以私有化所有的构造方法。)
特例:对于包访问权限的类,只有同一个包下的类可以访问它,其他包的成员无法对其进行实例化。 但是,包访问权限类中的静态成员,如果用public修饰,则其他包的成员仍然可以访问这个静态成员。
当我们通过私有化构造方法的方式来阻止外界获得当前类的访问权限时,我们可以通过开放一个static方法来实例化当前类。(用途:在实例化之前做一些额外的工作,比如限制数量)
eg:
public class StaticCreateClassDemo {
public static void main(String[] args) {
AccessCount.getAccess();
AccessCount.getAccess();
AccessCount.getAccess();
AccessCount.getAccess();
AccessCount.getAccess();
AccessCount.getAccess();
}
}
class AccessCount{
private static int count = 0;
private AccessCount(){
}
public static AccessCount getAccess(){
count++;
if(count > 5)
{
System.out.println("超过限额,将不再创建对象");
return null;
}
System.out.println("已创建"+count+"个对象");
return new AccessCount();
}
}
复制代码