Java父类构造器的讲解
众所周知,对于Java中的所有类而言,它们有一个根父类,即java.lang.Object类。
对于Java中构造器执行的顺序而言,程序执行的顺序为,先执行父类的非静态代码块,然后执行父类的相应的构造器,最后执行子类的非静态代码块,
子类的构造器。
此处需要说明一点:Java中的静态代码是在字节码文件在最开始加载的时候就完成的哦。
为了更好的理解,请看下面的例子:
class Creature
{
{
System.out.println("Creature的非静态初始化块");
}
// 下面定义两个构造器
public Creature()
{
System.out.println("Creature无参数的构造器");
}
public Creature(String name)
{
// 使用this调用另一个重载的、无参数的构造器
this();
System.out.println("Creature带有nmae参数的构造器,name参数:"
+ name);
}
}
class Animal extends Creature
{
{
System.out.println("Animal的非静态初始化块");
}
public Animal(String name)
{
super(name);
System.out.println("Animal带一个参数的构造器,name参数:" + name);
}
public Animal(String name , int age)
{
// 使用this调用另一个重载的构造器
this(name);
System.out.println("Animal带2个参数的构造器,其age:" + age);
}
}
class Wolf extends Animal
{
{
System.out.println("Wolf的非静态初始化块");
}
public Wolf()
{
// 显式调用父类的带2个参数的构造器
super("灰太狼", 3);
System.out.println("Wolf无参数的构造器");
}
public Wolf(double weight)
{
// 使用this调用另一个重载的构造器
this();
System.out.println("Wolf的带weight参数的构造器,weight参数:"
+ weight);
}
}
public class InitTest
{
public static void main(String[] args)
{
new Wolf(5.6);
}
}
运行结果为:
Creature的非静态初始化块
Creature无参数的构造器
Creature带有nmae参数的构造器,name参数:灰太狼
Animal的非静态初始化块
Animal带一个参数的构造器,name参数:灰太狼
Animal带2个参数的构造器,其age:3
Wolf的非静态初始化块
Wolf无参数的构造器
Wolf的带weight参数的构造器,weight参数:5.6
Java父类构造器的讲解的更多相关文章
- java 父类构造器
当创建任何java对象时,程序总会首先调用系统的父类非静态初始化块(隐式执行)和父类构造器(从object开始(java程序中所有类的最终父类都是java.lang.Object类,使用语句super ...
- Java 中变量初始化、子类和父类构造器调用的顺序
先说结论 变量初始化 -> 父类构造器 -> 子类构造器 贴代码 Animcal.java 父类 public class Animal { private static int inde ...
- Java的初始化执行顺序(父类static变量->子类static变量->父类成员变量->父类构造器->成员变量->构造器->main函数)
1. 引言 了解Java初始化的顺序,有助于理解Java的初始化机制和内存机制. 顺序:父类static变量->子类static变量->父类成员变量->父类构造器->成员变量- ...
- scjp考试准备 - 6 - 父类构造器的引用
题一,如下代码的执行结果: class Person{ String name = "No name"; public Person(String nm){name = nm;} ...
- 调用父类构造器:super
import static java.lang.System.*; class Base{ public String name; public double weight; public Base( ...
- java父类调用被子类重写的方法
[转][原文] 1.如果父类构造器调用了被子类重写的方法,且通过子类构造函数创建子类对象,调用了这个父类构造器(无论显示还是隐式),就会导致父类在构造时实际上调用的是子类覆盖的方法(你需要了解jav ...
- java中构造器(Constructor)
大部分内容转自:http://tech.it168.com/j/2006-05-18/200605181021879.shtml 构造器是一个创建对象时被自动调用的特殊方法,为的是初始化 ...
- 简单的例子 关于Java内存管理的讲解
我想做的是,逐行读取文件,然后用该行的电影名去获取电影信息.因为源文件较大,readlines()不能完全读取所有电影名,所以我们逐行读取. 就这段代码,我想要在位置二处使用base64,然后结果呢? ...
- Java私有构造器
Java私有构造器:使用private关键字声明的构造函数.由于类的构造函数时私有的,所以此类不能被实例化,同时也不能被继承.<Effective Java>第三条:用私有构造器或者枚举强 ...
随机推荐
- 我的Android进阶之旅------>Android关于Log的一个简单封装
android.util.Log类,可以方便地用于在编码调试过程中打印日志.但是在发布后的产品中,如果有太多的日志打印,则会严重地影响性能.对android.util.Log类做一个简单的封装,当产品 ...
- Android系统移植与调试之------->如何修改Android设备的默认休眠时间
1.找到~/mx0831-0525/frameworks/base/packages/SettingsProvider/res/values/ defaults.xml文件 2.修改默认休眠时间 3. ...
- centos 下安装pdo_pgsql 只需一个命令_______yum install php56w-pgsql
[root@localhost ~]# yum install php56w-pgsql Loaded plugins: fastestmirror, langpacks Repository pgd ...
- lua的弱弱引用表
lua有GC.细节无需太关注.知道些主要的即可,能local就一定不要global: 还有在数组里的对象,除非显式=nil,否则非常难回收: 只是能够用弱引用表来告诉GC. 外部引用为0,就不要管我, ...
- Docker dubbo 服务注册
vim run.sh #!/bin/baship=`ifconfig eth0 |grep "inet"|awk '{print $2}'`hn=dubbo-service-pro ...
- Bootstrap学习5--bootstrap中的模态框(modal,弹出层)
bootstrap中的模态框(modal),不同于Tooltips,模态框以弹出对话框的形式出现,具有最小和最实用的功能集. 务必将模态框的 HTML 代码放在文档的最高层级内(也就是说,尽量作为 b ...
- Spark0.9.0机器学习包MLlib-Classification代码阅读
本章主要讲述MLlib包里面的分类算法实现,目前实现的有LogisticRegression.SVM.NaiveBayes ,前两种算法针对各自的目标优化函数跟正则项,调用了Optimization模 ...
- iOS tabbar 上面更换任意图
tabbar 对add 上面的图片 有一层默认虚化 对于这种系统高度继承后的 控件 处理办法就是自定义 解决方案 1.放在tabbar 上的图片 不能太小 不然裁剪后 会很模糊 2 .通过裁剪 压缩的 ...
- maven导入项目时,缺少部分source folder
今天导入公司的maven项目时,少了一些source folder,运行启动正常,但是页面打不开,找不到对应的目录文件,使用maven更新项目,重启编辑器也无效. 问题描述如图所示,缺少了图中的2个目 ...
- dojo 官方翻译 dojo/json 版本1.10
官方地址:http://dojotoolkit.org/reference-guide/1.10/dojo/json.html#dojo-json require(["dojo/json&q ...