首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

当一个类的实例本身被创建时,为什么构造函数中的语句不被执行呢?

当一个类的实例被创建时,构造函数中的语句不被执行的原因是构造函数只在对象创建时被调用一次,用于初始化对象的成员变量和执行其他必要的操作。构造函数的主要目的是确保对象在创建时处于一个合理的状态。

构造函数中的语句不被执行可能有以下几种情况:

  1. 对象已经被创建:如果一个对象已经被创建并且再次使用构造函数创建相同类型的对象,构造函数中的语句不会被执行。这是因为构造函数只在对象创建时被调用一次。
  2. 对象已经被销毁:如果一个对象已经被销毁,再次使用构造函数创建相同类型的对象,构造函数中的语句不会被执行。对象被销毁后,它的内存空间被释放,再次创建对象时会分配新的内存空间。
  3. 构造函数被重载:如果一个类有多个构造函数,每个构造函数有不同的参数列表,创建对象时使用了不同的构造函数,构造函数中的语句也不会被执行。这是因为不同的构造函数有不同的初始化逻辑,根据参数列表的不同选择执行对应的构造函数。

总之,构造函数中的语句不被执行是因为构造函数只在对象创建时被调用一次,用于初始化对象的成员变量和执行其他必要的操作。如果对象已经被创建、销毁或者使用了不同的构造函数创建对象,构造函数中的语句不会被执行。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

创建子类对象,父构造函数调用被子类重写方法为什么调用是子类方法?

public static void main(String[] args) { A a = new A(); B b = new B(); } } 问题:为什么创建...但是:创建B对象父会调用父方法? 答案: 子类加载到内存方法区后,会继续加载父到内存。...如果,子类重写了父方法,子类方法引用会指向子类方法,否则子类方法引用会指向父方法引用。 如果子类重载了父方法,则子类重载方法引用还指向子类方法。...如果子类方法没有重写也没有重载父方法,则方法引用会指向父方法。 子类对象创建,会先行调用父构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。...其结果是编译时候,父构造方法调用方法参数已经强制转换为符合父方法参数了。 上边代码在编译前已经转换为下面这个样子了。

6.1K10

设计模式学习笔记(四)单例模式实现方式和使用场景

