class HelloA {
public HelloA() {
System.out.println("HelloA");
}
{
System.out.println("I'm A class");
}
static {
System.out.println("static A");
}
} public class HelloB extends HelloA {
public HelloB() {// 优先调用父类的构造方法
System.out.println("HelloB");
}
{
System.out.println("I'm B class");
}
static {
System.out.println("static B");
}
public static void main(String[] args) {
new HelloB();
new Dervied();
}
} class Dervied extends Base {
private String name = "dervied";
public Dervied() {
tellName();
printName();
} public void tellName() {
System.out.println("Dervied tell name: " + name);
} public void printName() {
System.out.println("Dervied print name: " + name);
} // public static void main(String[] args){
// //1.执行父类的构造方法 2.给自己的成员变量赋值 3。调用构造方法中的调用的方法 多态
// }
} class Base {
private String name = "base";
public Base() {
tellName();
printName();
}
public void tellName() {
System.out.println("Base tell name: " + name);
}
public void printName() {
System.out.println("Base print name: " + name);
}
} 输出:
static A
static B
I'm A class
HelloA
I'm B class
HelloB
Dervied tell name: null
Dervied print name: null
Dervied tell name: dervied
Dervied print name: dervied 1, 原因, 类加载时发现B.class 还有父类, 好先去加载 A.class
众所周知 static 块 是在.class 里的其执行的比main优先级更高, 所以先执行父类的static 方法, 好 然后继续回去加载B.class 的方法 又遇到个static 块,
ok执行它, 终于进 main() 了, new HelloB() ,额等等, 它里边隐藏了一部分代码 : 自动调用的 super(), 好的...先去执行父类的初始化... 执行父类的实例代码块,
终于轮到自己了,,,执行自己的实例代码块, ok 执行 自身的构造方法 -_-|||
    
2, 原因, 引用《疯狂Java讲义》中的一段话。因为Java里的方法不能独立存在,它必须属于一个类或一个对象,因此方法也不能直接像函数那样被独立执行,执行方法时必须使用类或对象作为调用者,
即所有的方法都必须使用“类.方法”或“对象.方法”的形式来调用。这里可能产生一个问题:同一个类里不同方法之间相互调用时,不就可以直接调用吗?
这里需要指出的是:同一个类的一个方法调用另一个方法时,如果被调用方法是普通方法,则默认使用this作为调用者;如果被调用方法时静态方法,则默认使用类作为调用者。
也就是说表面上看起来某些方法可以被独立执行,但实际上还是使用this或类来作为调用者。
那么这不就和多态似的了吗 this.tellName();this.printName();....由于初始化父类时对两个变量还没赋值(执行super()时,这时的name时被子类覆盖的,
子类的name还没初始化呢, 接下来开始执行执行sysout, 然后子类初始化, 初始化变量~, 执行sysout)

  

JavaSE 第二次学习随笔(关于内存的小题)的更多相关文章

  1. JavaSE 第二次学习随笔(五)

    /* * 中文乱码出现的情况研究 * 注意点:乱码解决的办法是再编码再解码 * 但是如果是编码出错了,无法解决.如果是解码出错了,可以利用再编码再解码 * * * 编码 解码 结果 * GBK utf ...

  2. JavaSE 第二次学习随笔(四)

    ---------------------------------------------------------------------------------------------------- ...

  3. JavaSE 第二次学习随笔(三)

    * 常见异常 * 数组越界异常 * 空指针异常 * * * 特点: 当程序出现异常的时候, 程序会打印异常信息并中断程序 * 所以当同时出现多个异常的时候只能执行第一个, 后边的用不到 * * 单异常 ...

  4. JavaSE 第二次学习随笔(二)

    循环结构中的多层嵌套跳出 targeta: for(int i = 0; i < 100; i++){ for (int j = 0; j < 100; j++) { if(i + j = ...

  5. JavaSE 第二次学习随笔(String的坑 + ==)

    String 类是一个final类, 其内部是使用的 private final char value[]; 来存储内容, 其既可以当作一个基本类型来使用也可以当作一个类来使用;final 类(Str ...

  6. JavaSE 第二次学习随笔(一)

    Java是一种区分大小写的强类型准动态语言 动态语言,是指程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等在结构上的变化,类型的检查是在运行时做的,优点为方便阅读,清晰明了,缺点 ...

  7. JavaSE 第二次学习随笔(作业一)

    package homework2; import java.io.ObjectInputStream.GetField; import java.util.Arrays; public class ...

  8. 学习练习 java数据库查询小题

    10. 查询Score表中的最高分的学生学号和课程号.(子查询或者排序) 11. 查询每门课的平均成绩. 12.查询Score表中至少有5名学生选修的并以3开头的课程的平均分数. 13.查询分数大于7 ...

  9. Python(Python+Qt)学习随笔:使用xlwings新建Execl文件和sheet的方法

    在<Python学习随笔:使用xlwings读取和操作Execl文件>介绍了使用xlwings读取和操作Execl文件的方法,但老猿这两天写个例子使用时,发现使用该文的方法无法新建EXCE ...

随机推荐

  1. Android 自定义倾斜字体

    public class RotateTextView extends AppCompatTextView { private static final int DEFAULT_DEGREES = 0 ...

  2. Write a makefile to compile *.c and link to executable target

    https://wenku.baidu.com/view/b1ec946027d3240c8447ef9a.html GNU+make中文手册V3.8 <=========From Docs== ...

  3. ubuntu14.04安装rabbitmq

      ubuntu14.04安装rabbitmq及配置 1.修改/etc/apt/sources.list文件 命令:vi /etc/apt/sources.list 在最后一行加上:deb http: ...

  4. 本地数据库(sql server)插入一条新数据时,同步到服务器数据库

    之前有个同学问我,本地数据库插入新数据时怎么同步到服务器上,当时我先想到是程序逻辑控制,作相应的处理. 但有时候我们程序不太好处理,那能不能从数据库入手呢,数据库不是有触发器(Trigger)吗,应该 ...

  5. mysql便于管理的几个shell脚本

    [mysql@clark scripts]$ lsmysql_db_shutdown.sh  mysql_db_startup.sh  mysql_env.ini  mysqlplus.sh[mysq ...

  6. Qt 窗口移动实现

    很多人觉得系统自带的标题栏太丑了,想要自绘一个标题栏,去掉了系统自带的标题栏后,就需要自己实现窗口移动,下面的代码就是实现窗口移动. widget.h #ifndef WIDGET_H #define ...

  7. this作用域详解

    大家在使用Javascript的时候经常被this这个家伙搞得晕头转向的.在Javascript中它却显得古灵精怪的,因为它不是固定不变的,而是随着它的执行环境的改变而改变.在Javascript中t ...

  8. 【字符串】跳来跳去的KMP匹配

    原理: 不给予证明啦(懒得一批 但是代码中有给还算详细的注释 参考:https://www.cnblogs.com/yjiyjige/p/3263858.html 模板题: 洛谷P3375: http ...

  9. Do not mutate vuex store state outside mutation handlers.

    组件代码: selectItem(item,index) { this.selectPlay({ list: this.songs, index }) }, ...mapActions([ 'sele ...

  10. Spring-boot官方案例分析之data-jpa

    Spring-boot官方案例分析之data-jpa package sample.data.jpa; import org.junit.Before; import org.junit.Test; ...