日期:2018.10.18

星期四

博客期:019

  Part1:回答为啥会报错

  答案:当然会报错啦!因为平常的编程过程中,系统会对我们写的类自动生成一个默认无参形式的构造方法,类似于C++中的体制!这个在你写了构造方法之后,系统就不会再自动为你分配一个无参的构造方法了。所以在图中的Foo类中只有一个带一个int类型参数的构造方法,在调用无参的构造方法时就会报错!

  Part 2:运行下列代码,总结以下构造顺序

 package teacherMake;

 class Root
{
static{
System.out.println("Root的静态初始化块");
}
{
System.out.println("Root的普通初始化块");
}
public Root()
{
System.out.println("Root的无参数的构造器");
}
}
class Mid extends Root
{
static{
System.out.println("Mid的静态初始化块");
}
{
System.out.println("Mid的普通初始化块");
}
public Mid()
{
System.out.println("Mid的无参数的构造器");
}
public Mid(String msg)
{
//通过this调用同一类中重载的构造器
this();
System.out.println("Mid的带参数构造器,其参数值:" + msg);
}
}
class Leaf extends Mid
{
static{
System.out.println("Leaf的静态初始化块");
}
{
System.out.println("Leaf的普通初始化块");
}
public Leaf()
{
//通过super调用父类中有一个字符串参数的构造器
super("Java初始化顺序演示");
System.out.println("执行Leaf的构造器");
} } public class TestStaticInitializeBlock
{
public static void main(String[] args)
{
new Leaf(); }
}

TestStaticInitializeBlock

  先显示一下结果:

 

  好了,总结以下顺序:

    先是执行静态初始化块,为什么呢?其实就是一个静态数据不同于成员数据的一点,它是先于在系统外部声明构造的,因而会放在最初构造!而其内部也是通过先调用基类(C++概念)[子类]的数据构造,在调用自身的构造;之后的顺序就看你的构造方法是怎么写的了,主要在于声明顺序,在C++里是按顺序先构造基类的成员(内部也是按照声明顺序),Java类似,因为是子类继承父类的成员先构造子类,而且Java不允许多重继承(注意:不是多继承),因而不会有父类的继承顺序(就像老师说的,在Java的“宪法”里,一个“儿子”只准有一个“爹”,哈哈哈),差不多就是父类---->子类的顺序了;再深化一点儿?行吧!我刚刚测试了一下程序,如下图。老师说父类的构造必须先写,我就不信!!!我就要试!!!结果虽然是我败了,但精神可嘉啊!!!至少我清楚的认识到了,老师没有恶意修改Java的”宪法“!嘿嘿!那顺序就是固定的了!(如果觉得不正确,可以留言)

  Part 3: 运行代码说明结果

  结果如下:

  是的,这就是每一次初始化会更新掉之前的存储数据的原因!

Java的动手动脑(四)的更多相关文章

  1. Java的动手动脑

    动手动脑及课后实 仔细阅读示例: EnumTest.java,运行它,分析运行结果? public class EnumTest { public static void main(String[] ...

  2. java异常处理动手动脑问题解决和课后总结

    动手动脑 一.问题:请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识. 1.源代码 import javax.swing.*; cl ...

  3. Java之动手动脑(三)

    日期:2018.10.12 星期五 博客期:017 这次留了两个动手动脑作业!我需要一个一个来说!先说第一个吧! Part 1 :随机生成1000个随机数 代码: //以下为 RandomMaker. ...

  4. java的动手动脑10月20日

    (1)动手动脑 该函数没有赋初值再就是如果类提供一个自定义的构造方法,将导致系统不在提供默认的构造方法. (2) public class test { /*** @param args*/publi ...

  5. java课java方法动手动脑

    动手动脑: import java.util.Scanner; public class Random { public static void main(String[] args) {       ...

  6. java课堂动手动脑及课后实验总结

      动手动脑一:枚举   输出结果: false false true SMALL MEDIUM LARGE 分析和总结用法 枚举类型的使用是借助ENUM这样一个类,这个类是JAVA枚举类型的公共基本 ...

  7. Java一些动手动脑实验

    一.Java字段初始化的规律: 输出结果为:100 和 300 当把{filed=200}放在public int field=100之后输出结果为:200 和 300 所以执行类成员定义时指定的默认 ...

  8. Java课堂 动手动脑5

    1.了解棋盘打印:利用二维数组输出一个15*15的棋盘,棋盘的原素为“+”,就是输出一个横纵都是15个“+”的二维数组,然后再以坐标形式输入棋子“●”,替换掉原来棋盘里的“+”.再编写代码. 电脑随机 ...

  9. java课堂动手动脑博客

    随机生成10个数,填充一个数组,然后用消息框显示数组内容,接着计算数组元素的和,将结果也显示在消息框中. 要求将设计思路.程序流程图.源程序代码.结果截图.编程总结等发表到博客园. (截止时间2015 ...

随机推荐

  1. 商业版微信小程序开发流程

    一.产品阶段 ①功能规划思维导图——产品经理了解清楚整个项目需求,产出清晰明确的功能需求说明. ②需求报价预算——产品经理确定好功能需求后,输出整个项目开发的报价方案. ③组建技术开发团队——初步确认 ...

  2. kettle中的合并记录使用记录

    注意:合并记录的使用前提是2个数据源都按比较关键字排过序,否则合并之后的数据不准确,可能会多出很多. 该步骤用于将两个不同来源的数据合并,这两个来源的数据分别为旧数据和新数据,该步骤将旧数据和新数据按 ...

  3. UOJ #30【CF Round #278】Tourists

    求从$ x$走到$ y$的路径上可能经过的最小点权,带修改  UOJ #30 $ Solution:$ 如果两个点经过了某个连通分量,一定可以走到这个连通分量的最小值 直接构建圆方树,圆点存原点的点权 ...

  4. jq的error

    error事件会在js发生错误或资源加载失败时触发.该事件主要用于window对象.<img>等元素. 此外,你可以为同一元素多次调用该函数,从而绑定多个事件处理函数.触发error事件时 ...

  5. Shiro入门 - 通过自定义Realm连数数据库进行授权

    shiro-realm.ini [main] #自定义Realm myRealm=test.shiro.MyRealm #将myRealm设置到securityManager,相当于Spring中的注 ...

  6. vuex使用示例

    项目代码结构↓ src内容↓ store内容↓ 理解思路: component中的组件发送修改请求,由action.js处理请求,mutation修改请求,修改请求后state改变,从getter.j ...

  7. python(四)类变量和实例变量

    转载自[1] 实际这是个实例变量是否指向类变量的问题. python的类变量和实例变量,顾名思义,类变量是指跟类的变量,而实例变量,指跟类的具体实例相关联的变量,具体体现为self.x 等.实际要注意 ...

  8. mysql 查询优化 ~ 优化基础补充

    一 简介:此文章是对于 sql通用基础的补充说明 二 虚拟列: mysql虚拟列是mysql5.7的新特性,对于函数计算形成的结果可作为虚拟列,并可以对虚拟列添加索引,这样就能加速sql的运行,不过有 ...

  9. 【NLP CS224N笔记】汇总

    [NLP CS224N笔记]Lecture 1 - Introduction of NLP [NLP CS224N笔记]Lecture 2 - Word Vector Representations: ...

  10. 【转载】奇异值分解(SVD)计算过程示例

    原文链接:奇异值分解(SVD)的计算方法 奇异值分解是线性代数中一种重要的矩阵分解方法,这篇文章通过一个具体的例子来说明如何对一个矩阵A进行奇异值分解. 首先,对于一个m*n的矩阵,如果存在正交矩阵U ...