Java面向对象基础--构造方法私有化

简介: <h1>1、对构造方法进行封装</h1> <div> <pre name="code" class="java">class Singleton{ private Singleton(){ // 将构造方法进行了封装,私有化 } public void print(){ System.out.println("Hello World!!!") ; }};</pre>

1、对构造方法进行封装

class Singleton{
	private Singleton(){		// 将构造方法进行了封装,私有化	
	}
	public void print(){
		System.out.println("Hello World!!!") ;
	}
};

2、使用

被私有化构造方法的Singleton类,不能在外部直接实例化。
class Singleton{
	private Singleton(){		// 将构造方法进行了封装,私有化	
	}
	public void print(){
		System.out.println("Hello World!!!") ;
	}
};
public class SingletonDemo02{
	public static void main(String args[]){
		Singleton s1 = null ;	// 声明对象
		s1 = new Singleton() ;	// 错误,无法实例化对象
	}
};

在内部进行实例化。
class Singleton{
	Singleton instance = new Singleton() ;	// 在内部产生本类的实例化对象
	private Singleton(){		// 将构造方法进行了封装,私有化	
	}
	public void print(){
		System.out.println("Hello World!!!") ;
	}
};
public class SingletonDemo03{
	public static void main(String args[]){
		Singleton s1 = null ;	// 声明对象
	}
};

class Singleton{
	static Singleton instance = new Singleton() ;	// 在内部产生本类的实例化对象
	private Singleton(){		// 将构造方法进行了封装,私有化	
	}
	public void print(){
		System.out.println("Hello World!!!") ;
	}
};
public class SingletonDemo04{
	public static void main(String args[]){
		Singleton s1 = null ;	// 声明对象
		s1 = Singleton.instance ;	// 取得实例化对象
		s1.print() ;		// 调用方法
	}
};
正常情况下,属性应该封装。代码最好修改为下面的形式:
class Singleton{
	private static Singleton instance = new Singleton() ;	// 在内部产生本类的实例化对象
	public static Singleton getInstance(){		// 通过静态方法取得instance对象
		return instance ;
	}
	private Singleton(){		// 将构造方法进行了封装,私有化	
	}
	public void print(){
		System.out.println("Hello World!!!") ;
	}
};
public class SingletonDemo05{
	public static void main(String args[]){
		Singleton s1 = null ;	// 声明对象
		s1 = Singleton.getInstance() ;	// 取得实例化对象
		s1.print() ;		// 调用方法
	}
};

3、程序的意义

class Singleton{
	private static Singleton instance = new Singleton() ;	// 在内部产生本类的实例化对象
	public static Singleton getInstance(){		// 通过静态方法取得instance对象
		return instance ;
	}
	private Singleton(){		// 将构造方法进行了封装,私有化	
	}
	public void print(){
		System.out.println("Hello World!!!") ;
	}
};
public class SingletonDemo05{
	public static void main(String args[]){
		Singleton s1 = null ;	// 声明对象
		Singleton s2 = null ;	// 声明对象
		Singleton s3 = null ;	// 声明对象
		s1 = Singleton.getInstance() ;	// 取得实例化对象
		s2 = Singleton.getInstance() ;	// 取得实例化对象
		s3 = Singleton.getInstance() ;	// 取得实例化对象
		s1.print() ;		// 调用方法
		s2.print() ;		// 调用方法
		s3.print() ;		// 调用方法
	}
};

不管外部声明了多少个Singleton的对象,但是最终结果都是通过getInstance()方法取得的实例化对象。
也就是说,此时s1、s2、s3实际上都使用了一个对象的引用:instance



4、总结

单态设计模式的核心就是将类的构造方法私有化,之后在类的内部产生实例化对象,并通过类的静态方法返回实例化对象的 应用。



目录
相关文章
|
1月前
|
存储 Java 数据处理
Java基础—笔记—面向对象篇
该内容是关于面向对象编程的介绍,包括类(用于定义数据和处理方法)、对象(通过类创建,存储和处理数据)的创建和使用,`this`关键字(代表调用方法的对象,用于区分成员变量和局部变量),成员变量与局部变量的区别(定义位置、初始化值、内存区域、作用域和生命周期),构造器(无返回值、与类名相同的特殊方法,用于对象创建和初始化),以及封装的概念(数据隐藏和暴露控制)和实现步骤(私有化成员变量,提供公共的setter和getter,以及构造器)。
17 0
|
4天前
|
存储 安全 Java
Java面向对象最新超详细总结版!
Java面向对象最新超详细总结版!
23 7
Java面向对象最新超详细总结版!
|
1天前
|
Java
java面向对象——包+继承+多态(一)-2
java面向对象——包+继承+多态(一)
15 3
|
1天前
|
SQL Java 编译器
java面向对象——包+继承+多态(一)-1
java面向对象——包+继承+多态(一)
15 2
|
11天前
|
存储 Java 开发工具
【Java探索之旅】用面向对象的思维构建程序世界
【Java探索之旅】用面向对象的思维构建程序世界
10 0
|
11天前
|
Java
java使用面向对象实现图书管理系统
java使用面向对象实现图书管理系统
|
11天前
|
Java
Java语言---面向对象的三大特征之继承
Java语言---面向对象的三大特征之继承
|
11天前
|
机器学习/深度学习 Java Python
Java面向对象知识体系---基础版
Java面向对象知识体系---基础版
|
16天前
|
安全 Java
Java基础&面向对象&继承&抽象类
Java基础&面向对象&继承&抽象类
|
16天前
|
Java
【Java基础】详解面向对象特性(诸如继承、重载、重写等等)
【Java基础】详解面向对象特性(诸如继承、重载、重写等等)
16 0