所以下面就来分别从单例模式实现方法和应用场景来介绍一下单例模式 一、单例模式介绍 1.1 单例模式是什么 单例模式也就是指在整个运行时域中,一个只能有一个实例对象。 那么为什么要有单例模式?...1.2 单例模式原则 为了到达单例这个全局唯一访问点效果,必须要让单例满足以下原则: 阻止通过常规方法实例化(私有构造方法) 保证实例对象唯一性(以静态方法或者枚举返回实例) 保证在创建实例线程安全...所以两个线程都执行到该语句并都判断为true,还是会排队创建对象,那么有没有新解决方式?...2.2 饿汉(线程安全) 不同于懒加载延迟实现实例,我们也可以在程序启动就加载好单例对象: public class Singleton { /**保证构造方法私有,不被外界创建**/...,它们都采用了加载机制来保证当初始化实例只有一个线程执行,从而保证了多线程下安全操作。

24930

python异常报错详解

它不是直接由用户定义继承(为此使用Exception)。如果 str()或者unicode()是在这个一个实例调用,返回实例参数表示形式,或者没有参数,返回空字符串。...使用2元组创建此类型异常,第一个项目在实例errno属性上可用(假定为错误编号),第二个项目可用于该 strerror属性(通常是关联错误消息)。元组本身也可以在args属性上使用。...EnvironmentError使用3元组实例化异常,前两个项目如上所述,而第三个项目在该filename属性上可用。但是,为了向后兼容,该 args属性仅包含前两个构造函数参数2元组。...调用sys.exit()转换为异常,以便清理处理程序(finally语句子句try)可以被执行,并且调试器可以执行脚本而不会失去控制风险。os....异常UnboundLocalError 引用函数或方法局部变量引用,但没有值绑定到该变量。这是一个子类 NameError。

4.6K20

几种常见Runtime Exception

③ 异常对象通常有两种构造函数:一种是无参数构造函数;另一种是带一个字符串构造函数,这个字符串将作为这个异常对象除了类型名以外额外说明。...执行一个静态初始化程序过程,发生了异常抛出。静态初始化程序是指直接包含于static语句段。 java.lang.IllegalAccessError 违法访问错误。...java.lang.ClassCastException 造型异常。假设有A和B(A不是B或子类),O是A实例,那么强制将O构造B实例抛出该异常。...当应用试图通过反射方式创建某个实例、访问该类属性、调用该类方法,而当时又无法访问、属性、方法构造方法定义抛出该异常。...试图通过newInstance()方法创建某个实例,而该类是一个抽象或接口,抛出该异常。 java.lang.InterruptedException 中止异常。

1.1K20

3 :面向对象初级

要使用一个继承体系,  1,查看该体系顶层,了解该体系基本功能。 2,创建体系最子类对象,完成功能使用。  什么时候定义继承之间存在着所属关系时候,就定义继承。...一个进行子类扩展,子类需要保留父功能声明,  但是要定义子类该功能特有内容,就使用覆盖操作完成. 3,构造函数 子父构造函数特点。...在子类构造对象,发现,访问子类构造函数,父也运行了。  为什么? 原因是:在子类构造函数第一行有一个默认隐式语句。...super(); 子类实例化过程:子类中所有的构造函数默认都会访问父空参数构造函数为什么子类实例时候要访问父构造函数? ...为什么完成这个必须动作,就在子类构造函数中加入了super()语句。 如果父没有定义空参数构造函数,那么子类构造函数必须用super明确要调用 父哪个构造函数

71890

100道最新Java面试题,常见面试题及答案汇总

答案:在switch语句中,如果没有case条件匹配,那么它会就会执行default后面的语句。 在下面的例子score既不是1也不是2,就会执行default之后语句。...例如,下例new创建了两个对象,构造函数调用了两次。 Q27:一个可以有多个构造函数吗? 答案:是的,一个可以有多个具有不同参数构造函数创建对象构造函数取决于创建对象传递参数。...答案:如果我们要在加载,对象创建之前执行语句,可以在中使用静态代码块,这样即使在main方法创建对象之前,此静态代码块语句都将在加载执行一次。...Q42:如果类没有定义构造函数,那么对象将会怎么创建? 答案:即使没有定义显式构造函数,对象在创建也会执行隐式构造函数,且该构造函数没有参数。...Q100:构造函数在继承调用顺序是什么? 答案:在继承情况下,创建派生新对象,首先调用父构造函数,然后调用派生构造函数

4.9K21

java异常捕获及处理「建议收藏」

Java异常可以是函数语句执行时引发,也可以是程序员通过throw 语句手动抛出,只要在Java程序中产生了异常,就会用一个对应类型异常对象来封装异常,JRE就会试图寻找异常处理程序来处理异常...InstantiationException 试图使用 Class newInstance 方法创建一个实例,而指定对象因为是一个接口或是一个抽象而无法实例化时,抛出该异常。...这个消息在Throwable 构造函数初始化了。 2 public Throwable getCause() 返回一个Throwable 对象代表异常原因。...按照国际惯例,自定义异常应该总是包含如下构造函数一个无参构造函数 一个带有String参数构造函数,并传递给父构造函数。...一个带有String参数和Throwable参数,并都传递给父构造函数 一个带有Throwable 参数构造函数,并传递给父构造函数。 下面是IOException完整源代码,可以借鉴。

1.9K40

java基础知识总结(绝对经典)

它们存在是以重载体现构造函数和一般函数有什么区别? 1:两个函数定义格式不同。 2:构造函数是在对象创建,就被调用,用于初始化,而且初始化动作只执行一次。...一般函数,是对象创建后,需要调用才执行,可以调用多次。 什么时候使用构造函数? 分析事物,发现具体事物一出现,就具备了一些特征,那就将这些特征定义到构造函数内。...单继承:一个只能有一个。 多继承:一个可以有多个父为什么不支持多继承? 因为一个类同时继承两个父,两个父中有相同功能,那么子类对象调用该功能,运行哪一个?...发现子类构造函数运行时,先运行了父构造函数为什么?...3:抽象不可以创建对象(实例化)。 4:只有通过子类继承抽象并覆盖了抽象所有抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象。 抽象细节: 1:抽象是否有构造函数

64100

双亲委派模型:大厂高频面试题,轻松搞定

第一次加载class文件时调用,包括静态变量初始化语句和静态块执行 : 在实例创建出来时候调用,包括调用new操作符;调用 Class 或 Java.lang.reflect.Constructor...i 值为1 ()方法与实例构造器()方法不同,它不需要显示地调用父构造器,虚拟机会保证在子类()方法执行之前,父()方法方法已经执行完毕...当初始化一个时候,如果发现其父还没有进行过初始化,则需要先触发其父初始化。 虚拟机启动,用户需要指定一个执行(包含main()方法那个),虚拟机会先初始化这个主。...在通过构造函数实例化 AppClassLoader 和 ExtClassLoader 时候都要传入一个 classloader 作为当前 classloader parent ?...继续向下看构造函数实例化 ServiceLoader 做了哪些事情: ? 查看 reload() 函数: ? 继续查看LazyIterator构造器,该类同样实现了Iterator接口: ?

59421

理论+实践:从原型链到继承模式,掌握 Object 精髓(二)

构造函数 function Foo(){ // } var a = new Foo(); • 在以上代码为什么会让我们认为 Foo 是一个?...• 因为我们看到了关键字 new,在面向对象语言中构造实例也会用到它。另一个原因就是,看起来我们执行构造函数方法,而 Foo() 调用方式很像初始化构造函数调用方式。...而这个调用时一个构造函数调用,但 NothingSpecial 本身并不是一个构造函数。 • 在 JavaScript 对于构造函数最准确解释是,所有带 new 函数调用。...所以,函数不是构造函数,但是仅使用 new 函数调用就会被变成 构造函数调用。...创建关联 • 那 [[Prototype]] 机制意义是什么?为什么创建这些关联

6410

Java知识面试题复习(二)Java基础语法

super(参数):调用父一个构造函数(应该为构造函数第一条语句)。...this(参数):调用本类另一种形式构造函数(应该为构造函数第一条语句)。...this和super不能同时出现在一个构造函数里面,因为this必然会调用其它构造函数,其它构造函数必然也会有super语句存在,所以在同一个构造函数里面有相同语句,就失去了语句意义,编译器也不会通过...怎么理解 “实例对象所共享” 这句话?就是说,一个静态成员,它是属于大伙【大伙指的是这个多个对象实例,我们都知道一个可以创建多个实例!】...4、static修饰变量或者方法是优先于对象存在,也就是说一个加载完毕之后,即便没有创建对象,也可以去访问。

30820

【Python详解】Python详细定义与使用案例

需要注意是:class语句本身并不创建该类任何实例。所以在定义完成以后,需要我们进行创建实例,即实例化该类对象。这一点跟Java对象或者C++对象很像,因为都是面向对象语言。...三、方法 方法是行为,它可以多个实例调用。在定义方法,需要在方法名前面添加一个self参数,它代表实例本身。...这个方法是Python一个特殊方法,类似于其他编程语言中构造函数。每当创建一个实例,Python会自动调用它。...因此,__init__()方法只有一个参数,在创建实例,就不需要指定参数了。 六、实例属性 Python实例属性是指属于某个实例属性,是与实例相关属性。...在构造函数__init__(),使用self.name和self.age来初始化实例属性。在创建Person实例,可以通过传递name和age参数值来设置每个实例属性。

7110

Java面试之关键字

static final相当于常量,就是在加载进内存时候就要为属性分配内存,static块就是加载时候执行且被执行依稀,所以可以在其中初始化 使用final关键字修饰一个变量,是引用不能变...:它修饰不能继承 成员变量 static:变量:变量是指不管该类创建了多少对象,系统仅在第一次调用时候为变量分配内存,所有对象共享该类变量,因此可以通过本身或者某个对象来访问变量...super主要存在与子类方法,用于指向子类对象对象 使用场景:访问父属性、函数构造函数 public static void 写成 static public void会怎样 一样,程序正常运行...程序运行时候这个变量就会创建直到程序结束后才会被销毁。变量作用域和实例变量是一样。它初始值和成员变量也是一样变量没被初始化时候根据它数据类型,会有一个默认值。...类似的,静态方法是属于方法,而不是对象,它调用并不作用于对象,也不需要创建任何实例。静态方法本身就是final,因为重写只会发生在实例上,静态方法是和绑定在一起,不是对象。

619100

460道Java后端面试高频题答案版【模块一:Java基础】

7、构造方法有哪些特性? (1)名字与名相同; (2)没有返回值,但不能用 void 声明构造函数; (3)成对象自动执行,无需调用。...因此,如果父只定义了有参数构造方法,而在子类构造方法又没有用 super() 来调用父特定构造方法,则编译将发生错误,因为 Java 程序在父找不到没有参数构造方法可供执行。...下面列举两种执行不到情况: (1)程序进入 try 块之前就出现异常,会直接结束,不会执行 finally 块代码; (2)程序在 try 块强制退出也不会去执行 finally 块代码...父(静态变量、静态语句块) 2. 子类(静态变量、静态语句块) 3. 父实例变量、普通语句块) 4. 父构造函数) 5. 子类(实例变量、普通语句块) 6....(3)this 和 super 不能同时出现在一个构造函数里面,因为 this 必然会调用其它构造函数,其它构造函数必然也会有 super 语句存在,所以在同一个构造函数里面有相同语句,就失去了语句意义

