精华内容
下载资源
问答
  • java 为什么有时一个类有个构造函数https://blog..net/qq_14989227/article/details/79550607关于 Java 的静态工厂方法,看这一篇就够了!https://www.jianshu.com/p/ceb5ec8f1174单例模式?...

    java 为什么有时一个类有多个构造函数

    https://blog..net/qq_14989227/article/details/79550607

    关于 Java 的静态工厂方法,看这一篇就够了!

    https://www.jianshu.com/p/ceb5ec8f1174

    单例模式?

    https://bbs..net/topics/390753067

    而且这种私有构造方法是怎么保证只能创建一个对象的呢?

    首先回答这个问题,说白了,定义私有的构造方法就是为了防止new对象,new一个对象会在内存为其分配地址等等,所以说每次new的都是新对象,每个新new的对象都是不相同的。

    单例模式只能创建一个对象,我看不出这个对象是什么时候创建的。

    通过调用这个类的静态方法,返回instance变量,而instance变量在类初始化的时候就被赋值new Singleton(),所以是在类初始化的时候创建的对象。

    是在Singleton.getInstance()这样调用的时候吗?那么岂不是每次使用Singleton.getInstance()都创建了一个对象

    类只会初始化一次,所以每次调用静态方法得到的都是同一个对象,这就是单例。

    展开全文
  • 写一个只能构造一个对象的类整理:CmdHack时间:2010年1月24日19:47:49 分析: 构造函数分为构造 无参构造 拷贝构造 三种方法 对象又分为栈中构造对象和堆中构造对象 首先来按照普通的做法写一个类如下class...

    题目:写一个只能构造一个对象的类

    整理:CmdHack

    时间:201012419:47:49

     

    分析:

           构造函数分为有参构造 无参构造 拷贝构造 三种方法

     

           对象又分为栈中构造对象和堆中构造对象

     

       首先来按照普通的做法写一个类如下

    很显然如果单单这样可以构造无数个对象   那我设想一下如果在构造函数中做一个

    限制比如 构造一个对象之后  如果产生第二个对象就将其删除如何呢

    一:delete this (只对堆中的对象起作用)

    二:用个静态变量做次数限制 如果产生一个对象之后再产生对象立刻调用析构函数

    (如果是在栈中产生的对象  那么这个变量的生死存亡只有由系统决定即 显示

    调用析构函数没有任何效果,  当然如果是在堆中产生的对象可以在析构函数

    中使用delete this  显示调用析构函数可以删除对象)

    所以如果构造函数属于Public 的话我们是没有办法只产生一个对象的

     

    ====

    那么只有将构造函数的放在private:中了

    那如果是private怎么来调用构造函数构造对象呢  成员函数么  当然不是了

    成员函数的调用约定是_thiscall  没有对象怎么调用呢   那只有用刚刚学过的静态成员函数(_cdecl调用约定) 没有对象也可以调用  然后再用静态成员变量来做个数限制   具体实现过程如下

    展开全文
  • 单例设计模式就是保证某个的实例有且只能有一个不能随意创建实例。例如:我们只有一个地球,地球的时候只能创建一个。 1、为了阻止实例的new创建,可以做一个private的构造函数。 2、既然不能从外部使用new...

    单例设计模式:

    单例设计模式就是保证某个类的实例有且只能有一个不能随意创建实例。例如:我们只有一个地球,地球类的实例只能创建一个。

    1、为了阻止类实例的new创建,可以做一个private的构造函数。

    2、既然不能从外部使用new进行实例的创建,就从类内部进行实例的创建,为此可以提供一个静态方法和一个要创建的私有全局类实例变量。

    3、静态方法实现如下:

    /// <summary>
        /// 单例模式
        /// </summary>
        public class SingleC
        {
    
    // 定义一个标识确保线程同步
            private static readonly object locker = new object();
     // 定义一个静态变量来保存类的实例
            private static SingleC uniqueCInstance;
            // 定义私有构造函数这样外界不能创建该类实例
            private SingleC()
            {
            }
    
            /// <summary>
            /// 定义公有方法提供一个全局访问,也可以定义公有属性来提供全局访问
            /// </summary>
            /// <returns></returns>
            public static SingleC GetCInstance()
            {
    
    if (uniqueCInstance== null)
                {
                    lock (locker)
                    {
                // 如果类的实例不存在则创建,否则直接返回
                if (uniqueCInstance== null)
                {
                    uniqueCInstance= new SingleC();
                }
    }
    }
                return uniqueCInstance;
            }
        }

    4、上例中使用了lock锁,防止多线程同时调动时if (uniqueCInstance== null)都可以通过,如果都可以就会有两次实例的创建动作。第一个if (uniqueCInstance== null)是为了一旦实例被创建了就不需要再使用lock阻止因多线程导致多个实例出现。

    大神们不喜勿喷,仅作为自我学习笔记!!!

     

    展开全文
  • public class Test{ private int x; private String s; public Test(int x) { this.x = x;...//调用自身的构造方法,这种写法只能存在于构造方法中,有且只能有一个,在此构造方法中必须写在其他语句之前
    public class Test{
        private int x;
        private String s;
        public Test(int x) {
            this.x = x;
        }
        public Test(int x, String s) {
    //调用自身的构造方法,这种写法只能存在于构造方法中,有且只能有一个,在此构造方法中必须写在其他语句之前
            this(x);
            this.s = s;
        }
    }

    1.上面注释的是我觉得大家最容易忘记的this功能

    2.this就是指向当前对象了,这个容易理解和掌握

    3.匿名类或内部类中要调用外部类方法,要使用:外部类名.this.方法名

    4.类中可以在将自身对象作为参数时使用this。



    this与static势不两立,因为static跟具体对象没关系,this就是具体对象的引用。

    一个构造方法中要调用另外一个构造方法,不能通过名字来调用,必须通过this(XXX)来调用。

    展开全文
  • 但是:如果你写了一个构造方法, 不管参无参, 系统就不会再默认生成 , 这时如果你写的是参的, 那无参的那一个就没 了, 系统不会生成了, 你用的时候就不能直接new 类名(); 这个了 只能
  • 个问题,如果需要构造多个A成员就不行了,因为B中只能声明一个无参构造方法B(),所以可以这样: class A{ A(int i){} }; class B{ A a1; A a2; public: void init(){ a1=A(i1); a2=A(i2); } }
  • 设计一个类不能被继承、设计一个类只能在堆上创建实例,设计一个类只能在栈上创建实例 方式一:把构造函数声明为私有函数(该方法创建的类只能在堆上创建实例) 在C#中关键字sealed,在Java中关键字final它们...
  • 面向对象介绍描述:是函数的一个变种,在Python中,函数式编程和面向对象编程,java和C#之类只能把函数写到类里,没有函数式编程,所以只有面向对象,所以在Python中了选择,可能就变得有点麻烦,但是在Python里,函数式...
  • Java中,如果我们创建一个类,想让这个类只有一个对象,那么我们可以 ... * 时候我们希望一个类在任何时候都只有一个实例,这时候可以把该类设计为单例模式。 * 要将一个类设计为单例模式,需要: * 1:把...
  • 一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。 从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有...
  • 设计一个类 只能在堆上创建? 只能在栈上创建? 只能创建一个对象?(单例模式**) C++中创建对象的方法有两种,静态创建和动态创建。 1.静态创建 静态创建是由编译器为对象在栈空间中分配一块内存,通过...
  • 因为你不可以创建抽象的实例,所以构造函数只能通过构造函数链调用(Java中构造函数链指的是从其他构造函数调用一个构造函数),例如,当你创建具体的实现。现在一些面试官问,如果你不能对抽象实例化那么构造...
  • 1.面向对象介绍描述:是函数的一个变种,在Python中,函数式编程和面向对象编程,java和C#之类只能把函数写到类里,没有函数式编程,所以只有面向对象,所以在Python中了选择,可能就变得有点麻烦,但是在Python里,函数...
  • 构造方法

    2016-11-22 17:46:00
    构造方法: 一个类对应一个文件,只能用一个public修饰 1 /** 2 定义一个类: 3 4 class 类名 ... 8 每一个类都至少有一个构造方法: 9 每个类默认都有一个无参构造方法,是隐式的 1...
  • 继承关系中,父子类构造方法的访问特点: ...子类必须调用父类构造方法,不写则赠送super(),写了则用写的指定的super调用,super只能有一个,还必须是第一个。 public class Fu { public Fu(){ Sy.
  • 在C++中,创建的对象两种方法种是静态建立,A a; 另种是动态建立,调用new 操作符。 只能在堆上创建对象 就是动态建立的对象,使用new操作符来完成。 做法:将该构造函数和析构函数权限设...
  • 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数; 动态建立类对象,是...
  • 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。动态建立类对象,是...
  • 我们知道,在一个类中如果没有显式构造方法,则默认有隐式构造方法。当然也可以重载构造方法。无论在显示构造方法还是在隐式构造方法里,我们默认有一个super().在第一行。当然也可以自己写在构造方法里一个,super...
  • 1.Java里如果一个类是abstract类,抽象类,则其构造函数是不会被调用的,也就其构造函数是无效的,所以不用写构造函数。 2.抽象类里可以非抽象方法 和 抽象方法。 3.抽象类中的变量只能是常量 因为抽象类的...
  • PHP多个构造方法使用

    千次阅读 2016-12-29 16:22:13
    PHP的构造方法与Java的有所不同,不能有多个构造方法,只能有一个构造方法,若想要实现类似Java的构造方法的使用,可以使用下面的办法来实现: //PHP构造方法使用 class Test{ function __construct(){ echo 'Test...
  • • 一个源文件中只能有一个public • 一个源文件可以有多个非public • 源文件的名称应该和public的类名保持一致。 定义对象,对象是的实体; 对象包括属性和服务(方法)即封装; 创建对象格式:类名即...
  • 在这之前我们必须明白创建的对象两种方法: 静态建立 类名+对象名:A a; 动态建立 调用new操作符 只能在堆上创建对象 1.将该构造函数和析构函数访问权限设为protected,如果设为private,则该不能被...
  • 1、 一个类中如果没有定义构造方法,那么会有一个默认的无参构造方法 public 类名(){ super(); //super()只能放在有效代码行第一行 } 2、子类中的构造方法如果没有调用本类的构造方法或者没有明确使用父类中的...
  • 文章目录构造器(构造方法)Java中构造器Scala中构造器主构造方法辅助构造方法scala代码...在一个类中,主构造方法只能有一个 辅助构造方法 方法名必须叫this 在辅助构造方法开始(第一行)必须直接或者间接的调用主

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,574
精华内容 1,429
关键字:

一个类只能有一个构造方法