1、包的作用
为了解决重名问题(实际上包对应的就是盘符上的目录)
解决权限问题 (后面讲解)
2、包名定义
(1)名字全部小写
(2)中间用.隔开
(3)一般都是公司域名倒着写 : com.jd com.msb
(4)加上模块名字:
com.jd.login com.jd.register
(5)不能使用系统中的关键字:nul,con,com1---com9.....
(6)包声明的位置一般都在非注释性代码的第一行:
3、包的使用
(1)使用不同包下的类要需要导包: import **.*.*; 例如:import java.util.Date。
(2)在导包以后,还想用其他包下同名的类,就必须要手动自己写所在的包。
(3)同一个包下的类想使用不需要导包,可以直接使用。
(4)在java.lang包下的类,可以直接使用无需导包:
(5)IDEA中导包快捷键:alt+enter
可以自己设置自动导包。
(6)可以直接导入*:
(7)在Java中的导包没有包含和被包含的关系:
设置目录平级的格式(不是包含和被包含的显示)。
(可以不用设置,方便看出父包子包之间的层级关系)
即, 导包的时候,导入了父包,如果想用父包下面子包中的类,必须要单独重新导包(即:没有包含和被包含的关系)。
示例代码:
//声明包
package Package8_face_the_object.test_package_import;
//包、import
import Package7_IDEA.Person; //导包—— 就是为了定位 //自动导包的设置
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
//都是util下的,可直接用:
import java.util.*; // * 代表util下所有的包
public class Test {
public static void main(String[] args) {
new Person(); // new 这个Person的时候,可以选择new哪个包下的,(因为设置了自动导包)然后上面就是出现对应包的import
new Date();
//在导包以后,还想用其他包下同名的类,就必须自己手动写所在的包
new java.sql.Date(85); //指定sql下的Date()
new Demo(); //同一包下的直接用
System.out.println(Math.random()); //在java.lang包下的类,可以直接使用无需导包
new ArrayList<>();
new HashMap<>();
}
}
(8)静态导入
示例代码:
package Package8_face_the_object.test_static_import;
//静态导入
import static java.lang.Math.*;
//导入java.lang下的Math类中的所有静态的内容
//而,不加static的话,意思就完全不一样了
//import java.lang.Math.*;
//意思是,导入java.lang包下的Math包下的所有的类 (但是,这里,Math不是包,而是类)
public class Test {
public static void main(String[] args) {
//System.out.println(Math.random()); //java.lang包下的
//System.out.println(Math.PI);
//System.out.println(Math.round(5.6));
//不想每次都去调Math.
System.out.println(random()); //java.lang包下的
System.out.println(PI);
System.out.println(round(5.6));
}
//下面再写一个round()方法
//在静态导入后,同一个类中有相同的方法的时候,会优先走自己定义的方法。
public static int round(double a){
return 1000;
}
}