文章目录
- 一、package关键字的使用
- 1. 说明
- 2. 包的作用
- 3. JDK中主要的包
 
- 二、import关键字的使用
一、package关键字的使用
1. 说明
- package:包
- package用于指明该文件中定义的类、接口等结构所在的包。
- 语法格式

举例:pack1\pack2\PackageTest.java
package pack1.pack2; //指定类PackageTest属于包pack1.pack2public class PackageTest{public void display(){System.out.println("in method display()");}
}
比如随便写的一个文件:
package Object6;/*** ClassName: Person* Package: Object6* Description:*案例:** (1)创建Person类的对象,设置该对象的name、age和gender属性,* 调用study方法,输出字符串“studying”;* 调用showAge()方法,返回age值;* 调用addAge(int addAge)方法给对象的age属性值增加addAge岁。比如:2岁。** (2)创建第二个对象,执行上述操作,体会同一个类的不同对象之间的关系。* @Author 雨翼轻尘* @Create 2023/9/25 0025 10:45*/
public class Person {String name;int age;char gender;public void study(){System.out.println("studying");}public int showAge(){return age;}public void addAge(int addAge){age+=addAge;}}
类和包:

类就相当于每个学生,包就相当于班级。
将不同功能的类放在不同的包下面,方便检查和调用。
也有一些文件直接写在src目录下,没有从属的包,叫无名包:(包没有名字,类也没有具体的包从属)

💬注意
-  一个源文件只能有一个声明包的package语句 
-  package语句作为Java源文件的第一条语句出现(前面若有空行也算第一条语句)。若缺省该语句,则指定为无名包。 
-  包名,属于标识符,满足标识符命名的规则和规范(全部小写,若大写并不会报错,但最好遵守规范)、见名知意 
-  包通常使用所在公司域名的倒置:com.atguigu.xxx。(XXX是根据包具体的功能来写的) 
-  大家取包名时不要使用" java.xx"包(不要java开头,可以java结尾)
若此时创建了一个java.at的包:

并创建了一个类:

随便输出一下:

运行一下就会报错:

运行代码的时候要执行main方法,执行main方法需要类加载,类加载的时候需要知道包在哪儿。
类加载的时候使用类加载器,专门加载类,将它放在方法区。在加载的时候需要看到这个类是属于哪个包的,它可看到java开头的包特别敏感,它会认为是JDK提供的API(安全机制的问题),就去那里面找,没有找到此时的包,就会报错啦。
- 包对应于文件系统的目录,package语句中用 “.” 来指明包(目录)的层次,每.一次就表示一层文件目录。
随便一个文件,右键点击“打开于Explorer”:

文件目录:

- 同一个包下可以声明多个结构(类、接口),但是不能定义同名的结构(类、接口)。不同的包下可以定义同名的结构(类、接口)。
2. 包的作用
- 包可以包含类和子包,划分项目层次,便于管理
比如:

-  帮助管理大型软件系统:将功能相近的类划分到同一个包中。比如:MVC的设计模式 
-  解决类命名冲突的问题 
-  控制访问权限 
3. JDK中主要的包
java.lang----包含一些Java语言的核心类,如String、Math、Integer、 System和Thread,提供常用功能
java.net----包含执行与网络相关的操作的类和接口。
java.io ----包含能提供多种输入/输出功能的类。
java.util----包含一些实用工具类,如定义系统特性、接口的集合框架类、使用与日期日历相关的函数。
java.text----包含了一些java格式化相关的类
java.sql----包含了java进行JDBC数据库编程的相关类/接口
java.awt----包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)。【不重要】
二、import关键字的使用
- import : 导入
为了使用定义在其它包中的Java类,需用import语句来显式引入指定包下所需要的类。
- 语法格式

