zoukankan      html  css  js  c++  java
  • 2020.10.7(动手动脑)

    (1).

     原因:如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。

    (2).

     1 public class InitializeBlockClass {
     2     {
     3         field=200;
     4     }
     5     public int field=100;
     6     public  InitializeBlockClass(int value) {
     7         this.field=value;
     8     }
     9     public  InitializeBlockClass() {
    10         
    11     }
    12     public static void main(String[] args) {
    13     InitializeBlockClass obj=new InitializeBlockClass();
    14     System.out.println(obj.field);
    15     obj=new  InitializeBlockClass(300);
    16     System.out.println(obj.field);
    17     }
    18 }

    类的初始化块,可以在类中使用“{”和“}”将语句包围起来,直接将其作为类的成员。类的这种“没有名字”的“成员”,多用于初始化类的字段。

    public int field=100;  在定义时进行初始化,此时field = 100;System.out.println(obj.field); 输出field的值100。

    obj=new InitializeBlockClass(300);System.out.println(obj.field);利用构造方法进行初始化,field的值初始化为300,输出300。

    规律:

    1.执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。

    2.执行类的构造函数。。

    (3).

     1 class Root
     2 {
     3     static
     4     {
     5         System.out.println("Root的静态初始化块");
     6     }
     7     {
     8         System.out.println("Root的普通初始化块");
     9     }
    10     public Root()
    11     {
    12         System.out.println("Root的无参数的构造器");
    13     }
    14 }
    15 class Mid extends Root
    16 {
    17     static
    18     {
    19         System.out.println("Mid的静态初始化块");
    20     }
    21     {
    22         System.out.println("Mid的普通初始化块");
    23     }
    24     public Mid()
    25     {
    26         System.out.println("Mid的无参数的构造器");
    27     }
    28     public Mid(String msg)
    29     {
    30         //通过this调用同一类中重载的构造器
    31         this();
    32         System.out.println("Mid的带参数构造器,其参数值:" + msg);
    33     }
    34 }
    35 class Leaf extends Mid
    36 {
    37     static
    38     {
    39         System.out.println("Leaf的静态初始化块");
    40     }
    41     {
    42         System.out.println("Leaf的普通初始化块");
    43     }    
    44     public Leaf()
    45     {
    46         //通过super调用父类中有一个字符串参数的构造器
    47         super("Java初始化顺序演示");
    48         System.out.println("执行Leaf的构造器");
    49     }
    50 
    51 }
    52 
    53 public class TestStaticInitializeBlock
    54 {
    55     public static void main(String[] args) 
    56     {
    57         new Leaf();
    58         
    59 
    60     }
    61 }

     总结:

    所有的静态初始化块都优先执行,其次才是非静态的初始化块和构造函数,它们的执行顺序是:父类的静态初始化块>子类的静态初始化块>父类的初始化块>父类的构造函数>子类的初始化块>子类的构造函数.

    静态初始化块只执行一次。

    创建子类型的对象时,也会导致父类型的静态初始化块的执行

    (4).

     1 public class staticplay {
     2     public static void play(staticplay s1) {
     3         System.out.println("静态方法");
     4         s1.play1();
     5         System.out.println("静态方法");
     6     }
     7   public void play1() {
     8       System.out.println("动态方法");
     9   }
    10   public static void main(String[] args) {
    11       staticplay s=new staticplay();
    12       play(s);
    13 }
    14 }

  • 相关阅读:
    [Oracle]Oracle的闪回归档
    【zabbix】snmp监控linux主机
    XFS文件系统
    PostgreSQL的使用向导
    PostgreSQL 12 YUM安装
    011.MySQL双主多从+Keepalived配置
    010.MySQL-Keepalived搭配脚本04
    009.MySQL-Keepalived搭配脚本03
    008.MySQL-Keepalived搭配脚本02
    007.MySQL-Keepalived搭配脚本01
  • 原文地址:https://www.cnblogs.com/Nojava/p/13779364.html
Copyright © 2011-2022 走看看