zoukankan      html  css  js  c++  java
  • JAVA字段的初始化规律

    JAVA字段的初始化规律

    1.类的构造方法

    (1)“构造方法”,也称为“构造函数”,当创建一个对象时,它的构造方法会被自动调用。构造方法与类名相同,没有返回值。

    (2)如果类没有定义构造函数,Java编译器在编译时会自动给它提供一个没有参数的“默认构造方法”。如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法。

    例如:

    public class Test{

      public static void main(String[] args){

        Foo obj1=new Foo();          //Foo obj1=new Foo(2);

      }

    }

    class Foo{

      int value;                       //static int value;

      public Foo(int initValue){

        value=initValue;

      }

    }

    该程序是无法运行的,修改成后面语句将可以运行。

    (3)同一个类可以有多个构造函数,多个构造函数之间通过参数来区分.这是方法重载的一个实例。

    构造函数之间可以相互调用。

    例如:

    public class Test{

      public static void main(String[] args){

        Foo obj1=new Foo();

        System.out.println(Foo.grams);

        Foo obj2=new Foo(5);

        System.out.println(Foo.grams);

      }

    }

    class Foo {

      static int grams;

      Foo() {

        this(55);

      }

      Foo(int g){

        grams=g;

      }

    }

    程序的运行结果为:

    55

    5

    2.类的初始化块

    (1)可以在类中使用“{”和“}”将语句包围起来,直接将其作为类的成员。

    类的这种“没有名字”的“成员”,多用于初始化类的字段。

    public class Test {

      public int value=200;

      {

        value=100;

      }

    }

    3.

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

    执行类的构造函数

    类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码”。

    例如:

    public class Test{

      public static void main(String[] args){

        Foo obj1=new Foo();

        System.out.println(Foo.grams);

        obj1=new Foo(5);

        System.out.println(Foo.grams);

      }

    }

    class Foo {

      {

        grams=100;

      } public static int grams=50;

      public Foo(int g){

        grams=g;

      }

      public Foo() {}

    }

    结果为:

    100

    5

    但当public static int grams=50;语句在 {grams=100;}之前时结果则为:

    50

    5

    4.继承关系中的初始化

    例如:

    class B

    {

      public static int data=100;

      static

      {System.out.println("B初始化 data="+data);} 

    }

    class A extends B

    {

      public static int data=50;

      static

      {System.out.println("A初始化 data="+data);}

    }

    public class Test

    {

      public static void main(String[] args) 

      {

        new A();

      }

    }

    运行结果为:

    B初始化 data=100

    A初始化 data=50

  • 相关阅读:
    [C#] 等待启动的进程执行完毕
    C# 、winform 添加皮肤后(IrisSkin2) label设置的颜色 无法显示
    Mysql 备份
    Mysql 慢查询日志配置
    Mysql 忘记密码处理配置
    PHP-FPM 慢执行日志、网站隔离配置
    PHP-FPM 设置多pool、配置文件重写
    Nginx 代理配置
    Nginx 301与302配置
    Nginx URL跳转
  • 原文地址:https://www.cnblogs.com/amiee/p/4887362.html
Copyright © 2011-2022 走看看