Java私有构造函数的使用

本篇文章介绍下Java,私有构造函数的使用。

Java私有构造函数的使用

当我们学习Java的时候,我们接触到的构造函数的权限修饰符都是public,比如,

public class Test {
    public Test() {

    }
    }
}

我们,知道构造函数的用途是创建一个对象,并返回。比如,

Test instance = new Test();

如果你很了解java的权限修饰符的话(若不是,请移步百度搜索),你是否会疑问,构造函数能否是private的呢?
答案是yes。

由于private的缘故,被private修饰的构造函数无法在其他类中调用,也就是该类无法在其他类中实例化。那不仅要问,那还要构造函数做什么?

既然,Java允许构造函数的私有化,那肯定是有一定的道理。我们简要介绍其两种情景。

单例模式

如果你了解过设计模式,那你一定会知道单例模式,这是最初级的设计模式之一。
一个最简单的单例模式如下,更复杂的单例模式,请参考[http://blog.csdn.net/u014088294/article/details/49838831]

public class Singleton {

    private static Singleton instance;

    private Singleton() {
        // .......//
    }

    public Singleton getInstance() {

        if (instance == null)
            instance = new Singleton();
        return instance;
    }

}

单例模式主要有3个特点,
1. 类的内部包括一个类的实力,并且为static类型
2. 构造函数为私有
3. 通过提供一个获取实例的方法,比如getInstance,该方法也为static类型。
调用的时候,我们可以通过

Singleton instance = Singleton.getInstance();

来得到其实例化。

你也许会问,为什么要用单例模式呢?这是因为, 很多时候,我们只需要一个对象就可以了,不希望用户来构造对象,比如线程池,驱动,显示器等。如果把构造函数私有,那么很多程序都可以得到其实例,将会带来混乱。

防止实例化

私有构造函数的第二个用途,就是防止实例化。你又要问了,一个类,不能实例化,还要它有啥用?!
哈哈,那是你忘了static关键词了,static的意思是静态,什么是静态呢,如果一个变量或方法设置为static,那么它就不依赖其所在的对象。
一个简单的例子,

public class StaticTest {
    public static int a;
    public int b;

    public static void menthoA() {
        // ...//
    }

    public static void main(String[] args) {
        int c = StaticTest.a;
        StaticTest.menthoA();

        StaticTest instance = new StaticTest();
        int d = instance.b;
    }

}

由于a为static类型,所以我们可以直接通过类名StaticTest.a来获取到a,对于方法menthoA而是,但是对于非static变量和方法, 我们必须实例化才能访问,比如变量b。
当然了,我们而可以通过instance.a来访问a,不过这样是不是显的多余呢?通常我们不这么做。

上面的例子,是存在构造函数,考虑如下情形,我们有一个工具类Utils,里面含有很多静态函数或者静态变量,由于静态的原因,我们完全可以通过类名来访问,这样,我们就没有必要实例化它们,所以我们可以将其构造函数设置为私有,这样就防止用户滥用。
在Java的工具类中,有很多就是利用这种方法。

  • 13
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值