185页练习19 --P185E19

来源:互联网 发布:电子文档管理系统 php 编辑:程序博客网 时间:2024/05/17 23:04
/** * 练习19,难度2.  * 创建一个类, 类中有一个blank final指针, 该指针指向一个对象, * 在所有的constructor中执行black final的初始化. * 说明blank final在使用前, 必须初始化, 而一旦初始化, 该blank final成员就不能改变. * Exercise 19: (2) Create a class with a blank final reference to an object.  * Perform the initialization of the blank final inside all constructors.  * Demonstrate the guarantee that the final must be initialized before use,  * and that it cannot be changed once initialized. */package reusing;class P185{public String name;P185(String s){name=s;}public String getName(){return name;}}public class P185E19 {final P185 x;P185E19(int i){System.out.println("Constructor of P185E19.");//!System.out.println(x.name); //初始化之前不能使用System.out.println("x will be initialized.");//如果没有下面这行, compiler会报错://The blank final field x may not have been initialized.x=new P185("I'm x, an object of P185, i'm initialized.");//x初始化之后就可以用了.System.out.println(x.name);//因为x是final, 所以下面更改x reference的语句不能执行, 如果去掉final, 就可以了//!x=new P185("Hello.");}public static void main(String[] args) {// TODO Auto-generated method stubP185E19 y=new P185E19(1);//!System.out.println(x.name); //这里的x和y.x是不一样的, 这里的x是一个局部变量//!System.out.println(this.x.name); //this是类的指针, 不可能和特定的x的指针挂钩System.out.println(y.x.name); //这样才可以}}
改进版:
/** * 练习19,难度2.  * 创建一个类, 类中有一个blank final指针, 该指针指向一个对象, * 在所有的constructor中执行black final的初始化. * 说明blank final在使用前, 必须初始化, 而一旦初始化, 该blank final成员就不能改变. * Exercise 19: (2) Create a class with a blank final reference to an object.  * Perform the initialization of the blank final inside all constructors.  * Demonstrate the guarantee that the final must be initialized before use,  * and that it cannot be changed once initialized. */package reusing;class P185{public String name;P185(String s){name=s;}public String getName(){return name;}}public class P185E19 {final P185 x;//P185 x;P185E19(int i){System.out.println("Constructor of P185E19.");//!System.out.println(x.name); //初始化之前不能使用System.out.println("x will be initialized.");//如果没有下面这行, compiler会报错://The blank final field x may not have been initialized.x=new P185("I'm x, an object of P185, i'm initialized.");//x初始化之后就可以用了.System.out.println(x.name);//因为x是final, 所以下面更改x reference的语句不能执行, 如果去掉final, 就可以了//!x=new P185("Hello.");}public static void main(String[] args) {// TODO Auto-generated method stubP185E19 y=new P185E19(1);//!System.out.println(x.name); //这里的x和y.x是不一样的, 这里的x是一个局部变量//!System.out.println(this.x.name); //this是类的指针, 不可能和特定的x的指针挂钩System.out.println(y.x.name); //这样才可以//看看在这里能否改变final x的reference的值, 显然不能. 但如果把x前面的final去掉, 就可以啦.//! y.x=new P185("hello. i'm changed.");}}



原创粉丝点击