zoukankan      html  css  js  c++  java
  • Java语言中普通代码块,静态代码块,构造代码块,构造方法的区别

    静态代码块,构造代码块,构造方法的区别

    1.普通代码块:在方法或语句中出现的{}就称为普通代码块。普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出现先执行”

    普通代码块的结构:

    { 普通代码块 } 

    2.静态代码块:

    (1)静态代码块:在java中使用static关键字声明的代码块。静态块用于初始化类,为类的属性初始化。每个静态代码块只会执行一次。由于JVM在加载类时会执行静态代码块,所以静态代码块先于主方法执行。

    (2)如果类中包含多个静态代码块,那么将按照"先定义的代码先执行,后定义的代码后执行"。

    (3)注意:1 静态代码块不能存在于任何方法体内。2 静态代码块不能直接访问静态实例变量和实例方法,需要通过类的实例对象来访问。

    静态代码块的结构:

    static { 
    静态语句代码块 

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

    构造代码块的结构:

    { 构造代码块 } 

    4.构造方法:它是一个与类同名且返回值类型为同名类类型的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化(Java提供了为类的成员变量赋初值的专门方法)

    当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。

     1 /*
     2  * 首先加载Demo类文件,执行Demo类中的static代码块;执行main函数中的new ClassB(),因为继承ClassA,
     3  * 加载ClassA,执行ClassA中的static代码块->加载ClassB,执行ClassB中的static代码块;
     4  * 执行classA的构造代码块->执行classA的构造函数->执行classB的构造代码块->执行classB的构造函数
     5 */
     6 public class Demo {
     7     /*
     8      * 第二步(运行main函数),先运行父类中的函数(先运行父类中的静态代码块,
     9      * 然后运行子类中的静态代码块,然后依次运行父类中的构造代码块和父类中的构造函数,
    10      * 最后依次运行子类中的构造代码块和构造函数)
    11      */
    12     public static class ClassA {
    13         //
    14         public ClassA() {
    15             System.out.println("ClassA");
    16         }
    17         //
    18         static  {
    19             System.out.println("static A class");
    20         }
    21         //
    22         {
    23             System.out.println("A class");
    24         }
    25     } 
    26     //子类
    27     public static class ClassB  extends ClassA {
    28         public ClassB() {
    29             super();
    30             System.out.println("ClassB");
    31         }
    32         //
    33         static {
    34             System.out.println("static B class");
    35         }
    36         //
    37         {
    38             System.out.println("B class");
    39         }
    40         //
    41         public void print() {
    42             System.out.println("B print");
    43         }
    44     }
    45     //第二步运行main函数
    46     public static void main(String []args) {
    47         new ClassB();
    48     }
    49     //第一步运行Demo类中的静态代码块
    50     static  {
    51         System.out.println("static Demo class");
    52     }
    53     //Demo类中的构造代码块不运行
    54     {
    55         System.out.println("Demo class");
    56     }
    57 
    58 }

    结果为:

    运行顺序为:

    父类--静态代码块
    子类--静态代码块
    父类--非静态代码块
    父类--构造函数
    子类--非静态代码块
    子类--构造函数

    注释:Demo类的构造代码块之所以没有执行是因为-----构造代码块在创建对象时才会执行,静态代码块,类初始化便执行,静态方法在调用时执行

  • 相关阅读:
    第五周上机作业
    第四周练习
    第八周上机练习
    第七周作业
    第七周上机练习
    第六周作业
    第六周上机练习
    第五周上机作业
    第四周作业
    第四周上机练习
  • 原文地址:https://www.cnblogs.com/ztz-99a/p/9164463.html
Copyright © 2011-2022 走看看