//执行顺序:(优先级从高到低。)静态代码块>mian方法>构造代码块>构造方法。

其中静态代码块只执行一次。构造代码块在每次创建对象是都会执行。

1 普通代码块

 1 //普通代码块:在方法或语句中出现的{}就称为普通代码块。普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”
2 public class CodeBlock01{
3 public static void main(String[] args){
4
5 {
6 int x=3;
7 System.out.println("1,普通代码块内的变量x="+x);
8 }
9
10 int x=1;
11 System.out.println("主方法内的变量x="+x);
12
13 {
14 int y=7;
15 System.out.println("2,普通代码块内的变量y="+y);
16 }
17 }
18 }
19
20 /*
21 运行结果:
22 1,普通代码块内的变量x=3
23 主方法内的变量x=1
24 2,普通代码块内的变量y=7
25 */
26

2 构造代码块

//构造块:直接在类中定义且没有加static关键字的代码块称为{}构造代码块。构造代码块在创建对象时被调用,每次创建对象都会被调用,并且构造代码块的执行次序优先于类构造函数。

public class CodeBlock02{
{
System.out.println("第一代码块");
} public CodeBlock02(){
System.out.println("构造方法");
} {
System.out.println("第二构造块");
}
public static void main(String[] args){
new CodeBlock02();
new CodeBlock02();
new CodeBlock02(); }
} /*
*
执行结果:
第一代码块
第二构造块
构造方法
第一代码块
第二构造块
构造方法
第一代码块
第二构造块
构造方法
*/

3 静态代码块

//静态代码块:在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。
//如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。
//注意:1 静态代码块不能存在于任何方法体内。2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。 class Code{
{
System.out.println("Code的构造块");
} static{
System.out.println("Code的静态代码块");
} public Code(){
System.out.println("Code的构造方法");
}
} public class CodeBlock03{
{
System.out.println("CodeBlock03的构造块");
} static{
System.out.println("CodeBlock03的静态代码块");
} public CodeBlock03(){
System.out.println("CodeBlock03的构造方法");
} public static void main(String[] args){
System.out.println("CodeBlock03的主方法");
new Code();
new Code();
new CodeBlock03();
new CodeBlock03();
}
}
/*
CodeBlock03的静态代码块
CodeBlock03的主方法
Code的静态代码块
Code的构造块
Code的构造方法
Code的构造块
Code的构造方法
CodeBlock03的构造块
CodeBlock03的构造方法
CodeBlock03的构造块
CodeBlock03的构造方法
*/

源代码:

  1. public class SuperAndSub {
  2. public static void main(String[] args) {
  3. // Super s1 = new Sub();
  4. // Super s2 = new Super();
  5. Sub s3 = new Sub();
  6. }
  7. }
  8. class Super {
  9. static int a = getA();
  10. static {
  11. System.out.println("加载Super的静态块");
  12. }
  13. int b = getB();
  14. {
  15. System.out.println("加载Super的普通块");
  16. }
  17. Super() {
  18. System.out.println("加载Super的构造器");
  19. }
  20. static int getA() {
  21. System.out.println("加载Super的静态变量");
  22. return 1;
  23. }
  24. static int getB() {
  25. System.out.println("加载Super的实例变量");
  26. return 2;
  27. }
  28. }
  29. class Sub extends Super {
  30. static int c = getC();
  31. static {
  32. System.out.println("加载Sub的静态块");
  33. }
  34. int d = getD();
  35. {
  36. System.out.println("加载Sub的普通块");
  37. }
  38. Sub() {
  39. System.out.println("加载Sub的构造器");
  40. }
  41. static int getC() {
  42. System.out.println("加载Sub的静态变量");
  43. return 1;
  44. }
  45. static int getD() {
  46. System.out.println("加载Sub的实例变量");
  47. return 2;
  48. }
  49. }

输出:

    1. 加载Super的静态变量
    2. 加载Super的静态块
    3. 加载Sub的静态变量
    4. 加载Sub的静态块
    5. 加载Super的实例变量
    6. 加载Super的普通块
    7. 加载Super的构造器
    8. 加载Sub的实例变量
    9. 加载Sub的普通块
    10. 加载Sub的构造器

