Java中的复杂初始化

虽然无聊,还是列出来。

6.1备忘录模式(5.6)中,Memento1的代码

例程 7-2 不变类
package intent.memento;
public final class Memento1{
    private final VirtualState state;//要记忆的状态,
    public Memento1(State state){
        this.state =new VirtualState(state) ;
    }
    State getState(){
        State state = new State(this.state.x,this.state.y);
        return state;
    }

    /**
     * 可以使用深克隆技术。
     */
    class VirtualState{
        private int x;
        private int y ;
        public VirtualState(State state){
            x = state.getX();
            y = state.getY();
        }
    }
}

程序中的VirtualState意在提醒程序员,此时保存的状态不是Originator的成员state同一个对象。

实际上,yqj2065是绝对不会设计一个多余的类滴,还是用State好。

于是,有了对应的代码:

package intent.memento;
public final class Memento2{
    private final State state;//要记忆的状态,
    public Memento2(State state){
        this.state =new State(){{setX(state.getX());setY(state.getY());}};
    }
    State getState(){
        return new State(){{setX(state.getX());setY(state.getY());}};
    }
}

这里的一个无聊的东西

new State(){{setX(state.getX());setY(state.getY());}};

在《编程导论(Java)》p80,也提到了一下,new表达式后面的{{ ;}}; 

类体外的初始化块。

时间: 2024-10-15 11:17:19

Java中的复杂初始化的相关文章

java中的静态初始化块

Java 中可以通过初始化块进行数据赋值.如: 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块.如果使用 static 修饰初始化块,就称为静态初始化块. 需要特别注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量. 我们来看一段代码: 运行结果: 通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法.由于静态初始化块只在类加载时执行一次,所以当再次创建对

Java中数组的初始化方式

Java中数组的初始化方式    初始化方式有两种: 1.静态初始化:初始化时由程序猿显式指定每一个数组元素的初始值,由系统指定数组长度 2.动态初始化:初始化时由程序猿仅仅指定数组长度,由系统为数组元素分配初始值

java中对象的初始化过程

class Parent{ int num = 8;// ->3 Parent(){ //super(); // ->2 //显示初始化 // ->3 //构造代码段 // ->4 show(); // ->5 } {// ->4 System.out.println("Parent constructor code run->"); } public void show(){//被覆盖 System.out.println("num

java中的显示初始化和特定初始化

public class Test{ public static void main(String[] args){ Child child = new Child(); } } class Parent{ public Parent(){ super(); show();//this.show(); 因为是Child类对象调用了super()来构造其父类的部分;所以父类中的this(随着其构造方法入栈的)是指向Child类对象的!所以调用的就是Child类对象的show方法! return ;

再次认识Java中构造器的初始化与继承

class Insect { private int i = 9; protected static int j; Insect() { Print.print("i = " + i + ",j = " + j); j = 39; } private static int x1 = printInit("static Insect.x1 初始化"); static int printInit(String s) { Print.print(s);

java中对象的初始化问题

最近又把java编程思想看了看.又有些收获.此书确实不错 java中的初始化相信很多人都知道.但是具体的初始化步骤,初始化几次确不一定.上代码 public class A{ public static A a = new A(); public static int i; public static int j= 2; public A(){ i++; j++; } public static void main(String[] args){ A a1= new A(); System.ou

Java 中 byte 类型初始化问题

很早的时候由于工作需要,接触过一点 Java,于是有了这个坑,今天回头看到自己在 Stackoverflow 上提的问题发现了它,于是再记录下. 在使用中,需要将 byte 类型的的每一位都置 1.我万万没有想到这么一个简单的操作,在 Java 中有各种约束. 首先看看代码: // 方式 1 byte allBitsOne = 0xFF; // 方式2 byte allBitsOne = (byte)0xFF; // 方式3 byte allBitsOne = 0xFFFFFFFF; 上面的哪个

JAVA中的继承初始化

最近在看<Think in JAVA>,这是其中的一节内容,没怎么看明白,动手写了一段 class ObjInit { ObjInit() { System.out.println("ObjInit"); } private static int x = testInit(); private static int testInit() { System.out.println("ObjInit static init"); return 2; } }

java中一个对象的初始化过程

// 对象初始化的过程 class Fu { int num=55;// 1, num=0;对象中的成员变量默认初始化.5, 显示初始化 num=55 { System.out.println("FU类构造代码块");// 6, 构造代码块初始化 } Fu() { // 3 FU类构造函函数初始化 super(); // 4 object构造函函数初始化 // 5 显示初始化,初始化成员变量 // 6 构造代码块初始化类 System.out.println("FU构造函数&