举例:
import pack1.pack2.Test; //import pack1.pack2.*;表示引入pack1.pack2包中的所有结构
public class PackTest{public static void main(String args[]){Test t = new Test(); //Test类在pack1.pack2包中定义t.display();}
}-  import语句来显式引入指定包下所需要的类。相当于 import语句告诉编译器到哪里去寻找这个类。
-  import语句,声明在包的声明和类的声明之间。 
比如:

- 如果需要导入多个类或接口,那么就并列显式多个import语句即可。
比如:

- 如果使用a.*导入结构,表示可以导入a包下的所有的结构。举例:可以使用java.util.*的方式,一次性导入util包下所有的类或接口。
比如这三个都是util包下的:

那么可以这样来写:
/*import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;*/import  java.util.*;	// *表示util包下所有的类/接口
- 如果导入的类或接口是java.lang包下的(使用频繁),或者是当前包下的,则可以省略此import语句。
比如:
package Object17;import java.lang.String;	//可以不用写
import java.lang.System;	//可以不用写public class PackageImport {public static void main(String[] args) {   String str="hello";System.out.println(str);}
}
若在同一个包下面,也可以省略import语句。比如此时在同一个Object17包下面,就不需要导包:

- 如果已经导入java.a包下的类,那么如果需要使用a包的子包下的类的话,仍然需要导入。
比如要使用java.lang就不需要导包,若是要使用java.lang下面的子包里面的某个类,比如java.lang.reflect就需要导包。
 
现在咱们声明一个Fild类(java.lang.reflect下的某个类),先置成null:
 
这里会提示,好多包下面都有这个类。
点击一下Field并将光标放在Field上,按Alt+Enter,会弹出一个框,选择需要的包即可:
 
此时系统会自动导包:
import java.lang.reflect.Field;
再举个例子:
比如现在正在cat包下的nose类中,想创建一个dog包下的people类的对象,那么就需要导包:import dog.people;
 
将这个位置改成*:import dog.*;(现在可以调用dog包下的所有类):
 
此时若还想使用dog包下的子包one里面的Leo类,还需要重新调包import dog.one.Leo;:
 
- 如果在代码中使用不同包下的同名的类,那么就需要使用类的全类名的方式指明调用的是哪个类。
比如Date类在很多包里面都有,现在我在一个文件中想用它们两个:
 
先使用它:
 
目前这个Date就使用的是util下的:
 
现在又写了一个date1,想要使用的是sql下的类:
 
但是它目前默认是util下面的:
 
若此时手动导包
import java.sql.Date是不行的,date和date1都变成sql下的了。
现在想要的是:date是util包下的,date1是sql包下的。
那如何指明date1是java.sql下的呢?
只能这样:
java.sql.Date  date1=null;
看一下全部代码:
package cat;import java.util.Date;public class nose {//使用import的方式指明Date date=new Date();//使用全类名的方式(把类所在的包都加上)java.sql.Date  date1=new java.sql.Date(1332);
}同样,date也可以全类名定义,这样就不需要在上面再导包了。
以下是两种方式:
 
其实,只要用到具体的类,都要写明“全类名”(是哪个包下的哪个类),只不过这样会使得代码可读性太差,所以才出现了import导入,再使用这个包下面的类的时候就不用再写全类名了。
若是在同一个文件中,要使用不同包下的同一个名字的类,那就需要写完整全类名以示区分。
- (了解)import static组合的使用:调用指定类或接口下的静态的属性或方法。
以前都需要拿对象来调用,这里却可以用类(System)调用:
System.out.println();
其实类也可以调用,只不过调用的结构需要有static修饰。
按住Ctrl键点击out:
 
可以看到被static修饰了:
 
如果在上面指明了out的所在包:import static java.lang.System.out;,在下面就可以直接调用out:
import static java.lang.System.out;
public class nose {public static void main(String[] args) {out.println("hel");}
}
运行结果:
 
再举个例子:
public static void main(String[] args) {System.out.println(Math.PI*3*3);
}
按住Ctrl键点击PI:(可以看到PI也被static修饰)
 
如果在上面指明了out的所在包:import static java.lang.Math.PI;,在下面就可以直接调用PI:
import static java.lang.System.out;
import static java.lang.Math.PI;
public class nose {public static void main(String[] args) {out.println(PI);}
}
运行结果:
 
这里主要是方便以后看别人写的代码不至于稀里糊涂,具体使用按照自己的习惯。