目录
一.package
1.1 什么是包
1.2 建包的语法格式
1.3 建包的注意事项
1.4 导包
1.4.1 什么时候导包
1.4.2 导包格式
二.权限修饰符
2.1 什么是权限修饰符
2.2 权限修饰符的分类和具体作用范围
2.3 自己定义成员一般需要满足如下要求
三.final
3.1 什么是final
3.2 final的作用
3.3 final修饰变量时的注意事项
四.常量
4.1 什么是常量
4.2 命名规范
4.2 常量的作用
4.3 常量的优点
五.枚举
5.1 什么是枚举
5.2 枚举的好处.
5.2 定义枚举类的格式
5.3 枚举类反编译后的代码
5.4 枚举的特征
六.抽象类
6.1 什么是抽象类
6.2 抽象类的特点
6.3 抽象类的使用场景
6.4 final和abstract的关系
6.5 模板方法模式
6.5.1 使用场景
6.5.2 模板方法模式实现步骤
6.5.3 模板方法模式的优点
包是用来分门别类的管理各种不同类的,类似于文件夹,建包利于程序的管理和维护。
package 公司域名倒写.技术名称。包名建议全部小写,且具备意义。
例如:
建包的语句必须放在第一行,一般IDEA工具会帮忙创建。
①相同包下的类可以直接访问,不同包下的类必须导包才能使用。
②假如一个类中需要用到不同类,而这二个类的名称是一样的,那么默认只能导入一个类,另一个类要带全包名访问。
import.包名.类名
是用来控制一个成员能够被访问的范围。成员可以是类、成员变量、成员方法、构造器、内部类。
①成员变量一般私有
②方法一般公开
③如果该成员只希望本类访问,则用private修饰
④如果该成员只希望本类、同一个包下的其他类、其他包下的子类访问,则用protected修饰
final是最终的意思,可以用来修饰类、变量、方法
1. final修饰类,表明该类是最终类,不能被继承
2. final修饰方法,表明该方法是最终方法,不能被重写
3. final修饰变量,表明该变量第一次赋值后,不能再次被赋值
①final修饰的变量是基本数据类型,那么变量存储的数据值不能改变
②final修饰的变量是引用数据类型,那么变量存储的地址值不能改变,但地址指向的对象内容可以改变。
常量是使用了public static final修饰的成员变量,必须有初始化值,而且执行的过程中其值不能发生改变。
英文单词全部大写,多个单词下划线连接起来。
1. 通常用来记录系统的配置数据。
2. 常量可以用来做信息标志和分类。
1. 在编译阶段会使用宏替换,把使用常量的地方全部替换成真实的字面量。
2. 维护系统容易,可读性更好。
3. 实现了软编码形式。
枚举类是Java中的一种特殊类型,是为了做信息的标志和分类。
常量做信息标志和分类虽然可以实现可读性,但是入参值不受约束,代码相对不够严谨。用枚举做信息标志和分类的代码可读性好,入参约束严谨,代码优雅,是最好的信息分类技术。
例如:
enum Season{
TOP,BELOW,LEFT,RIGHT;
}
源代码:
将源代码编译后生成.class文件,再将class文件反编译得如下代码:
1. 枚举类都是继承了枚举类型Java.lang.Enum。
2. 枚举都是最终类,不可被继承。
3. 构造器都是私有的,枚举对外不能创建对象。
4. 枚举类的第一行默认都是罗列枚举对象的名称的。
5. 枚举类相当于是多例模式。
使用abstract关键字修饰的类称为抽象类,修饰的方法称为抽象方法。
1. 类有的成员(成员变量、成员方法、构造器、代码块、内部类),抽象类都具备。
2. 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类。
3. 一个类如果继承了抽象类,那么这个类必须重写完抽象类的所有抽象方法,否则这个类也必须定义成抽象类。
4. 抽象方法只有方法签名,没有方法体。
5. 不能用abstract关键字修饰成员变量、构造器、代码块。
6. 最重要的特征:得到了抽象方法,失去了创造对象的能力。
1. 抽象类可以理解成不完整的设计图,一般作为父类,让子类来继承。
2. 当父类知道子类一定要完成某些行为,但是每个子类该行为的实现又不同,于是该父类就把该行为定义成抽象方法的形式,具体实现交给子类去完成。此时这个类就可以声明成抽象类。
final和abstract是互斥关系,
1. abstract修饰的类作为模板让子类继承,final定义的类不能被继承。
2. 抽象方法定义抽象功能让子类重写,final定义的方法子类不能重写。
当系统中出现一个功能多处在开发,而该功能大部分代码是一样的,只有其中部分代码不同的时候。
1. 定义一个抽象类。
2. 在抽象类中定义二个方法,一个是模板方法用于装相同代码,另一个是抽象方法。
3. 子类继承抽象类,重写抽象方法。
1. 提高了代码的复用性。
2. 模板方法不能确定的部分定义成了抽象方法,交给子类实现,使用者只需要关心自己需要实现的功能即可。