java静态代码块 类加载顺序问题。
class B extends Object {
static {System.out.println("Load B");}
public B(){
System.out.println("Create B");} }
class A extends B {
static {System.out.println("Load A");}
public A(){
System.out.println("Create A");} }
public class Test {
public static void main(String[] args){ A a = new A();
} }
这是alibaba笔试题,求输出的顺序?
答案为Load B-->Load A-->Create B-->Create A;
原因就是一句话:先有了父亲,才会有儿子! 程序运行时,加载AB两类,因为A是B子类,所以先加载B类,Load B,再加在A类 LoadA,
调用A a = new A()代码时,会先调用其父类B的构造方法 Create B 再调用A的构造方法 Create A
先有父亲后有儿子,这句话不是只针对“构建对象”而言的吗,他也针对“类的加载”吗?我的理解是:对于构建对象的话,
的确是应该先构建父类对象,才能构建子类对象。但对于类的加载的话
,不应该是看到内存中缺少了哪个类就应该加载哪个类的吗?
加载的时候也是一样的,当加载类A的时候,发现有父类B,就去搜索并加载B了,
这个时候还没有加载A中那些静态块,等B加载完了之后,才会返回来加载A,
也只有这样,程序才知道A中到底会有些什么方法,因为A中存在着由B继承而来的方法。
如果先加载了A,那么就会出现两种情况,一种是A中没有继承而来的方法,
另一种是加载B后再一次加载A继承而来的方法,那这样的Java就太差劲了,你说呢? 可参考:http://blog.csdn.net/qiyeliuli/article/details/54867055(写的很好)
java之继承中的构造方法:继承构造器调用
http://www.cnblogs.com/Gaojiecai/p/4004782.html
java 重载、重写、构造函数详解
https://www.cnblogs.com/0201zcr/p/4853283.html
java静态代码块 类加载顺序问题。的更多相关文章
- java静态代码块/静态属性、构造块、构造方法执行、main方法、普通代码块的顺序
java静态代码块/静态属性.构造块.构造方法执行.main方法.普通代码块的顺序 这也是在笔试中的一个重要的考点,就有一个输出语句让你写出输出的结果. 理论知识: 静态代码块是:属于类的,在类加载时 ...
- java中静态代码块初始化顺序
(一)java 静态代码块 静态方法区别 一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下, ...
- java 静态代码块和spring @value等注解注入顺序
java 静态代码块和spring @value等注解注入顺序 问题所在 先上代码 java方法 @Value("${mf.cashost}") public static S ...
- java静态代码块、普通代码
参考文章:http://www.cnblogs.com/qinpengming/p/5227227.html Java中经常有一些静态块,这是用来在生成类之前进行的初始化,无论java还C++语言中的 ...
- Java中普通代码块,构造代码块,静态代码块执行顺序
//执行顺序:(优先级从高到低.)静态代码块>mian方法>构造代码块>构造方法. 其中静态代码块只执行一次.构造代码块在每次创建对象是都会执行. 1 普通代码块 1 //普通代码块 ...
- java静态代码块、初始化块和构造方法的执行顺序
分析:当执行new Child()时,它首先去看父类里面有没有静态代码块,如果有,它先去执行父类里面静态代码块里面的内容,当父类的静态代码块里面的内容执行完毕之后,接着去执行子类(自己这个类)里面的静 ...
- 三、Java基础---------关于继承、构造函数、静态代码块执行顺序示例讲解
在上节博客中曾提到过类的继承,这篇文章主要是介绍类的继承.构造函数以及静态代码块的执行顺序. 首先接着分析在黑马基础测试中的一个关于继承的题目,题目描述如下: 声明类Person,包含2个成员变量:n ...
- 【转】java静态代码块和构造方法执行顺序
先看看下面几个类,然后判断它们的输出public class A { static{System.out.print(1);}public A(){System.out.print(2);}} pub ...
- 由阿里巴巴一道笔试题看Java静态代码块、静态函数、动态代码块、构造函数等的执行顺序
一.阿里巴巴笔试题: public class Test { public static int k = 0; public static Test t1 = new Test("t1&qu ...
随机推荐
- CSU 1160(进制问题)
CSU 1160 Time Limit:1000MS Memory Limit:131072KB 64bit IO Format:%lld & %llu Descrip ...
- KEIL C51 中嵌入汇编以及C51与A51间的相互调用
如何在 KEIL C51(v6.21) 中调用汇编函数的一个示例 有关c51调用汇编的方法已经有很多帖子讲到,但是一般只讲要点,很少有对整个过程作详细描述,对于初学者是不够的,这里笔者通过一个简单例子 ...
- GitHub上最火的开源项目SlidingMenu导入出错的终极解决方案
SlidingMenu 开源项目下载地址 : https://github.com/jfeinstein10/slidingmenu Actionbarsherlock 开源项目下载地址 :http: ...
- 实现zbar扫描二维码的时候就把照片存储出来的办法
业务场景 当实现二维码扫描的时候(用的扫码库是zbar),有时候需要悄悄的整个扫描的照片存储下来,(charles有部分变态业务就是这样)就是说给扫描的图片照个全景照片. 那么代码如何实现 ...
- DateTime用法二
任何项目,难免会碰到DateTime的显示问题,.net框架虽提供丰富多样的显示方法,但我很少使用,因老忘记细节,每次都要纠结到底月份在前还是年份在前:日期分隔符到底是“/”,还是“\”,还是“-”等 ...
- Java 设计模式实现 不错的引用
这段时间有兴趣重新温习一下设计模式在Java中的实现,碰巧看到一个不错的设计模式总结,这里引用一下作为参考. 创建型模式: JAVA设计模式-Singleton JAVA设计模式-Factory JA ...
- 下载gtest
gtest的官网地址:https://github.com/google/googletest 方式一:下载打包好的版本 在github的页面上可以直接下载打包好的gtest,下载入口如下图所示: 方 ...
- java二进制文件复制
package com.starain.io; import java.io.BufferedInputStream;import java.io.BufferedOutputStream;impor ...
- static关键字使用
static关键字对一些公共使用的数据,比如是饭店筷子,不可能说每个人去饭店吃饭的时候自带一双筷子,饭店的筷子对于进店吃饭的对象都是公共的; 静态变量,跟其他变量不同的是,它是与类关联的,其他变量则是 ...
- 注释PHP和html混合代码
<?php if(false){ ?> any code <?php } ?>