- 包的概念
当前情况下:所有的类都是直接写在src中的
存在的问题:
- 在src中有很多的类,不利于查找
- 团队开发中如果不同功能模块存在同名的类,则不能在同一个目录中共存
(即在同一个目录中不能存在同名的文件)
- 包的作用
(1)解决命名冲突问题,在指定一个类的类名的同时,指定一个包名
语法:
package 包名;
注意:
- package语句一定要放在类声明的第一句话
- package语句在一个类中只能有一个(因为包本质其实就是文件目录,所以对于一个文件而言,它只能属于一个目录,因此不能出现多条package语句)
(2)可以将功能相似或相近的类放在一个包中,方便组织和维护
(3)包可以具有层次结构,可以将类的划分的尺度更细,按照功能、模块等可以将类组织在不同的包中
(4)限定了包级别的访问权限
https://www.cnblogs.com/DreamDrive/p/4641676.html(表格很重要!!!)
- 包的命名规范
回顾:
一切命名都不要用拼音
- 变量:见名知意、驼峰命名法
- 方法:见名知意、驼峰命名法、使用动词或动词词组、参数不宜超过4个
- 类名:见名知意、首字母大写,其余遵循驼峰命名法
- static final常量:
/**
* 常量类:
* 常量:固定的值,无法修改的值
*/
public class AppConstant {
/**静态常量的命名中,所有字母全部大写**/
/**
* 如果常量名由多个单词构成,每个单词之间使用_隔开,即蛇形命名法
**/
public static final String ACCESS_TOKEN = "12345678";
public static final String[] strs = new String[2];
public static void main(String[] args) {
//静态常量体现了static的特性,即可以通过类名直接访问
System.out.println(AppConstant.ACCESS_TOKEN);
//静态常量也体现了final的特性,即不能就行修改
//AppConstant.token = "123";
System.out.println(AppConstant.ACCESS_TOKEN);
//strs[0]="Hello"修改的是数组在堆内存中下标为0的元素对应的值
//strs=new String[3];相当于将原来的strs的地址进行了改变,而strs是以final修饰的,所以无法改变
strs[0] = "Hello";
// strs=new String[3];
}
public void method() {
/**
* 对于一些变化不大的定值,如果直接写在代码中,不利于维护,称为“魔鬼数字”,简称“魔数”
* 可以将这些值直接定义为常量,调用过程中如果值发生了变化,只需要修改常量的直就行了
*/
System.out.println("token:" + ACCESS_TOKEN);
System.out.println("token:" + ACCESS_TOKEN);
}
public void method1() {
System.out.println("token:" + ACCESS_TOKEN);
System.out.println("token:" + ACCESS_TOKEN);
}
}
包的命名规范:
(1)包可以有层次结构,通过点儿去分割包的名字来形成包的层次结构
(2)包中的所有字母全部小写,不能出现关键字和保留字
(3)包的命名通常包含:域名反写+项目名+模块名+组件名+……
- 包的导入
- 为什么要导入
因为在一个类中,要使用另外一个包中提供的类,此时就要导入这个包
- 语法:
import 包名+类名;
注意:
a.import语句出现在包声明之后,类声明之前
b.所有java.lang包下的类是自动导入的,无需手动导入
c.也可以通过全局限定名(包名+类名)来导入类,可以省略import语句,但是太麻烦。
java.util.Scanner sc = new java.util.Scanner(System.in);
//java.util.Date
Date date1 = new Date();
//java.sql.Date
//如果要使用不同包下的同名类,则应该指定全局限定名
java.sql.Date date2 = new java.sql.Date(123);
d.不要通过*导入一个包下所有的类,例如
import java.util.*;
要用什么类就导入什么类