1、很重要!!!
例子:
package Servlet.day0811.am;
public class StaticTest {static StaticTest st=new StaticTest();static{System.out.println("静态代码块");}public StaticTest(){System.out.println("构造器");System.out.println(st);m1();} public static void m1(){System.out.println("m1静态方法");System.out.println(st);}{System.out.println("普通代码块");}public static void main(String[] args) {System.out.println("main开始");StaticTest.m1();System.out.println("main结束");}
}
-------------------------------------结果如下-------------------------------------
普通代码块    (先加载普通代码块)
构造器        (再加载构造器)
null          (输出构造器中的st,此时并未加载静态属性,所以输出null)
m1静态方法    (构造器中的m1方法,输出m1静态方法)
null          (m1方法中的st,此时st仍然未被加载)
静态代码块    (加载静态代码块)
main开始      (main方法开始,st在这时候被加载(分配内存))
m1静态方法    (调用静态方法m1)
Servlet.day0811.am.StaticTest@d1f24bb  (st已经被加载过了,所以为对象对应的地址)
main结束      (main方法结束)++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2、1、虚拟机在首次加载Java类时,会对静态初始化块、静态成员变量、静态方法进行一次初始化2、只有在调用new方法时才会创建类的实例3、类实例创建过程:按照父子继承关系进行初始化,首先执行父类的初始化块部分,然后是父类的构造方法;再执行本类继承的子类的初始化块,最后是子类的构造方法4、类实例销毁时候,首先销毁子类部分,再销毁父类部分
public class Dervied extends Base{private String name="dervied";public Dervied(){System.out.println(new Base().i);tellName();printName();}static{System.out.println("子类静态代码块");}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) {new Dervied();}
}
class Base{public int i=99;private String name="111";static{System.out.println("父类静态代码块");}{System.out.println("父类非静态代码块");}public Base(){tellName();printName();}public void tellName(){System.out.println("Base tell name : "+name);} public void printName(){System.out.println("Base print name : "+name);}
}
-------------------------------------结果如下-------------------------------------

父类静态代码块

子类静态代码块

父类非静态代码块

Dervied tell name : null

Dervied print name : null

父类非静态代码块

Base tell name : 111

Base print name : 111

99

Dervied tell name : dervied

Dervied print name : dervied

++++++++++++++++++++++++++做如下修改++++++++++++++++++++++++++++

将main方法里面new Dervied( ) 改为:System.out.println("hello");

结果为:

父类静态代码块

子类静态代码块

hello

============================================================

3、

class Farther{

public static int a=2;

public int b=3;

{

System.out.println("非静态代码块:b="+b);

}

static{

a=4;

System.out.println("静态代码块:a="+a);

}

public Farther(){

System.out.println("父类构造器");

this.s();

}

public void s(){

System.out.println("父类方法");

}

}

public class Son extends Farther{

public Son(){

System.out.println("子类构造器");

}

public static void main(String[] args) {

Farther f=new Son();

f.s();

}

public void s(){

super.s();

System.out.println("子类方法");

}

}

-------------------------------------结果如下-------------------------------------

静态代码块:a=4

非静态代码块:b=3

父类构造器

父类方法

子类方法

子类构造器

父类方法

子类方法

==========================================================

4、

public class InitializeDemo {

private static int k=1;

private static InitializeDemo t1=new InitializeDemo("t1");

private static InitializeDemo t2=new InitializeDemo("t2");

private static int i=print("1");

private static int n=99;

static{

print("静态代码块");

}

private int j=print("j");

{

print("非静态代码块");

}

public InitializeDemo(String str){

System.out.println(k++ + " : "+ str +"  i="+i+"  n="+n);

++i;

++n;

}

public static int print(String str){

System.out.println(k++ + " : "+ str +"  i="+i+"  n="+n) ;

++n;

return ++i;

}

public static void main(String[] args) {

new InitializeDemo("init");

}

}

-------------------------------------结果如下-------------------------------------

1 : j  i=0  n=0

2 : 非静态代码块  i=1  n=1

3 : t1  i=2  n=2

4 : j  i=3  n=3

5 : 非静态代码块  i=4  n=4

6 : t2  i=5  n=5

7 : 1  i=6  n=6

8 : 静态代码块  i=7  n=99

9 : j  i=8  n=100

10 : 非静态代码块  i=9  n=101

