`

构造一个类,只能存在一个实例

阅读更多

在网上见过这道小题,正好寝室的兄弟们在学,借机会整理下!

题目是这样的:
1.定义一个SigCls.java;
2.SigCls只能存在一个实例;
3.在构造器中初始化两个成员属性;
4.编写TestSigCls.java测试;

分析:
如果构造一个类,它只能存在一个实例,那它的构造函数一定不能被外部访问,也就是说它的构造函数应该是private的.
如果构造函数是private的,外部不能实例化,那就需要在类内部定义一个方法,用来创建这个实例.
既然只能存在一个实例,那么可以把这个唯一的实例定义成静态的,这样静态成员只初始化一次.

代码:

//SigCls.java文件
public class SigCls
{
    private String name;
    private int age;//两个成员属性
    private static SigCls inst;//声明静态实例

    private SigCls(String aName, int aAge) {
        name = aName;
        age = aAge;//初始化两个成员属性
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public static SigCls getInstance() {
        if (inst == null)
        {
            System.out.println("none");
            inst = new SigCls("xiaozhang", 19);//初始化实例
            return inst;
        }
        else
        {
            System.out.println("Sig");
            return inst;
        }
    }

}

//TestSigCls.java文件
public class TestSigCls
{
 public static void main(String[] args)
 {
         SigCls sc1;
         SigCls sc2;
         sc1 = SigCls.getInstance();
       
         sc2 = SigCls.getInstance();

         System.out.println(sc1.getName());
         System.out.println(sc2.getName());

 }
}

应该还有其他的方法,有待研究!

分享到:
评论

相关推荐

    1.1:抽象方法与抽象类.pdf

    抽象成员只能存在于抽象类中 抽象类可以有非抽象成员(侧重族群的概念) 抽象类的子类必须实现抽象方法体 抽象类you构造函数 抽象类只能用作基类,无法实例化(new) 抽象类不能被实例化。 抽象类存在的意义: 1.抽象...

    基于php设计模式中单例模式的应用分析

    单例模式:简单的说,一个对象只负责一个特定的任务。 单例类: 1.构造函数需要标记为private,单例类不能再其他类中实例化,只能被其自身实例化 2.拥有一个保存类的实例...如果系统中需要一个类来全局控制某些配置

    【05-面向对象(下)】

    •如果一个类始终只能创建一个对象,称为单例类。须符合以下几个条件:  –1.我们把该类的构造器使用Private修饰,从而把该 类的所有构造器隐藏起来。  –2.则需要提供一个public方法作为该类的访问点,用于创建...

    抽象类和接口的区别

    并不是 所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象, 这样的类就是抽象类。抽象类往往用来表征我们在对问题领域进行分析、 设计中得出的抽象概念, 是对一系列看上去不同,...

    【04-面向对象(上)】

    •一个类里可以包含三种最常见的成员:构造器、属性、方法。 定义属性的格式语法 •[修饰符] 属性类型 属性名 [= 默认值]; 定义方法的格式语法 •[修饰符] 方法返回值类型 方法名(形参列表) {….方法...

    C#中构造函数和析构函数用法实例详解

    构造函数与析构函数是一个类中看似较为简单的两类函数,但在实际运用过程中总会出现一些意想不到的运行错误。本文将较系统的介绍构造函数与析构函数的原理及在C#中的运用,以及在使用过程中需要注意的若干事项。 一...

    java 面试题 总结

    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 15、error和exception有什么区别? error 表示恢复不是...

    C++类静态成员与类静态成员函数详解

    也不能在类的构造函数中初始化该成员,因为静态数据成员为类的各个对象共享,否则每次创建一个类的对象则静态数据成员都要被重新初始化。 静态成员不可在类体内进行赋值,因为它是被所有该类的对象所

    JAVA面试题最全集

    修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被...

    C++单例类模板详解

    指在整个系统生命期中,一个类最多只能有一个实例(instance)存在,使得该实例的唯一性(实例是指一个对象指针) , 比如:统计在线人数 在单例类里,又分为了懒汉式和饿汉式,它们的区别在于创建实例的时间不同: 懒汉式 : ...

    java三大特性说明

     抽象类中可以定义非抽象的方法,但如果一个类中有抽象方法,则这个类必须被定义成抽象类。抽象类中有构造方法,但是没有抽象的构造方法。构造方法的存在完全是为了继承关系而存在。  与之形成对比的就是接口,...

    超级有影响力霸气的Java面试题大全文档

    如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 18、error和exception有什么区别?  error 表示恢复...

    【。net 专业】 面试题

    现在需要您写一个数据库连接字符串,用以连接AllWin上SQL SERVER中的一个名为PubBase实例的Test库。请问,应该选择下面哪一个字符串?( B )  A. “Server=AllWin;Data Source=PubBase;Initial Catalog=Test;...

    浅谈java单例设计模式

    所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。 如果我们要让类在一个虚拟机中只能产生一个对象: 将类的构造器的访问...

    java:接口和抽象类练习

    抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是...在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。 接口: 接口(英文:

    浅谈C# 类的继承

    也就是说,一个类的直接基类只能有一个。当类与类之间实现继承的时候,子类可以将它的直接基类的所有成员当做自己的成员,除了类的静态构造方法、实例构造方法和析构方法。但是,虽然基类的所有成员都可以当做子类的...

    c++中的单例类模板的实现方法详解

    1、什么是单例模式  在架构设计时,某些类在整个系统生命周期中最多只能有一个对象存在 ( Single ... 思考:如何定义一个类,使得这个类最多只能创建一个对象?  分析:因为对象是由构造函数创建的,所以我们应该

    Java学习笔记---15.面向对象编程10-Java中final关键字,抽象类与接口

    在Java中,一个类只能继承一个类,但是却可以实现(implements)多个接口. 如果实现接口的类不是抽象类的话,则该子类必须复写接口中所有的抽象方法. 例如如下代码示例: view plaincopy to clipboardprint? interface ...

    PHP 面向对象技术(全面讲解).txt

    也是我们实例出来的对象名称,一个类可以实例出多个对象,每个对象都是独立的,上面的代码相 当于实例出来3 个人来,每个人之间是没有联系的,只能说明他们都是人类,每个人都有自己的姓 名,性别和年龄的属性,每个...

Global site tag (gtag.js) - Google Analytics