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

关于Java构造函数(Constructor)的常见问题总结1 为什么调用子类的构造方法的时候,默认会调用父类的构造方法2 常见错误:Implicit super constructor is und

Must define an explicit constructor 这个错误是很多开发者经常遇到的错误,错误原因就是找不到超类中的默认构造函数。...编译器错误是因为默认的super()无参的构造函数是没有定义的。在Java中,如果一个类没有定义构造函数,编译器会自动插入一个默认的无参的构造函数。...为什么Java在一个类已经实现了一个带参的构造函数的时候,不实现默认的无参构造函数? 这是个很有趣的问题。...我们知道如果在一个类中没有声明一个构造函数,那么编译器会隐式的帮我们实现一个无参的构造函数,但如果我们一旦一个构造函数,不管带不带参数,那么编译器都不会提供默认的构造函数,所以这么做的原因是为什么呢?...有一个原因就是,如果我们给所有的类都自动实现一个无参的构造函数,就可能出现问题,会打破类的设计原则。

3K41

一个关于反序列化的小问题

当你通过继承一个现有的类来定义你需要被序列化的类,如果这个父类实现了ISerializable接口,如果定义不当,就会出现反序列化的问题。而且这个我们可能经常都不注意。...SerialiationException的异常,错误消息提示找不到构造函数。...,对于这个消息,我们第一个反应是在反序列化的时候找不到默认(无参)的构造函数。但是再看MyDictionary的定义,我们不曾定义任何构造函数,意味着它具有一个默认(无参)构造函数。...实际上,这里并不是找不到默认(无参)构造函数,而是找不到一个具有特殊参数列表的构造函数。该构造函数接收两个参数,类型分别是:SerializationInfo和StreamingContext。...这算是一个约定,但是当你继承某个类型的时候,你往往会忘记这个约定。

