zoukankan      html  css  js  c++  java
  • static语句块、普通语句块和构造函数

          最近忙着投简历找工作,当然得为笔试面试准备一下,把以前学习时欠下的帐补回来。因为当初学Java、Jsp、J2EE课程时都是会用了能做出东西来就行的心态,没有做过笔记,现在很多基础的东西都忘了,哎。从今往后,尽可能把学过的东西都整理成博客,方便复习总结。

         记得以前笔试时有一题是问Java的类初始化时static语句块和构造函数的执行顺序和次数的,当时答对了但是心里拿不准,今天查查资料顺便写个小例子巩固一下。

     1 public class Test1 {
     2     public static int X=100;  
     3     public final static int Y=200;
     4     public Test1(){  
     5         System.out.println("Test构造函数执行");  
     6     }  
     7     static{  
     8         System.out.println("static语句块执行");  
     9     }  
    10     
    11     {
    12         System.out.println("not static 语句块执行");
    13     }
    14     
    15     public static void display(){  
    16         System.out.println("静态方法被执行");  
    17     }  
    18     public void display_1(){  
    19         System.out.println("实例方法被执行");  
    20     }  
    21     
    22     public static void main(String [] args){
    23         Test1.display();
    24         System.out.println("x=" + Test1.X + "   y=" + Test1.Y );
    25         Test1.display();
    26         Test1 t1 = new Test1();
    27         Test1 t2 = new Test1();
    28         System.out.println("X=" + t1.X + "   Y=" + t1.Y);
    29         Test1.display();
    30     }
    31 }

    运行结果

    static语句块执行
    静态方法被执行
    x=100   y=200
    静态方法被执行
    not static 语句块执行
    Test构造函数执行
    not static 语句块执行
    Test构造函数执行
    X=100   Y=200
    静态方法被执行

         可以看出static代码块是在类加载时自动执行的且只执行一次,非静态代码块在创建对象自动执行的代码,不创建对象不执行该类的非静态代码块。 顺序为 静态代码块--》非静态代码块--》类构造方法。第一次创建类实例、调用静态方法、访问静态变量或使用用Class.forName()显示加载类的时候都会执行static语句块。另外有多个static语句块时按顺序执行。

    如在第一个static语句块之后再添加一个static语句块

     static{  
            System.out.println("static语句块执行");  
        }  
        
        static{  
            System.out.println("static222语句块执行");  
        } 
    

      则运行结果为

    static语句块执行
    static222语句块执行
    静态方法被执行
    x=100   y=200
    

      

  • 相关阅读:
    [Swift-2019力扣杯春季初赛]2. 校园自行车分配
    php 遇到报错 Call to a member function fetch_object()
    Proactive Patching Overview
    PHP 官方说明
    SecureCRT 迁移到新环境,导出配置文件目录 转
    ORA-00020: maximum number of processes (300) exceeded
    转 SQL*PLUS中的替换变量(& &&)
    转 DOS(CMD)下批处理换行问题/命令行参数换行 arg ms-dos
    php 报错如下:Notice: Trying to get property of non-object
    mysqli 进一步分析
  • 原文地址:https://www.cnblogs.com/waimai/p/2945841.html
Copyright © 2011-2022 走看看