首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java object Initialization (class Instantiation) | 对象的初始化(即种的实例化)

2012-12-19 
Javaobject Initialization (class Instantiation)|对象的初始化(即类的实例化)类实例即对象。对象的初始化

Java object Initialization (class Instantiation) | 对象的初始化(即类的实例化)
     
类实例即对象。对象的初始化过程也就是类的实例化过程。

inside JVM作者Bill Venners关于对象初始化的文章很棒:
Object Initialization in Java:
http://www.artima.com/designtechniques/initializationP.html


一些名词概念:
Class Instance Creation Expressions:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.9
用来创建类实例对象。
格式简单表述: new nameOfClass(argument list)
Explicit Constructor Invocations:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.8.7.1Instance Initializers
http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.6
即实例初始化块(Instance Initialization Blocks)、非静态初始化块(Non-static Initialization Blocks)。
实例初始化块中不能有return语句。 Srcs:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.8
http://docs.oracle.com/javase/tutorial/java/javaOO/constructors.html



this & super:
this
表示当前对象的引用,只能用在实例初始化块(Instance Initializer)、非静态方法(instance method)和构造方法中。有两个用途:
this.的方式,访问当前对象的成员members(static fields/non-static fiels/class method/instance method)。一个常见的使用场景是:当实例方法(或构造方法)参数与实例变量同名,造成实例变量被遮蔽时,实例方法对实例变量的访问必须通过 this.

public class ObjectInitializeTest {public static void main(String[] args) throws Exception {Parent p = new Parent();System.out.println();Child c = new Child();System.out.println();//InitialBlockTest  cc = new InitialBlockTest();  //StackOverflowError}}class Parent {   {System.out.println("Parent Instance Initializers 1");}    static {        System.out.println("Parent Static Initializers 1");        }        {System.out.println("Parent Instance Initializers 2");}    static {        System.out.println("Parent Static Initializers 2");        }        public Parent(){            System.out.println("Parent 0-argument constructor");        }}        class Child extends Parent {int i;{System.out.println("Child Instance Initializers 1");}    static {        System.out.println("Child Static Initializers 1");        }        {System.out.println("Child Instance Initializers 2");}    static {        System.out.println("Child Static Initializers 2");        }    Child() {this(1);System.out.println("Child 0-argument Constructor");}Child(int i) {this(10, i);System.out.println("Child 1-argument Constructor");}Child(int i, int j) {this.i = 1;System.out.println("Child 2-argument Constructor");}Child(String s) {i = 2;}}//StackOverflowErrorclass InitialBlockTest {{System.out.println("InitialBlockTest - Non-static Instance Initializers ");new InitialBlockTest();}static {System.out.println("InitialBlockTest - Static Initializers ");}InitialBlockTest() {System.out.println("InitialBlockTest - Constructor");}}
输出:引用Parent Static Initializers 1
Parent Static Initializers 2
Parent Instance Initializers 1
Parent Instance Initializers 2
Parent 0-argument constructor

Child Static Initializers 1
Child Static Initializers 2
Parent Instance Initializers 1
Parent Instance Initializers 2
Parent 0-argument constructor
Child Instance Initializers 1
Child Instance Initializers 2
Child 2-argument Constructor
Child 1-argument Constructor
Child 0-argument Constructor




Sources:
JLS 12.5. Creation of New Class Instances:
http://docs.oracle.com/javase/specs/jls/se7/html/jls-12.html#jls-12.5
Java Tutorials - Creating Objects:
http://docs.oracle.com/javase/tutorial/java/javaOO/objectcreation.html

热点排行