Java类的基础问题
来源:互联网 发布:windows 自带扫描软件 编辑:程序博客网 时间:2024/05/01 21:07
这几天在学习javaWeb,学到框架后看了点源码,发现自己java的基础实在薄弱!特此恶补了Java基础,今天看了些类的继承方面的内容,感受颇深!记录下来以免以后忘记
首先一个类中的成员变量或者方法被调用的时候就已经加载了这个类,但是如果此类有父类,那么便会先去加载父类
那么Z继承了X,在new Z()的时候究竟做了什么呢?
首先,我们明确
1.加载类的时候,会先扫一遍所有的static变量或者staitc代码块。如果有,会在类加载的时候把这些static的先载入,此时还没有加载任何的方法,或者普通的成员变量。
也就是说new Z(),首先要知道什么是class Z吧!但是很不巧class X是Z的父类,此时就要先去加载X,查看X中是否有静态变量或者静态代码块。有的话加载
2.一个类在初始化的时候,首先要是成员变量的初始化。
3.子父类的初始化顺序是,父类先初始化,然后是子类的初始化
那么new Z()的时候,根据上面所说的1,本是想加载Z的,但是要先加载X,而X中若是存在一些static关键字,则要把这些也加载好,然后再加载Z(如果Z中也有一些static关键字的话)。
而想要通过构造函数实例化一个对象,就要初始化这个类,然后根据3得到,要先按照2初始化父类,然后初始化子类,整个过程就完美的结束了
附上一个有意思的代码
public class X {public int a=method();public static int t=method();static{System.out.println("X的静态代码块");}{System.out.println("X的构造代码块");}public X() {System.out.println("X");}public static int method(){System.out.println("初始化静态代码method");return 10;}}
public class Z extends X{public int t=method();static{System.out.println("Z的静态代码块");}{System.out.println("Z的构造代码块");}Z(){System.out.println("Z");}public static int method(){System.out.println("Z的静态method");return 10;}public static void main(String[] args) {Z z=new Z();}}
初始化静态代码method2
X的静态代码块
Z的静态代码块
初始化静态代码method2
X的构造代码块
X
Z的静态method
Z的构造代码块
Z
0 0
- Java类的基础问题
- java的基础个问题
- java的几个基础问题
- java基础,+=的问题
- JAVA 一些基础的问题
- Java并发的基础问题
- Java基础 String类的一个小问题
- java基础类中的File的路径问题
- 常见的java面试的基础问题
- java基础学习必须清楚的问题
- Java初学者必须了解的基础问题
- JAVA基础--ArrayList删除的问题
- 初学java遇到的基础问题
- 关于java的一些基础问题
- Java基础六大必须理解的问题
- java--基础语法的一些细节问题
- Java必须理解的六大基础问题
- 常见的java基础问题总结
- 在windows中运行多个tomcat(免安装版)的配置
- java解惑--谜题4:初级问题
- Linux几个调试宏_FUNCTION_ _TIME_ _LINE_ _FILE_ _DATA_
- 蓝桥杯 算法提高 逆序排列
- linkedin interview
- Java类的基础问题
- Java内存模型与并发同步常用的关键字(volatile和Synchronized)
- 栈(运算操作)
- uva 10635-Prince and Princess 【LIS 求解 LCS】
- 三种循环语句!及课后题
- 常用 Git 命令清单
- 使用VMware测试U盘启动盘是否制作成功
- 《剑指offer》——把字符串转换成整数
- Eclipse中开发导入Android系统内置应用