栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

单例设计模式与final关键字

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

单例设计模式与final关键字

目录

final关键字

什么是设计模式:

1、静态方法和属性的经典使用

2、设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式。设计模式就像是经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们自己再思考和摸索。

什么是单例模式:

a:所谓单例设计模式,就是采取一定的方法保证这整个的软件系统中,对某个类只存在一个的对象实例,并且该类只提供一个取得其对象实例的方法

b:单例模式有两种方法:A:饿汉式B:懒汉式

单例设计模式应用实例:

步骤如下:

1)构造器私有化--》防止直接new一个对象

2)类的内部创建对象

3)向外暴露一个静态的公共方法。getInstance

4)代码实现

饿汉式:

class Girlfriend{
	

	//如何保证只能创建一个Girlfriend
	
	//步骤[饿汉式]
	//1)构造器私有化
	//2)在类的内部直接创建私有静态对象
	//3)提供一个公共的static方法,返回gf对象
	private String name;
	
	public static Girlfriend getInstance(){
		return gf;
	}
	
	private static Girlfriend gf = new Girlfriend("小花");
	//为了能够在静态方法中返回gf对象,需将其修饰为static
	private Girlfriend(String name) {
		super();
		this.name = name;
	}	
}

懒汉式:

class cat{
	String name;
	private static cat cat;
//	步骤[懒汉式]
//1、仍然将构造器私有化
//2、定义一个static属性对象
//3、提供一个public的static方法,可以返回一个cat对象
//4、懒汉式,只有当用户使用getInstance时,才返回cat对象,后面再次调用时,
//会返回上次创建的cat对象
	private cat(String name) {
		super();
		this.name = name;
	}

	public static cat GetInstance() {
		if(cat == null) {
//			如果还没有创建cat对象
			cat = new cat("小花");
		}
		return cat;
	}
}

饿汉式与懒汉式区别:

1、二者最主要的区别在于创建对象的时机不同:饿汉式是在类的加载时就创建对象实例,而懒汉式是在使用时才创建

2、饿汉式不存在线程安全问题,懒汉式存在线程安全问题

3、饿汉式存在浪费资源的可能。因为如果程序员一个对象实例都没有使用,那么饿汉式创建的对象就浪费了,懒汉式是使用时才创建,就不存在这个问题

4、在javaSE标准类中,java.lang.Runtime就是经典的单例模式

final关键字:

final可用于修饰类,属性,方法和局部变量,

final使用情景:

1)当不希望类被继承时,可用final进行修饰

2)不希望父类的某个方法被子类覆盖/重写时,可以用final关键字修饰

3)当不希望类的某个属性的值被修改,可以使用final修饰

4)当不希望某个局部变量被修改,可以用final修饰

final的注意事项以及细节:

A:final修饰的属性又叫常量,一般用xx_xx_xx来命名

B:final修饰的属性在定义时,必须赋初值,并且以后不能再修改,赋值可以在如下位置之一:

a:定义时:如public final double TAX_RATE  = 0.08;

b:在构造器中

c:在代码块中

C:如果final修饰的属性是静态的,则初始化的位置只能是1)定义时2)在静态代码块,不能在构造器中赋值

D:final类不能继承,但可以实例化对象

E:如果类不是final类,但含有final方法,则该方法虽然不能重写,但是可以被继承

F:一般来说,如果一个类已经是final类了,就没有必要再将方法修饰成final方法

G:final不能修饰构造方法(即构造器)

H:final与static往往搭配使用,效率更高,不会导致类的加载,底层编译器做了优化处理

I:包装类(Integer,Double,Float,Boolean等都是final类),String也是final类

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1010576.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号