包
包的三大作用
- 区分相同名字的类
- 当类很多时,可以很好的管理
- 控制访问范围
基本语法
package run.arbor;
package
:关键字,表示打包,用于声明当前类所在的包,需要放在class的最上面,一个类中最多只能有一个package语句。run.arbor
:表示包名
包的本质
实际上就是创建不同的文件夹(目录)来保存类文件。
run.arbor
的本质就是run文件夹下有个arbor的文件夹。
包的使用
在同一个包中不可以创建相同类名的文件,不同包中就可以
在使用的时候可以,引入不同包的类,但是同名的类只能引入一个,同时引入两个的话则会报错
如果有这样的需求,可以引入全类名进行使用
package object02.run.arbor.test;
import object02.run.arbor.xiaoming.Dog;
public class Test {
public static void main(String[] args) {
// run.arbor.xiaoming.Dog;
Dog dog = new Dog();
// run.arbor.xiaoqiang.Dog
object02.run.arbor.xiaoqiang.Dog dog1 = new object02.run.arbor.xiaoqiang.Dog();
}
}
包命名
命名规则
只能包涵数字、字母、下划线、小圆点,不能使用数字开头,不能是关键字或者保留字,如果有多个单词,建议全小写
例如:parkhouse
,park
和 house
两个单词组成,更建议是park.house
命名规范
一般是小写字母+小圆点,一般是:公司网址后缀.公司网址.项目名.业务模块名
例如:run.arbor.oa.user
网址是 arbor.run
(推广一下,虽然没东西),项目名是oa系统,业务模块是用户模块
常用包
一个包下可以有很多个类,而java中常用的包有:
java.lang.*
:基本包,默认引入,不需要再次引入java.util.*
:工具包,里面有很多常用的工具类java.net.*
:网络包,网络开发java.awt.*
:界面开发包,GUI
引入包
语法:import 包;
import
:用于引入类,放在package的下面,在类定义前面,可以有多句,没有顺序要求,同一个包下不需要引入
比如引入 Scanner
类,就写import java.util.Scanner;
,此时就只是引入了util包中的Scanner
类。
而import java.util.*;
,则是引入util包中的所有类。建议需要哪个类,就引入哪个类,不建议使用*全部引入。
权限修饰符
在Java中提供了四种访问权限,用于控制方法和属性(成员变量)的访问权限。使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限。
public
:公共的,对外公开protected
:受保护的,对子类和同一个包中的类公开default
:默认的(可以不写),对同一个包中的类公开private
:私有的,只有类本身可以访问,不对外公开
public(公开的) | protected(受保护的) | default(默认的) | private(私有的) | |
---|---|---|---|---|
同一类中 | √ | √ | √ | √ |
同一包中 | √ | √ | √ | |
不同包子类 | √ | √ | ||
无关类 | √ |
修饰符可以用来修饰类和类中的属性(成员方法)、方法,类只能用默认的和public
修饰
定义一个类,这个类在object02.modifier.entity
包中,分别使用四种不同的访问修饰符,这里可以看到同一个类中,四种不同的修饰符的成员变量在同一个类的方法中都是可以访问到的。
package object02.modifier.entity;
public class A {
public int n1 = 100;
protected int n2 = 200;
int n3 = 300;
private int n4 = 400;
public void m1() {
System.out.println("n1 = " + n1);
System.out.println("n2 = " + n2);
System.out.println("n3 = " + n3);
System.out.println("n4 = " + n4);
}
}
在同一个包下定义另一个类,这时可以看到,被private修饰的n4变量不能被访问了
package object02.modifier.entity;
public class B {
public void say() {
A a = new A();
System.out.println("n1 = " + a.n1);
System.out.println("n2 = " + a.n2);
System.out.println("n3 = " + a.n3);
}
}
如果子类在同一个包中,那么这个类中的默认的修饰符修饰的属性也是可以被子类访问的,因此,在不同包中定义一个子类
package object02.modifier.pkg;
import object02.modifier.entity.A;
public class C extends A {
public void sayC() {
System.out.println("n1 = " + n1);
System.out.println("n2 = " + n2);
}
}
同样,在不同包的类就只能访问public修饰的属性或者方法了
package object02.modifier.pkg;
import object02.modifier.entity.A;
public class D {
public void sayD(){
A a = new A();
System.out.println("n1 = " + a.n1);
}
}