先来谈一下为什么要有包;
假如在一个公司里强子和小刚共同做一个项目,可它们都想创建名为Dog的类,因为在同一文件中类名不能相同,那Dog类谁用呢?
为了解决这种问题就有了包这种概念,在不同包里都可以有Dog类,即类名可以相同。
JAVA包
1. 包的介绍
-
. 包的作用:
①区分相同的类
②类很多的时候,更好地管理类
③控制访问范围 -
. 语法:package com.cxdedu
package是关键字,表示打包 com.cxdedu:表示包名 -
. 引入包:格式:import 包
且有 import java.util.Scanner;表示只引入一个Scanner类
而 import java.util.*;表示将java.util包所有类都引入(最好是需要那个引入那个,少用 *引入) -
. 使用细节:
①package 的作用是声明当前类所在的包,需要放在类(或文件)的最上面,一个类最多只有一个package
②import指令 位置放在package的下面,在类定义前面,可以有多句且没有顺序要求
例:
package com.hspedu.pkg;//声明类位置的包
import java.util.Arrays;//引入系统自带的 util包的 Arrays类此类可以实现数组的排序
import java.util.Scanner;//放在类定义前面且无顺序要求
public class PkgDetail {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr = {0,8,-1,9};
Arrays.sort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
}
运行:(这里不再是控制面板,我用的IDEA)
注意:其实包的本质实际上就是 创建不同的文件夹/目录来保存文件;然后通过 import + 包名 引用其他包里的类(类里有我们需要的成员方法或属性)
2. 包的命名
- 规则:只能包含数字、字母、下划线、小圆点,但不能用数字开头、不能是关键字或保留字
- 规范:一般是小写字母 + 小圆点
通常为:com.公司名.项目名.企业模块名 ; 如:com.cxd.javalearn.package //命名正确
com.cxd.class.package //错误有class关键字 - 其中,每次出现
.
就是分了一级,就像文件夹/目录 包含了新的文件夹/目录 ;像这样com.hspedu.pkg的包
长这样:
解释一下:这里的src是IDEA放源代码的位置,modifier是与pak同级别的包全称是com.hspedu.modifier;pkg下的三个文件则是包里含有的类 - 介绍四个常用的包:
java.lang.* ; lang包是基本包,默认引入,不需要再引入
java.util.* ; util包,系统提供的工具包,工具类,键盘输入Scanner类就在此包中
java.net.* ; 网络包,网络开发
java.awt.* ; 是做java的界面开发,GUI
访问修饰符
先介绍这四个:
- . 访问范围:
访问类别 | 访问修饰符 | 同类 | 同包 | 子类 | 不同包 |
---|---|---|---|---|---|
公开 | public | √ | √ | √ | √ |
受保护 | protected | √ | √ | √ | × |
默认 | 没有访问修饰符 | √ | √ | × | × |
私有 | private | √ | × | × | × |
-
. 修饰符可以用来修饰类中的属性,成员方法以及类
-
. 只有 默认和public 才能修饰类,并遵循访问范围
-
. 成员方法的访问规则和属性完全一样
用几个案例证实一下访问范围
首先层级:
modifilerb包的A类:
package com.hspedu.modifier;
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 + "\t" + n2 + "\t" + n3 + "\t" + n4);
}
}
modifilerb包的Test类:
package com.hspedu.modifier;
public class Test {
public static void main(String[] args) {
A a = new A();//同类四种修饰符都可访问
a.m1();
System.out.println(a.n1 + " " + a.n2 + " " + a.n3);//同包private不能访问
}
}
pkg包的Test类:
package com.hspedu.pkg;
import com.hspedu.modifier.A;
public class Test {
public static void main(String[] args) {
A a = new A();
System.out.println(a.n1);//不同包默认,protected, private不能访问
}
}
我就不运行了,希望能帮大家理解到包的作用以及包的用法