欢迎来到代码驿站!

JAVA代码

当前位置:首页 > 软件编程 > JAVA代码

Java类变量和成员变量初始化过程的应用介绍

时间:2020-10-15 23:18:02|栏目:JAVA代码|点击:

一、类的初始化

对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量。

类的编译决定了类的初始化过程。

编译器生成的class文件主要对定义在源文件中的类进行了如下的更改:

1)       先按照静态成员变量的定义顺序在类内部声明成员变量。

2)       再按照原java类中对成员变量的初始化顺序进行初始化。

一个java类和编译后的class对应的转换如下:

源文件:

复制代码 代码如下:

public class Person{
  public static String name="张三";
  public static int age;
  static{
       age=20;
    System.out.println("初始化age");
  }
  public static String address;
  static{
    address="北京市";
    age=34;
  }
  public static void main(String[] args) {
                   System.out.println(name);
                   System.out.println(age);
                   System.out.println(address);
         }
}

当java源代码转换成一个class文件后,其转换成类似下面的代码:
复制代码 代码如下:

public class Person{
  public static String name;
  public static int age;
  public static String address;
  static{
    name="张三";
    age=20;
    System.out.println("初始化age");
    address="北京市";
    age=34;
  }
  public static void main(String[] args) {
                   System.out.println(name);
                   System.out.println(age);
                   System.out.println(address);
         }
}

初始化顺序依据转换后对应的class类成员变量的初始化顺序依次执行,所以所有的静态成员变量都是先声明,后执行赋值的,而且赋值的顺序也是依照源代码对静态成员变量初始化的顺序进行的,注意:定义一个成员变量并直接初始化与在静态代码块中进行初始化是等价的,都是依据它们在源代码中定义的顺序进行的。


二、对象的生成

对于对象的生成其初始化过程与类的初始化过程类似,但会增加构造函数阶段,源代码如下:

复制代码 代码如下:

public class Person{
   {
     name="李四";
     age=56;
     System.out.println("初始化age");
     address="上海";
   }
   public String name="张三";
   public int age=29;
   public String address="北京市";
   public Person(){
     name="赵六";
     age=23;
     address="上海市";
   }
 }

编译器转换成class文件后,会转换成类似下面的代码:
复制代码 代码如下:

public class Person{
   public String name;
   public int age;
   public String address;
   public Person(){
     name="李四";
     age=56;
     System.out.println("初始化age");
     address="上海";
     name="张三";
     age=29;
     address="北京市";
     name="赵六";
     age=23;
     address="上海市";
   }
 }

可以看到,对于类中对成员变量的初始化和代码块中的代码全部都挪到了构造函数中,并且是按照java源文件的初始化顺序依次对成员变量进行初始化的,而原构造函数中的代码则移到了构造函数的最后执行。本人以前一直对类初始化过程一直没有一个深刻的理解,就是搞不清到底是怎么初始化的,只能按照书上所说的记住了初始化顺序,但是过一段时间有给忘了,所以这次总算给弄清楚了,还是按照一个模型来解释初始化机制比较好啊,不用再背了,只有理解了才能不易忘

上一篇:java使用jdbc链接Oracle示例类分享

栏    目:JAVA代码

下一篇:java ThreadPoolExecutor使用方法简单介绍

本文标题:Java类变量和成员变量初始化过程的应用介绍

本文地址:http://www.codeinn.net/misctech/11949.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有