Java类中的各种成员的加载顺序的更多相关文章

  1. Java类中各种静态变量的加载顺序的学习

    最近在补<thinking in java>...有一节提到了加载类需要做的一些准备...我照着书本敲了一下代码...同时稍微修改了一下书本上的代码.... package charpte ...

  2. (转)面试题--JAVA中静态块、静态变量加载顺序详解

    public class Test { //1.第一步,准备加载类 public static void main(String[] args) { new Test(); //4.第四步,new一个 ...

  3. java web.xml listener servlet 和filter加载顺序

    在该项目中总会遇到一些关于加载的优先问题.最近遇到了同样的类别似的,所以,如果你发现信息汇总下,以下是转载其他一些人,毕竟,人们写的不错.它不重复创建的轮.只是略作修改自己的观点. 首先能够肯定的是, ...

  4. tomcat中class和jar的加载顺序(转)

    https://blog.csdn.net/lipei1220/article/details/53924799 加载顺序: 1. $java_home/lib 目录下的java核心api 2. $j ...

  5. 面试题--JAVA中静态块、静态变量加载顺序

    最后给大家一道面试题练练手,要求写出其结果(笔试) public class StaticTest { public static int k = 0; public static StaticTes ...

  6. 详解Java 8中Stream类型的“懒”加载

    在进入正题之前,我们需要先引入Java 8中Stream类型的两个很重要的操作: 中间和终结操作(Intermediate and Terminal Operation) Stream类型有两种类型的 ...

  7. web.xml中servlet, bean, filter, listenr 加载顺序汇总

    最终得出结果:先 listener >> filter >> servlet >> spring 所以,如果过滤器中要使用到 bean,可以将spring 的加载 ...

  8. java类中的static成员变量和static方法简单介绍,持续补充

    一.静态成员变量 1.属于整个类而不是某个对象实例,所以可以直接通过类名和对象名去调用. 2.静态成员属于整个类,当系统第一次使用该类时,就会为其分配内存空间直到该类被卸载才会进行资源回收 二.静态方 ...

  9. java类创建时里面成员执行的先后顺序

    静态代码块在类第一次使用的时候执行一次,在构造函数执行之前执行.只要用到类,哪怕new对象(比如只声明变量)也会被执行,且只执行一次.一般用于对类进行初始化. 先执行静态代码块,静态成员(谁在前就先执 ...

随机推荐

  1. ansible api2.0 多进程执行不同的playbook

    自动化运维工具:ansible 多进程调用ansible api的应用场景:   应用系统检查 一个应用系统可能具有20—50台服务器的集群,初步的系统层面检查可以用一个统一的playbook来检查, ...

  2. js及Java中对于两个时间日期的判断脚本

    JS脚本: function checkDateIsEdited(createDate) { var compareDate = createDate.replace("-",&q ...

  3. Eclipse中创建SpringBoot项目流程,及报错解决方案

    1.下载最新的Eclipse(老版本的有可能不包含springBoot插件),然后在help中打开Eclipse MarketPlace,在Spring Marketplace 中搜索SpringBo ...

  4. 利用CSS 修改input=radio的默认样式(改成选择框)

    html部分: <input id="item2" type="radio" name="item"> <label fo ...

  5. Cpython 支持的线程

    因为Python解释器帮你自动定期进行内存回收,你可以理解为python解释器里有一个独立的线程,每过一段时间它起wake up做一次全局轮询看看哪些内存数据是可以被清空的,此时你自己的程序 里的线程 ...

  6. spring boot快速入门 4: jpa数据库操作 实现增删改查

    spring boot jpa逆向生成表 简单实例: 第一步:pom文件: <?xml version="1.0" encoding="UTF-8"?&g ...

  7. Attribute基本介绍

    一.基础知识点 1.什么是Attribute? MSDN:公共语言运行时允许你添加类似关键字的说明,叫做Attribute,它可以对程序中的元素进行标注,如类型.字段.方法和属性等.Attribute ...

  8. HTTP传输数据压缩

    一.基础 1.HTTP压缩是指: Web服务器和浏览器之间压缩传输的”文本内容“的方法. HTTP采用通用的压缩算法,比如gzip来压缩HTML,Javascript, CSS文件. 能大大减少网络传 ...

  9. 关闭mac自带apache的启动。

    关闭mac自带apache的启动. sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist 如果哪天 ...

  10. MySQL 备份数据库

    一.数据备份 1.备份一个数据库 mysqldump基本语法: mysqldump -u username -p dbname table1 table2 ...-> BackupName.sq ...