11 : init  i=10  n=102

转载于:https://blog.51cto.com/12181171/1958973

类的加载顺序(例题)相关推荐

  1. 类的加载顺序和静态代码块和匿名代码块的区别

    静态代码块和匿名代码块的区别 静态块: static { } 匿名块: { }          静态块只在类第一次被加载的时候执行一次,一般用于进行初始化工作;         匿名块在每一次创建本 ...

  2. 查看was中项目类的加载顺序

    https://blog.csdn.net/zhouyong0/article/details/7970557 查看was中项目类的加载顺序

  3. Spring:@AutoConfigurexxx注解-控制配置类的加载顺序

    1.美图 2.概述 控制配置类的加载顺序(@AutoConfigureAfter.@AutoConfigureBefore.@AutoConfigureOrder) AutoConfigureAfte ...

  4. java 类的加载顺序

    类的加载顺序 public class ClassA {public static ClassA classa = new ClassA();static{System.out.println(&qu ...

  5. Java内部类以及类的加载顺序(一)

    java内部类以及类的加载顺序(一) Java 类中不仅可以定义变量和方法,还可以定义类,这样定义在类内部的类就被称为内部类.根据定义的方式不同,内部类分为四大类静态内部类,成员内部类,局部内部类,匿 ...

  6. 类的加载顺序和对象的实例化

    直接就在JDK8中用代码来验证吧. import lombok.extern.slf4j.Slf4j;@Slf4j public class Printer {private String s;pub ...

  7. java类验证和装载顺序_Java类的加载顺序

    1.有继承关系的加载顺序 关于关键字static,大家 都知道它是静态的,相当于一个全局变量,也就是这个属性或者方法是可以通过类来访问,当class文件被加载进内存,开始初始化的时候,被static修 ...

  8. java类的加载顺序题目_Java 类的加载顺序(题)

    引例 public class A extends B { public int a = 100; public A() { super(); System.out.println(a); a = 2 ...

  9. Java类的加载顺序

    一.知识 静态: (1) 父类静态成员和静态代码块 (2) 子类静态成员和静态代码块 非静态: (3) 父类非静态成员和非静态代码块 (4) 父类构造函数 (5) 子类 非静态成员和非静态代码块 (6 ...

最新文章

  1. 第三课.运算符与表达式
  2. Apache与nginx的优缺点对比
  3. java数组类型转换_java数据类型转换和数组总结
  4. 如何在ubuntu下安装source insight
  5. spring的PathMatchingResourcePatternResolver基于ant通配符匹配路径遍历项目所有xml文件
  6. java生成16位随机数_java中如何产生一个16位数字组成的随机字符串?谢谢各位了...
  7. 很全的路由器默认初始密码集合.txt_UpSet——集合关系可视化神器
  8. hive复合数据类型之struct
  9. java web html5区别_html5和html有什么区别啊?
  10. sql server权限_保护SQL Server审核的访问权限
  11. swift瀑布流实现_蘑菇街PC首页瀑布流实践
  12. python部署到linux打开ie_Linux上部署python+selenium+webdriver常见问题解决方案
  13. 阿铭Linux_网站维护学习笔记201903022
  14. 还想打马赛克掩盖身份?人工智能让你告别打码时代
  15. Python numpy.ones函数方法的使用
  16. 基于边缘检测和透视变换的文档图像校正
  17. ARM和NEON指令
  18. 美团 YOLOv6 ORT/MNN/TNN/NCNN C++推理部署
  19. 基于javaweb的医院分诊挂号住院管理系统(java+springboot+freemarker+mysql)
  20. opencv 的 ROI 和 COI

热门文章

  1. 深度学习基础(基础知识0)
  2. 微信小程序手机号快速填写及会员卡开卡组件开放
  3. 原型设计应当掌握的四个设计思维:初始、常态、边界、错误
  4. iOS-推送通知详解
  5. 泛型与继承的关系,通配符
  6. 数据结构上机实践第八周项目1- 建立顺序串的算法库
  7. 连接超时_记一次网络请求连接超时的事故
  8. 用集合return多个值_Laravel + Nestedset 扩展:嵌套集合模型实现无限级分类
  9. pytorch安装换源ubuntu_PyTorch入门之PyTorch的安装
  10. brother标签打印软件_标签打印软件如何调整字体高度