-
java 一个类 多个构造函数_java 为什么有时一个类有多个构造函数
2021-02-26 10:01:57java 为什么有时一个类有多个构造函数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()都创建了一个对象
类只会初始化一次,所以每次调用静态方法得到的都是同一个对象,这就是单例。
-
题目:写一个只能构造一个对象的类
2010-01-24 20:00:00写一个只能构造一个对象的类整理:CmdHack时间:2010年1月24日19:47:49 分析: 构造函数分为有参构造 无参构造 拷贝构造 三种方法 对象又分为栈中构造对象和堆中构造对象 首先来按照普通的做法写一个类如下class...题目:写一个只能构造一个对象的类
整理:CmdHack
时间:2010年1月24日19:47:49
分析:
构造函数分为有参构造 无参构造 拷贝构造 三种方法
对象又分为栈中构造对象和堆中构造对象
首先来按照普通的做法写一个类如下
很显然如果单单这样可以构造无数个对象 那我设想一下如果在构造函数中做一个
限制比如 构造一个对象之后 如果产生第二个对象就将其删除如何呢
一:delete this (只对堆中的对象起作用)
二:用个静态变量做次数限制 如果产生一个对象之后再产生对象立刻调用析构函数
(如果是在栈中产生的对象 那么这个变量的生死存亡只有由系统决定即 显示
调用析构函数没有任何效果, 当然如果是在堆中产生的对象可以在析构函数
中使用delete this 显示调用析构函数可以删除对象)
所以如果构造函数属于Public 的话我们是没有办法只产生一个对象的
====
那么只有将构造函数的放在private:中了
那如果是private怎么来调用构造函数构造对象呢 成员函数么 当然不是了
成员函数的调用约定是_thiscall 没有对象怎么调用呢 那只有用刚刚学过的静态成员函数(_cdecl调用约定) 没有对象也可以调用 然后再用静态成员变量来做个数限制 具体实现过程如下
-
单例模式,一个类只能有一个实例。地球只有一个。
2020-12-03 20:53:59单例设计模式就是保证某个类的实例有且只能有一个不能随意创建实例。例如:我们只有一个地球,地球类的时候只能创建一个。 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阻止因多线程导致多个实例出现。
大神们不喜勿喷,仅作为自我学习笔记!!!
-
你可曾注意到类的构造方法中用this调用另外一个构造方法
2014-05-06 16:39:55public 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)来调用。
-
在java语言中为什么有时候构造方法有时要构造一个没有参数的方法
2015-03-12 10:23:57但是:如果你写了一个构造方法, 不管有参无参, 系统就不会再默认生成 , 这时如果你写的是有参的, 那无参的那一个就没 了, 系统不会生成了, 你用的时候就不能直接new 类名(); 这个了 只能用 -
c++一个类中构造多个其他类成员
2020-06-10 14:24:46但有个问题,如果需要构造多个A类成员就不行了,因为B中只能声明一个无参构造方法B(),所以可以这样: class A{ A(int i){} }; class B{ A a1; A a2; public: void init(){ a1=A(i1); a2=A(i2); } } -
设计一个类不能被继承、设计一个类只能在堆上创建实例,设计一个类只能在栈上创建实例
2018-09-04 11:39:47设计一个类不能被继承、设计一个类只能在堆上创建实例,设计一个类只能在栈上创建实例 方式一:把构造函数声明为私有函数(该方法创建的类只能在堆上创建实例) 在C#中有关键字sealed,在Java中有关键字final它们... -
python类和构造方法_Python类和构造方法
2021-02-10 22:28:00面向对象介绍描述:是函数的一个变种,在Python中,有函数式编程和面向对象编程,java和C#之类只能把函数写到类里,没有函数式编程,所以只有面向对象,所以在Python中有了选择,可能就变得有点麻烦,但是在Python里,函数式... -
java中只能有一个实例的类的创建
2015-11-17 15:50:00Java中,如果我们创建一个类,想让这个类只有一个对象,那么我们可以 ... * 有时候我们希望一个类在任何时候都只有一个实例,这时候可以把该类设计为单例模式。 * 要将一个类设计为单例模式,需要: * 1:把... -
设计一个类,我们只能生成该类的一个实例。
2016-06-12 12:47:39一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。 从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有... -
设计一个类,只能在堆上创建?只能在栈上创建?只能创建一个对象?
2018-07-21 16:00:26设计一个类 只能在堆上创建? 只能在栈上创建? 只能创建一个对象?(单例模式**) C++中创建对象的方法有两种,静态创建和动态创建。 1.静态创建 静态创建是由编译器为对象在栈空间中分配一块内存,通过... -
JVAV中抽象类可以有构造方法吗?
2020-09-24 00:02:40因为你不可以创建抽象类的实例,所以构造函数只能通过构造函数链调用(Java中构造函数链指的是从其他构造函数调用一个构造函数),例如,当你创建具体的实现类。现在一些面试官问,如果你不能对抽象类实例化那么构造... -
python 构造方法_Python类和构造方法
2021-01-31 17:24:191.面向对象介绍描述:是函数的一个变种,在Python中,有函数式编程和面向对象编程,java和C#之类只能把函数写到类里,没有函数式编程,所以只有面向对象,所以在Python中有了选择,可能就变得有点麻烦,但是在Python里,函数... -
构造方法
2016-11-22 17:46:00构造方法: 一个类对应一个文件,只能用一个public修饰 1 /** 2 定义一个类: 3 4 class 类名 ... 8 每一个类都至少有一个构造方法: 9 每个类默认都有一个无参构造方法,是隐式的 1... -
20、父子类的构造方法
2020-12-04 20:55:15继承关系中,父子类构造方法的访问特点: ...子类必须调用父类构造方法,不写则赠送super(),写了则用写的指定的super调用,super只能有一个,还必须是第一个。 public class Fu { public Fu(){ Sy. -
C++设计一个类:只能在堆上创建对象、只能在栈上创建对象、只能创建一个对象
2018-08-23 13:25:44在C++中,创建类的对象有两种方法,一种是静态建立,A a; 另一种是动态建立,调用new 操作符。 一、只能在堆上创建对象 就是动态建立类的对象,使用new操作符来完成。 做法一:将该类的构造函数和析构函数权限设... -
设计一个类:只能在堆上创建对象?只能在栈上创建对象?只能创建一个对象?
2018-08-01 18:03:39静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数; 动态建立类对象,是... -
设计一个类只能在堆(栈)上创建
2017-07-16 01:02:06静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。动态建立类对象,是... -
java父类对子类构造方法的影响
2019-08-03 17:12:09我们知道,在一个类中如果没有显式构造方法,则默认有隐式构造方法。当然也可以重载构造方法。无论在显示构造方法还是在隐式构造方法里,我们默认有一个super().在第一行。当然也可以自己写在构造方法里一个,super... -
Java抽象类:Java里如果一个类是abstract类,抽象类,则其构造函数是不会被调用的,也就其构造函数是无效的...
2019-10-28 12:53:011.Java里如果一个类是abstract类,抽象类,则其构造函数是不会被调用的,也就其构造函数是无效的,所以不用写构造函数。 2.抽象类里可以有非抽象方法 和 抽象方法。 3.抽象类中的变量只能是常量 因为抽象类的... -
PHP多个构造方法使用
2016-12-29 16:22:13PHP的构造方法与Java的有所不同,不能有多个构造方法,只能有一个构造方法,若想要实现类似Java的构造方法的使用,可以使用下面的办法来实现: //PHP构造方法使用 class Test{ function __construct(){ echo 'Test... -
Java基础之类与对象、构造方法与方法
2019-07-13 17:08:48• 一个源文件中只能有一个public类 • 一个源文件可以有多个非public类 • 源文件的名称应该和public类的类名保持一致。 类定义对象,对象是类的实体; 对象包括属性和服务(方法)即封装; 创建对象格式:类名即... -
C++设计一个类,只能在堆上创建对象、只能在栈上创建对象、只能创建一个对象
2019-01-19 21:54:23在这之前我们必须明白创建类的对象有两种方法: 静态建立 类名+对象名:A a; 动态建立 调用new操作符 一、只能在堆上创建对象 1.将该类的构造函数和析构函数访问权限设为protected,如果设为private,则该类不能被... -
java——父类对子类构造方法的影响
2020-03-09 20:31:411、 一个类中如果没有定义构造方法,那么会有一个默认的无参构造方法 public 类名(){ super(); //super()只能放在有效代码行第一行 } 2、子类中的构造方法如果没有调用本类的构造方法或者没有明确使用父类中的... -
scala:主构造方法和辅助构造方法
2021-02-24 14:39:23文章目录构造器(构造方法)Java中构造器Scala中构造器主构造方法辅助构造方法scala代码...在一个类中,主构造方法只能有一个 辅助构造方法 方法名必须叫this 在辅助构造方法开始(第一行)必须直接或者间接的调用主