[java]JAVA中的域,静态域,实例域

2,959 阅读3分钟

java中的域

,英文文档中为field, 也就是我们常说的字段、属性。

比如类的字段(属性),局部的,全局的。所谓域,其实是“field”的翻译

java中的域分为两类:静态域(一个类中只有一个这样的域)、实例域(每一个对象对于所有的实例域都有自己的一份拷贝) 首先我们举例、认识一下域:

public class InitialOrderTest {               
    // 静态变量          
    public static String staticField = "静态变量";          
    // 变量          
    public String field = "变量";                  
    // 静态初始化块        
    static {          
        System.out.println(staticField);  
        System.out.println("静态初始化块");  
    }                  
    // 初始化块              
    {          
        System.out.println(field);  
        System.out.println("初始化块");        
    }                  
    // 构造器          
    public InitialOrderTest() {  
        System.out.println("构造器");     
    }                  
    public static void main(String[] args) {  
        new InitialOrderTest();              
    }          
}

其中

静态变量、静态初始化块是静态域

变量、初始化块是实例域

还有就是构造器

静态域

Java 中被static 修饰的域或方法常被称作静态的。

如果将域定义为static,那么每个类中只有一个这样的域。

实例域

每一个对象对于所有的实例域却都有自己的一份拷贝。例如,假定需要给每一个学生赋予唯一的学号。

这里给student类添加一个实例域id和一个静态域classld:

class Student

 {
     private int id;
     private static int clsssId=001;
 } 

这样,对于每一个Student类的具体对象,都有一个自己的id域,,但这个类的所有实例将共享一

个classid域,换句话说,如果有1000个Student类的对象,则有1000个实例域id,但是只有一个

静态域classid,即使没有一个雇员对象,静态域classId也存在,他属于类,而不属于任何独立的对象。

域的初始化

初始化域即给域赋值有以下几种方式:

      1)、赋予默认赋值
      2)、声明变量时同时赋值
      3)、块赋值(实例块和静态块)
      4)、构造器赋值

如果同时存在以上几种赋值方式,那么域的最终值会是哪个呢?这里就涉及到域的初始化顺序的问题

域的初始化分为两种情况     
一种是在建立对象即进行类的实例化时域的初始化;
另一种是在不建立对象,只装载类的时候域的初始化。

一、构建对象时域的初始化

构建对象,就是用new class()语句建立一个新的类的对象。在这种情况下,类中的域是按照如下顺序进 行初始化的:

赋予默认值-->(静态域、静态块)-->(实例域、实例块)-->构造器。

举例:假设一个域即变量int a,当建立对象时,首先赋予它一个默认值,int类型的默认值为0;如果a为静态域并且在静态块中被赋值,那么就按照静态域和静态块在程序中出现的顺序先后执行;如果同时还在实例块中被赋值,则再执行实例块中的赋值语句(静态域不可能再是实例域);最后执行构造器中的赋值语句(如果在构造器中有被赋值的话)。如果变量a是实例域,则不会有静态域和在静态块中赋值(不能在静态块中给实例域赋值)的情况,其他同前所述。

二、装载类时域的初始化化

有两种情况是只装载类而不实例化类:
一是用java classname执行程序时;
二是用classname.statement调用类的静态域或静态方法时。

装载类时这个类并没有被实例化,也就不能形成对象,所以不能对实例域进行初始化。因此只有静态域、静态块才能被初始化执行,执行规则同构建对象时的规则。