zoukankan      html  css  js  c++  java
  • 静态代码块执行顺序

     1 /*
     2     栈:方法只要执行,会压栈。(局部变量)
     3     堆:new出来的对象都在堆中。垃圾回收器主要针对。(实例变量)
     4     方法区:类的信息,字节码信息,代码片段。(静态变量)
     5 
     6     方法的代码片段放在方法区,但是方法执行过程当中需要的内存在栈中。
     7 */
     8 public class StaticTest07{
     9     
    10     // 静态变量在什么时候初始化?类加载时初始化。
    11     // 静态变量存储在哪里?方法区
    12     static int i = 100;
    13 
    14     // 静态代码块什么时候执行?类加载时执行。
    15     static {
    16         // 这里可以访问i吗?
    17         System.out.println("i = " + i);
    18     }
    19 
    20     // 实例变量
    21     int k = 111; // k变量是实例变量,在构造方法执行时内存空间才会开辟。
    22 
    23     static {
    24         //k变量可以访问吗?
    25         // static静态代码块在类加载时执行,并且只执行一次。
    26         // 类加载时,k变量空间还没有开辟出来呢。
    27         //错误: 无法从静态上下文中引用非静态 变量 k
    28         //System.out.println("k = " + k);
    29 
    30         // 这里可以访问name吗?
    31         //错误: 非法前向引用
    32         // 静态代码块和静态变量都在类加载的时候执行,时间相同,只能靠代码的顺序来决定谁先谁后。
    33         //System.out.println("name = " + name);
    34     }
    35 
    36     // 静态变量在静态代码块下面。
    37     static String name = "zhangsan";
    38 
    39 
    40     //入口(main方法执行之前实际上执行了很多代码)
    41     public static void main(String[] args){
    42         System.out.println("main begin");
    43         System.out.println("main over");
    44     }
    45 }
    46 
    47 /*
    48 总结:
    49     到目前为止,你遇到的所有java程序,有顺序要求的是哪些?
    50         第一:对于一个方法来说,方法体中的代码是有顺序的,遵循自上而下的顺序执行。
    51         第二:静态代码块1和静态代码块2是有先后顺序的。
    52         第三:静态代码块和静态变量是有先后顺序的。
    53 */
  • 相关阅读:
    yum报错Python版本不兼容
    MySQL——checkpoint
    MySQL体系结构——内存
    MySQL体系结构——存储引擎
    ORA-00972: identifier is too long 问题处理
    day08面向对象、jsonpath操作、写日志
    day07mock edis加密
    数据库增删改查封装
    day06数据库、发送邮件、操作excel等
    pycharm的使用
  • 原文地址:https://www.cnblogs.com/HeSC980513/p/13153167.html
Copyright © 2011-2022 走看看