一. 理解final
- 多个修饰符之间是没有先后关系的,public static final / public final static / static final public
- final本身含义:“最终的,不可改变的”,它可以修饰非抽象类,非抽象方法和变量。
注意:构造方法不能使用final修饰,因为构造方法不能被继承,肯定是最终的。
二.final类
- 为最终类,不能有子类。
只要满足以下条件都可以把一个类,设计成final类:- 某类不是专门为继承而设计
- 出于安全考虑,类的实现细节不许改动,不许改源代码。
- 确信该类不会再被拓展
面试题:列举5个Java中内置的使用final修饰的类
Java里final修饰的类有很多,比如八大基本数据类包装类和String等。
三. final方法
- 最终方法,该方法不能被子类覆盖。
- 在父类中提供的统一的算法骨架,不准子类通过方法覆盖来修改,此时使用final修饰。
- 在构造器中调用的方法(初始化),此时一般使用final修饰
注意:final修饰的方法,子类可以调用,但是不能覆盖。
四. final变量
-
最终的变量,常量,该变量只能赋值一次。不能再赋值。
final是唯一可以修饰局部变量的修饰符。- final变量必须显示地指定初始值,系统不会为final字段初始化。
- final变量一旦赋予初始值,就不能被重复赋值。
- 常量名规范:常量名符合标识符,单词全部大写,单词间使用下划线隔开。
-
int 类型的最大值:final int MAX_VALUE = 34;
-
全局静态常量:public static final 修饰的常量;
-
final修饰基本类型变量:表示该变量的值不能改变,即不能用“=”号重新赋值。
-
final修饰引用类型变量:表示变量的引用的地址不能变,而不是引用地址里的内容不能变。
-
final是唯一可以修饰局部变量的修饰符,
局部内部类只能访问final修饰的局部变量。 -
一般的,在开发中会专门定义一个常量类,专门用来存储常量数据。
五. 单例模式
-
设计模式(Design pattern):是一套被反复使用,多数人知晓的,经过分类编目的,代码设计经验
的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性。毫无疑
问,设计模式于己于他人于系统都是多赢的,设计模式是代码真正工程化;设计模式是软件工程
的基石脉络,如同大厦的结构一样。 -
单例设计模式(singleton):最常用,最简单的设计模式
-
目的:保证某一个在整个应用中有且只有一个实例(一个类在内存值存在一个对象),即所有指向该
类型实例的引用都指向同一块内存空间。 -
单例模式的步骤:饿汉式
- 必须在该类中,自己先创建一个对象。
- 私有化自身的构造器,防止外界通过构造器创建新的对象。
- 向外暴露一个公共的静态方法,用于获取自身的对象。
新建SingletonDemo.java
//单例设计模式
class ArrayUtil
{ //1)必须在该类中,自己先创建一个对象。
private static final ArrayUtil instance = new ArrayUtil();
//2)私有化自身的构造器,防止外界通过构造器创建新的对象。
private ArrayUtil(){}
//3)向外暴露一个公共的静态方法,用于获取自身的对象。
public static ArrayUtil getinstance(){
return instance;
}
public void sort(){
System.out.println("排序方法");
}
}
class SingletonDemo
{
public static void main(String[] args)
{
System.out.println(ArrayUtil.getinstance() == ArrayUtil.getinstance());
ArrayUtil.getinstance().sort();
ArrayUtil.getinstance().sort();
}
}
六. 工具类设计
-
工具类:存放了某一类事物的工具方法的类。
-
工具类存放的包:工具包(util,utils,tools,helper,helpers),存放工具类。
-
工具类起名:XxxUitl,表示一类事物,
-
ArayUril,StringUtil
-
如何设计:工具在开发中存在一份即可,
- 如果工具方法没有使用static修饰,说明工具方法得使用工具类的对象来调用。
此时把工具类设计为单例的。 - 如果工具方法全部使用static修饰,说明工具方法只需要使用工具类名调用即可。
此时必须把工具类的构造器私有化(防止创建工具类对象调用静态方法。)
- 如果工具方法没有使用static修饰,说明工具方法得使用工具类的对象来调用。
-
一般的,首选第二种,简单,在JDK中提供的工具都是第二种,java.util.Arrays类。