知识大全 Java 类中类属性和对象属性的初始化顺序

Posted 变量

篇首语:知道如何活用知识最重要,知道知识的来龙去脉次之,拥有知识再次之。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java 类中类属性和对象属性的初始化顺序相关的知识,希望对你有一定的参考价值。

Java 类中类属性和对象属性的初始化顺序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Java 类中类属性 (static 变量) 和对象属性 (非 static 变量) 的初始化顺序可以用如下程序测试     /**  * @(#) Test java  * @author fancy  */    public class Test     static String a = string a ;  static String b;    String c = stirng c ;  String d;    static   printStatic( before static );  b = string b ;  printStatic( after static );      public static void printStatic(String title)   System out println( + title + );  System out println( a = \\ + a + \\ );  System out println( b = \\ + b + \\ );      public Test()   print( before constructor );  d = string d ;  print( after constructor );      public void print(String title)   System out println( + title + );  System out println( a = \\ + a + \\ );  System out println( b = \\ + b + \\ );  System out println( c = \\ + c + \\ );  System out println( d = \\ + d + \\ );      public static void main(String[] args)   new Test();          首先 我把 main() 方法注释掉 运行结果如下      before static   a = string a   b = null    after static   a = string a   b = string b   java lang NoSuchMethodError: main  Exception in thread main   Process pleted     然后 取消对 main() 方法的注释 运行结果如下      before static   a = string a   b = null    after static   a = string a   b = string b    before constructor   a = string a   b = string b   c = stirng c   d = null    after constructor   a = string a   b = string b   c = stirng c   d = string d     由此可以看出 Java 类属性和对象属性的初始化顺序如下     ① 类属性 (静态变量) 定义时的初始化 如上例的 static String a = string a ;  ② static 块中的初始化代码 如上例 static 中的 b = string b ;  ③ 对象属性 (非静态变量) 定义时的初始化 如上例的 String c = stirng c ;  ④ 构造方法 (函数) 中的初始化代码 如上例构造方法中的 d = string d ;    在此过程中 ② 和 ③ 的顺序无所确定 因为在静态块中无法打印出非静态变量 同样是因为这个原因 知道他们的顺序对我们写程序也毫无帮助 再因为类成员 (静态成员) 是在第一次使用到类的时候就进行了相应的初始化 而对象成员 (非静态成员) 则需要生成类实例 (即对象) 时才能初始化 所以我把 ③ 排在了 ② 的后面 再申明一次 它们究竟谁先谁后 从代码上是不能确定的 恐怕需要去研究一下 JVM (Java 虚拟机) 的执行过程才行       以下是一些回帖的讨论   我对狂人教程 对象成员 (非静态成员) 则需要生成类实例 (即对象) 时才能初始化 有些看法!例如你在例程中定义的两个对象成员变量String c = stirng c ;  String d;我认为当程序执行这个Test类的时候 成员变量(不包括构造函数)和类成员变量一样 都要装载到内存 这样对象成员变量就可以被构造函数所调用 但是究竟静态变量和非静态变量哪个先执行可以看在代码中的先后顺序 但是这对于编写代码来说并没有多大的用处!    static    printStatic( before static );  b = string b ;  printStatic( after static );  在类别第一次使用而载入时执行 且只执行一次    caterpillar cha138/Article/program/Java/hx/201311/26404

相关参考

知识大全 Java中对象按照属性排序

Java中对象按照属性排序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  项目中经常需要用到比如

知识大全 在aspx页面中事件的执行顺序[1]

   一详细版  初始化  当页面被提交请求第一个方法永远是构造函数您可以在构造函数里面初始一些自定义属性或对象不过这时候因为页面还没有被完全初始化所以多少会有些限制特别地您需要使用Http

知识大全 面向对象思想之 -- 继承以及多态

  在OOP简介:理解类和对象这篇文章中我们讨论了继承和多态性的好处我们还粗略的学习了如何扩展基类定义子类继承基类中合适的行为和属性而重载那些并不适合的行为和属性这种方式能够削减代码宏余以及错误的堆积

知识大全 面向对象思想之 -- 限制对象属性的访问

  虽然Java只支持从一个父类继承但它使用接口的方式支持多重继承  接口实现了多态使得我们能够给与对象不同特性以满足不同的需要  你可以使用多态机制让完成相似功能的不同的方法拥有相同的名字但是拥有不

知识大全 Java反射设置私有属性和获取属性

Java反射设置私有属性和获取属性  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java代码 

知识大全 javascript检测对象中是否存在某个属性判断方法

  检测对象中属性的存在与否可以通过几种方法来判断  使用in关键字  该方法可以判断对象的自有属性和继承来的属性是否存在  代码如下:  varo=x:;  "x"ino;//true自有属性存在 

知识大全 浅析JSP开发中的对象和范围属性

浅析JSP开发中的对象和范围属性  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!在JSP页面中的对象

知识大全 java内省机制

  内省是Java语言对Bean类属性事件的一种处理方法(也就是说给定一个javabean对象我们就可以得到/调用它的所有的get/set方法)  例如类A中有属性name那我们可以通过getName

类比推理,是指根据不同对象有部分属性相同,从而推出它们的其他属性也相同的推理。根据上述定义,下列不属于类比推理的是:__

类比推理,是指根据不同对象有部分属性相同,从而推出它们的其他属性也相同的推理。根据上述定义,下列不属于类比推理的是:_____A、声和光有不少属性相同,如都可直线传播,都有反射、折射和干扰等现象,由此

知识大全 详解JavaScript对象属性应用

详解JavaScript对象属性应用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  docume