94931

社招前端常见面试题(附答案)

尾调用指的是函数最后一步调用另一个函数。代码执行是基于执行,所以当在一个函数里调用另一个函数,会保留当前执行上下文,然后再新建另外一个执行上下文加入栈。...对原型、原型链理解在JavaScript是使用构造函数来新建一个对象,每一个构造函数内部都有一个 prototype 属性,它属性值是一个对象,这个对象包含了可以由该构造函数所有实例共享属性和方法...then()Promise执行内容符合成功条件,调用resolve函数,失败就调用reject函数。Promise创建完了,那该如何调用?...[Prototype] 链最终都会指向内置 Object.prototype,其包含了 JavaScript 许多通用功能为什么创建”,借助一种特殊属性:所有的函数默认都会拥有一个名为...] 属性链接,所以被称为原型链什么是原型链继承,类比继承:有两个构造函数 A 和 B,将一个构造函数 A 原型对象,通过其 [Prototype] 属性链接到另外一个 B 构造函数原型对象

48030

java核心技术基础知识整理

5)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它构造函数,其它构造函数必然也会有super语句存在,所以在同一个构造函数里面有相同语句,就失去了语句意义,编译器也不会通过...特点: · 1.创建一个,总在继承。...; 2.子类构造方法隐式地调用父不带参数构造方法; 3.没有不带参数构造方法,子类需要使用super来显示调用父构造方法,super指的是对父引用 4.super关键字必须是构造方法第一行语句...; (2)特殊:String作为一个对象 例子一:通过构造函数创建对象。...2)成员变量:作用范围与实例化对象作用范围相同,实例化时,成员变量就会在内存中分配空间并初始化,直到这个实例化对象生命周期结束,成员变量声明周期才结束。

