第四条 私有构造强化不可实例化

原创 2016年05月31日 18:06:28

有时候,我们项目中会编写一些静态方法,这些类的名称不太好,但却有自己独特的用处。例如 Math Arrays Collections 等java jdk中封装的工具类等。

像Math 为了防止被扩展,在类的前面加上了 final 关键字。

这些类不希望被实例化,因为实例化了没有意义,但在缺少显示构造器的情况下,编译器会自动提供一个默认的无参构造,这样就可以被实例化了。为了解决这一问题,需要我们做些什么。

 是否可以做成抽象类呢?抽象类不能被实例化,但有个问题,抽象类可以被子类化,并且子类可以被实例化,并且会误导用户,让用户以为这个类就是 为了继承而设计的。

因此,我们有个简单的方法,就是初始化一个私有的无参构造器,这样就不能被实例化了,只能直接用类调用静态方法。


class Unit{

       private Unit(){}

public static intmean(int a ,int b){

return a*b   

 }

}


这样做有个坏处就是不能被继承,自能自己玩自己的。总得来说,编写静态方法类时,最好做成不可被实例化。

相关文章推荐

第4条:通过私有构造器强化不可实例化的能力

第4条:通过私有构造器强化不可实例化的能力    有时候可能只需要编写包含静态方法和静态域的类。这些类的名声很不好,因为有些人再面向对象的语言中滥用这些类来编写过程化的程序。尽管如此,他们也确实有他们...

【Effective Java】Ch2_创建销毁对象:Item4_通过私有构造函数来强化不可实例化的能力

偶尔情况下,你会编写只包含静态方法和静态域的类。这种类的名声不太好,因为有些人滥用他们来避免面向对象编程,不过这种类确实有他们的用处。 我们可以照java.lang.Math或java.util.A...

第4条:通过私有构造函数强化不可实例化的能力

偶尔情况下,你可能会编写出只包含静态方法和静态域的类。这样的类有一些很不好的名声,因为有些人在面向对象的语言中滥用这样的类来编写过程化的程序。尽管如此,它们确实有它们特有的用处,我们可以利用这种类,把...
  • itzyjr
  • itzyjr
  • 2014年03月29日 16:57
  • 901

[Effective Java Distilled] Item 4 通过私有构造方法来加强化不可实例化的性质

关于Effective Java Distilled: 《Effective Java》这本书我断断续续的读了近两遍,里面的内容挺有深度,对提高工程代码质量也非常有帮助。我打算慢慢的整理出来一个...

python中类的定义、实例化、封装以及私有变量/方法

1.  定义类 python中定义一个类的格式如下: class MyClass(object): def __init__(self,data1,data2): se...
  • dcrmg
  • dcrmg
  • 2017年07月12日 21:46
  • 781

java接口中能申明私有成员么?接口能不能实例化?

java接口和抽象类的区别 收藏 简单来说, 接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,另外,实现接口的一定要实现接口里定义的所有方法,而...

【Java基础】类的实例化、static、父类构造函数执行顺序

重温java基础,以免自己以后犯原则性错误,这是最基本,最基础的东西。 先看结论: 一个类的实例化过程: 1,首先会执行类中static代码块(不管代码块是否在类的开头还是末尾处),如...
  • zhlyks
  • zhlyks
  • 2015年12月14日 20:06
  • 279

反射机制实例化类,并获取类中的属性、方法、和构造器

1.先写一个JavaBean类: package com.buaa.reflectTest; public class User { private int id; private int a...

JAVA子父类中构造函数的特点-子类实例化过程

//仅作为学习笔记 /* 子父类中的构造函数 在对子类对象进行初始化时,父类的构造函数也会运行 那是因为子类的构造函数默认的第一行有一句隐式的语句super() super():会访问...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第四条 私有构造强化不可实例化
举报原因:
原因补充:

(最多只允许输入30个字)