java构造器(整合)
来源:互联网 发布:淘宝小二怎么联系 编辑:程序博客网 时间:2024/05/15 20:19
没有父类无法构造子类,构造子类之前是必须要先构造父类的,一般都是隐式调用父类的无参构造器的。
所以:1.如果定义了有参构造器,而又没有无参构造器的话,JVM是不会自己构造无参构造器的,因为虚拟机认为你自己可以定义构造器(java虚拟机说:自己能做为什么还要我帮你定义无参构造器呢)。
2.如果没有定义了有参构造器,就可以不用自己定义无参构造器(java虚拟机说:你不会定义构造器啊,那我帮你造个吧)。
转载。。。详解:
构造方法,就是对象出生时,必须去做这件事情。就象一个Person类出生之后,“取名字”这个方法是在构造方法中去完成的。如果一个Company对象出来之前,必须进行注册公司名,起动资金,办公地址。那么编译器怎么知道那个方法是构造方法呢。没有返回值,且方法名与类相同。 构造方法严格地说不是正统的方法,感觉生成皇城脚下,动不动就“扶天子以令诸候”,它有它的脾气,如果稍有不对的地方就令程序编译出错。每个类都必须至少有一个构造方法,可以是默认不在类中出现,编译器给定的。可以是private,但无论如何必然会有一个构造方法,即使它什么也不做。
1)它没有返回值。关于它有没有返回值,以前实验室争论过非常长的时间,“返回值帮”,认为最终它通过执行,给你了一个对象。这个对象就是它生产出来的。“无返帮”,认为对象是new的产生,不干构造方法什么事。构造方法只是new出一个空间,即一个空白对象以后,执行初始化的工作。我支持“无返帮”,觉得new就象买了一个毛坯房,然后构造方法是一个装修队。
2)看下边的示例:
public class A {
public A(int i){}
}
class B extends A{
public B(int i){}
public static void main(String[] args) {
new B(3);
}
}
表面上这是一个非常简单的程序,乍一看没有错啊。可以正常执行。或许你找出来的错是指两个带参的构造方法为什么是空体,事实上真正的错误在于,虽然每个类都带有默认无参的构造方法,但一旦显示定义有参构造方法,无参构造方法就消失了。这里B(int i)的构造方法调用的是A的无参构造方法,而不是想当然的A(int i),有两种改法:一、A中加入public A(){}无参构造方法。二、在public B(int i){ super(i);} 去强制调用A的有参构造方法。这里要注意的是,对于构造方法的匹配检查,是编译期进行的,出现的错误是编译期错误。而不是运行时异常。反正至少有一条路是通向Object,可以是super(a),如果不显示指定,一律无参的调用父类构造方法。类似的例子如:
class First{
public First(String s){
System.out.println(s);
}
}
public class Second extends First {
public static void main(String[] args) {
new Second();
}
} //错误提示:Implicit super constructor First() is undefined for default constructor. Must define an explicit constructor
- java构造器(整合)
- 重温JAVA(构造器)
- Java中的构造器(构造方法)的调用
- Java基础复习---对象构造(构造器)
- [java]java构造器
- java中构造器(Constructor)
- Java 构造器(定义,作用,原理)
- Java Reflection(三):构造器
- java中构造器(Constructor)
- java中构造器(Constructor)
- 关于Java构造器
- java静态构造器
- Java 构造器
- java构造器
- java构造器
- java缺省构造器
- java构造器小结
- java构造器
- 2012-11-25
- segment fault 段错误各种原因
- EXTjS4下拉树 支持单选多选级联选择 comboxtree
- Spring读书笔记-----Spring的Bean之Bean的基本概念
- android数据存储:ContentProvider数据共享
- java构造器(整合)
- 科研项目研究报告文本内容格式
- 第十三周上机任务-项目3-汉诺塔
- QX项目实战-11.基础架构试验二:反序列化对象、重写数据库
- Hbase分布式安装
- iframe高度自适应
- gets和scanf函数的区别
- CDN原理
- android时间日期控件