82020

万丈高楼平地起,爆肝21000字Java基础知识总结,收藏起来总有用得着时候

为什么? 原因:子类所有构造函数第一行,其实都有一条隐身语句super(); super(): 表示父构造函数,并会调用于参数相对应构造函数。...注意:子类中所有的构造函数都会默认访问父空参数构造函数,因为每一个子类构造内第一行都有默认语句super(); 如果父没有空参数构造函数,那么子类构造函数内,必须通过super语句指定要访问构造函数...3:抽象不可以创建对象(实例化)。 4:只有通过子类继承抽象并覆盖了抽象所有抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象。 抽象细节: 1:抽象是否有构造函数?...3,通过Thread创建线程对象;4,将实现了Runnable接口子类对象作为实际参数传递给Thread构造函数为什么要传递?因为要让线程对象明确要运行run方法所属对象。...指定没有空参数构造函数,该如何创建该类对象

46211

计算机程序思维逻辑 (13) -

使用第一个 定义了本身和定义了一个函数类似,本身不会做什么事情,不会分配内存,也不会执行代码。方法要执行需要被调用,而实例方法调用,首先需要一个实例实例也称为对象,我们可能会交替使用。...在新建一个对象时候,会先调用这个初始化,然后才会执行构造方法代码。...为什么Java有时候帮助自动生成,有时候不生成?...私有构造方法 构造方法可以是私有方法,即修饰符可以为private, 为什么需要私有构造方法?...对象 通过new创建一个对象时候,对象产生,在内存,会存储这个对象实例变量值,每new一次,对象就会产生一个,就会有一份独立实例变量。

559100

Java基础知识总结

为什么? 原因:子类所有构造函数第一行,其实都有一条隐身语句super(); super(): 表示父构造函数,并会调用于参数相对应构造函数。...注意:子类中所有的构造函数都会默认访问父空参数构造函数,因为每一个子类构造内第一行都有默认语句super(); 如果父没有空参数构造函数,那么子类构造函数内,必须通过super语句指定要访问构造函数...3:抽象不可以创建对象(实例化)。 4:只有通过子类继承抽象并覆盖了抽象所有抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象。 抽象细节: 1:抽象是否有构造函数?...This.方法名 同步函数static修饰,这时同步用是哪个锁?...指定没有空参数构造函数,该如何创建该类对象

1.2K31

C++基础闯关100题,你能闯多少?【2021超硬核大厂高频面试题】

栈,在执行函数函数内局部变量存储单元都可以在栈上创建函数执行结束这些存储单元自动释放。栈内存分配运算内置于处理器指令集中,效率很高,但是分配内存容量有限。...在执行函数函数内局部变量存储单元都可以在栈上创建函数执行结束这些存储单元自动释放。栈内存分配运算内置于处理器指令集中,效率很高,但是分配内存容量有限。...派生创建对象时候会调用基构造函数,但是如果基构造函数是虚函数的话,派生构造函数又会把基构造函数覆盖,所以无法进一步执行而出错。...定义一个函数为虚函数,不代表函数不被实现函数。 定义他为虚函数是为了允许用基指针来调用子类这个函数。 定义一个函数为纯虚函数,才代表函数没有实现。...拷贝构造函数为private语句3和语句4在编译时会报错。 使用explicit修饰构造函数:如果构造函数存在隐式转换,编译时会报错。 31、初始化和赋值区别?

1.9K20
领券