703100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    类和对象 _ 剖析构造、析构与拷贝

    因此,在尝试这样创建对象时,编译器会报错,因为它找不到一个合适的默认构造函数来调用。错误信息表明编译器找不到一个可以调用的构造函数,因为没有默认构造函数可用。...这意味着如果你想要创建类的对象而不提供任何参数,你必须自己定义一个无参构造函数,否则编译器会报错,因为它找不到一个合适的构造函数来调用。...拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错, 因为会引发无穷递归调用。...other) { // 构造信息 } 在使用该拷贝构造函数进行拷贝构造的时候就会出现无限循环拷贝,因为形参为MyClass other而不是MyClass& other,为什么出现这样的情况呢...为什么会崩溃呢?

    13510

    安卓 App 热补丁动态修复技术介绍

    ,会按顺序遍历dex文件,然后从当前遍历的dex文件中找类,如果找类则返回,如果找不到从下一个dex文件继续查找。...] 为什么会出现以上问题呢?...让我们搜索一下抛出错误的代码所在,嘿咻嘿咻,找到了一下代码: [image.jpg] 从代码上来看,如果两个相关联的类在不同的dex中就会报错,但是拆分dex没有报错这是为什么,原来这个校验的前提是:...(因为载入hack.dex的代码是在Application中onCreate中执行的,如果在Application的构造函数里面插入了这段代码,那么就是在hack.dex加载之前就使用该类,该类一次找不到...,会被永远的打上找不到的标志) 其中: [image.jpg] 之所以选择构造函数是因为他不增加方法数,一个类即使没有显式的构造函数,也会有一个隐式的默认构造函数。

    3.3K10

    java开发人员最常犯的10种错误

    九、父类和子类的构造函数 上图的代码中有两处编译时错误,原因其实很简单,主要和构造函数有关。首先,我们都知道: 如果一个类没有定义构造函数,编译器将会插入一个无参数的默认构造函数。...如果一个类中定义了一个带参数的构造函数,那么编译器就不会再帮我们创建无参的构造函数。 上面的Super类中定义了一个带参数的构造函数。编译器将不会插入默认的无参数构造函数。...我们还应该知道: 子类的所有构造函数(无论是有参还是无参)在执行时,都会调用父类的无参构造函数。 所以,编译器试图调用Super类中的无参构造函数。...但是父类默认的构造函数未定义,编译器就会报出这个错误信息。...十、" "还是构造函数 关于这个问题,也是程序员经常出现困惑的地方,在该如何创建字符串,使用" "还是构造函数?中也介绍过.

    15810

    RuntimeException和非RuntimeException的区别「建议收藏」

    ,出现文件找不到的情况 1....这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;可读性降低,将程序代码与处理异常的代码混爹在一起;由调用函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解...而已检查异常是由程序员抛出的,这分为两种情况:客户程序员调用会抛出异常的库函数(库函数的异常由库程序员抛出);客户程序员自己使用throw语句抛出异常。...③ 异常对象通常有两种构造函数:一种是无参数的构造函数;另一种是带一个字符串的构造函数,这个字符串将作为这个异常对象除了类型名以外的额外说明。...若掷出一个异常,异常控制机制会搜寻参数与异常类型相符的第一个控制器随后它会进入那个catch 从句,并认为异常已得到控制。一旦catch 从句结束对控制器的搜索也会停止。

    2.7K10

    Java中子类和父类的构造函数?

    参考链接: Java中的继承和构造函数 这篇文章总结了关于Java构造的常见​​问题。  1)为什么创建一个子类对象要也需要调用父类的构造函数? ...如果没有,编译器会插入调用父类构造的语句。这就是为什么在创建子类对象时父类中的构造超函数会被调用。  这里没有创建两个对象,只有一个子对象。...Must define an explicit constructor"    出现这种编译错误,因为默认的父类构造函数未定义。...这是上边的Super类发生的情况。  子类的构造函数,无论有参构造还是无参构造,将会调用父类中的默认的无参构造函数。...3)子类中的显式调用父类构造函数  下面的代码是正常的:    子类(Sub)构造函数显式地调用父类(Super)中的带参构造参数。如果父类中定义了相对应的构造函数,那将会被正常良好的调用。

    2.3K20

    Java里的构造函数(构造方法)

    一, 构造函数的特点: 构造函数的主要作用是完成对象的初始化工作,(如果写的类里面没有构造函数,那么编译器会默认加上一个无参数且方法体为空的构造函数).它能够把定义对象时的参数传给对象的域。...如果不小心给构造函数前面添加了返回值类型,那么这将使这个构造函数变成一个普通的方法,在运行时将产生找不到构造方法的错误。...一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构造器,这个构造器不执行任何代码。构造方法可以重载,以参数的个数,类型,顺序。  ...:默认情况下,一个类会有一个默认的构造函数,这个构造函数没有内容也没有返回值,一般都回略去不写.这种情况下,编译器在编译的时候会默认加上一个无参且方法体为空的构造函数.但是,如果类的构造函数被重写了,如上例...,Person类已经有了一个有参数有方法体的构造函数,这时编译器就不会再给它默认加上一个无参且方法体为空的构造函数.可以理解为无参的构造函数被覆盖了.这种情况称为没有默认构造函数.

    2.5K00

    几种常见的Runtime Exception

    这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;可读性降低,将程序代码与处理异常的代码混爹在一起;由调用函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解...而已检查异常是由程序员抛出的,这分为两种情况:客户程序员调用会抛出异常的库函数(库函数的异常由库程序员抛出);客户程序员自己使用throw语句抛出异常。...③ 异常对象通常有两种构造函数:一种是无参数的构造函数;另一种是带一个字符串的构造函数,这个字符串将作为这个异常对象除了类型名以外的额外说明。...若掷出一个异常,异常控制机制会搜寻参数与异常类型相符的第一个控制器随后它会进入那个catch 从句,并认为异常已得到控制。一旦catch 从句结束对控制器的搜索也会停止。...java.lang.ClassNotFoundException 找不到类异常。当应用试图根据字符串形式的类名构造类,而在遍历CLASSPAH之后找不到对应名称的class文件时,抛出该异常。

    1.2K20

    Java异常&反射常见面试题及答案

    2.throw throws: throw是语句抛出异常,出现于函数内部,用来抛出一个具体异常实例,throw被执行后面的语句不起作用,直接转入异常处理阶段。...,文件路径错误或文件不存在,可能用了绝对路径检查文件是否存在,路径是否写错,多用相对路径 ClassNotFoundException:在classpath中找不到引用的类缺乏引用当前类的jar或没有设置...OutOfMemoryError:内存溢出异常,产生对象太多,内存不够->不要在循环体重创建大量对象,或对象及时回收,增大初始化堆:-Xms 增加最大值:-Xmx NoClassDefFoundError:找不到相应的类错误...:栈溢出错误,一般是函数的死循环,或递归调用无法退出->检查死循环的代码,或让递归有退出值,或加大栈初始化参数 8.异常打印信息组成 所处线程名字、异常类名、异常信息、异常堆栈、异常的源码,包名,类名,...([参数]); 3.通过class对象创建一个实例对象(就相当与new类名()无参构造器) Cls.newInstance(); 参考: https://blog.csdn.net/qq_37875585

    17920

    前端面试题总结(持续更新。。)

    ③@import只在ie5以上才能识别,而link是html标签,无兼容问题。④link方式的样式权重高于@import的权重。...创建闭包的常见方式就是在一个函数内部创建另一个函数。利用闭包可以突破作用域链,将函数内部的变量和方法传递到外部。 特性: ①函数内嵌套函数。②内部函数可以引用外层的参数和变量。...①新建了一个对象 ②设置原型链(instance.proto = F.prototype) ③让构造函数(F)中的this指向这个实例(instance),执行构造函数。...id值:0,1,0,0 类属性值/属性选择器/伪类:0,0,1,0 元素和伪元素:0,0,0,1 为什么要初始化css样式?...如果没初始化css样式往往会出现浏览器之间的页面显示差异。

    78320

    【新技能get】让App像Web一样发布新版本

    dexElements,当找类的时候,会按顺序遍历dex文件,然后从当前遍历的dex文件中找类,如果找类则返回,如果找不到从下一个dex文件继续查找。...为什么会出现以上问题呢? 从log的意思上来讲,ModuleManager引用了ActivityManager,但是发现这这两个类所在的dex不在一起,其中: 1....让我们搜索一下抛出错误的代码所在,嘿咻嘿咻,找到了一下代码: ? 从代码上来看,如果两个相关联的类在不同的dex中就会报错,但是拆分dex没有报错这是为什么,原来这个校验的前提是: ?...(因为载入hack.dex的代码是在Application中onCreate中执行的,如果在Application的构造函数里面插入了这段代码,那么就是在hack.dex加载之前就使用该类,该类一次找不到...,一个类即使没有显式的构造函数,也会有一个隐式的默认构造函数。

    663130

    Nuwa学习笔记

    dexElements,当找类的时候,会按顺序遍历dex文件,然后从当前遍历的dex文件中找类,如果找类则返回,如果找不到从下一个dex文件继续查找。...问题产生: 试验一下,修改某个类,然后打包成dex,插入到classloader,当加载类的时候出现了(本例中是ActivityManager要被替换): ? 为什么会出现以上问题呢?...让我们搜索一下抛出错误的代码所在,嘿咻嘿咻,找到了一下代码: ? 从代码上来看,如果两个相关联的类在不同的dex中就会报错,但是拆分dex没有报错这是为什么,原来这个校验的前提是: ?...(因为载入hack.dex的代码是在Application中onCreate中执行的,如果在Application的构造函数里面插入了这段代码,那么就是在hack.dex加载之前就使用该类,该类一次找不到...,一个类即使没有显式的构造函数,也会有一个隐式的默认构造函数。

    92020

    Java程序员最常犯的 10 个错误!

    构思编辑器 上图的代码中有两处编译时错误,原因其实很简单,主要和构造函数有关。...首先,我们都知道: 如果一个类没有定义构造函数,编译器将会插入一个无参数的默认构造函数。 如果一个类中定义了一个带参数的构造函数,那么编译器就不会再帮我们创建无参的构造函数。...微信编辑器 构思编辑器 上面的Super类中定义了一个带参数的构造函数。编译器将不会插入默认的无参数构造函数。...我们还应该知道: 子类的所有构造函数(无论是有参还是无参)在执行时,都会调用父类的无参构造函数。 微信编辑器 构思编辑器 微信编辑器 构思编辑器 所以,编译器试图调用Super类中的无参构造函数。...但是父类默认的构造函数未 定义,编译器就会报出这个错误信息。

    37610

    C++ 初阶 类和对象(中)

    前言:C++初阶系列,每一期博主都会使用简单朴素的语言将对应的知识分享给大家,争取让所有人都可以听懂,C++初阶系列会持续更新,上学期间将不定时更新,但总会更的 一、构造函数 1.1为什么要有构造函数...因此在C++中就诞生了一个超级好用的东西,它就是构造函数,它的作用也是很简单粗暴,那就是在你创建了一个对应的类(结构体)的时候,编译器会根据你书写的构造函数对你创建的类进行初始化。...先来讲一下第一点,无返回值,这里的无返回值是包括void,也就是连void都不用,直接写构造函数名就行了,这时候我们就会接触到第二点,函数名与类名相同,比方说我们要创建一个关于日期的类,我给这个类取名为...在我看来一共有三种 1.在构造函数中写入缺省值,实现全缺省,这样就可以实现创建无参数变量依然可以初始化变量 2.使用重载的方式来缺省 3.在声明的同时进行初始化 值得一提的是,如果你已经写了构造函数...无参数无返回值类型。 3. 一若未显式定义,系统会自动生成默认的析构函数。注意:析构函数不能重载 4. 对象生命周期结束时,C++编译系统系统自动调用析构函数。

    15210

    Java程序员必备:异常的十个关键知识点

    数组索引越界异常- ClassNotFoundException 找不到类异常- IllegalArgumentException(非法参数异常) 常见的 Checked Exception 异常:...= -1) { } } 从方法中声明抛出的任何异常都必须使用throws子句。 抛出异常 throw关键字作用是抛出一个 Throwable类型的异常,它一般出现在函数体中。...(此时并没有返回运算后的值,而是先把要返回的值保存起来,若finally中无return,则不管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),该情况下函数返回值是在finally...那么,为什么需要自定义异常? Java提供的异常体系不可能预见所有的错误。 业务开发中,使用自定义异常,可以让项目代码更加规范,也便于管理。...现在所有 Throwable 子类在构造器中都可以接受一个 cause(异常因由) 对象作为参数。

    90020

    Java基础入门笔记05——面向对象,创建对象的内存分析,继承,封装,多态,object类,this&&super,方法重写,引用类型的强制转换,instanceof,抽象类,内部类,接口,异常。[通

    (继承,多态) ---- 类和对象的关系 使用new关键字创建对象时 分配内存空间 给创建好的对象进行默认的初始化(以及调用类的构造函数——构造器) 类的构造器 也称类的构造方法...必须和类名相同 必须没有返回类型,连void也不能写 如果程序没写构造方法,系统会默认生成无参构造方法;如果写了,会覆盖默认的,也就没有无参构造方法了。...(也就是super.属性或super.方法()不能调父类的私有) 如果在父类中,写了有参构造方法,默认的无参构造方法就没了。...此时子类在写super()去调用父类的无参构造就会报错了,所以一般情况:如果重写了父类的有参构造,一定要记得加上一个无参构造。...>private 重写可能会抛出异常:重写时,异常的范围可以缩小,不能扩大 重写时,子类的方法名和父类必须要一致,方法体不同 为什么需要重写?

    1K20

    Java 小白成长记 · 第 4 篇《对象的初始化和清理》

    在构造 Test类的对象时, 构造函数会运行,以便将实例域初始化为所希望的状态。 构造函数与其他的方法有一个重要的不同。...你需要两个构造器:无参构造器和有一个 String 类型参数的构造函数,该参数传入文件名。两个构造器具有相同的名字。因此,方法重载是必要的,它允许方法具有相同的方法名但接收的参数不同。...如果编译器找不到匹配的参数, 就会产生编译时错误,因为根本不存在匹配, 或者没有一个比其他的更好。这个过程被称为「重载解析」(overloading resolution)。...无参构造函数(默认构造函数) 如前文所说,一个无参构造器就是不接收任何参数的构造器,用来创建一个"默认的对象"。如果你创建一个类,「类中没有构造器,那么编译器就会自动为你创建一个无参构造器」。...如果你了解了 this 的用法,想必你也就能理解为什么在 static 方法中不会出现 this。因为 static 是为类而创建的,不需要任何对象。

    32720
    领券