您的位置:首页 > 其它

关于静态初始化问题

2010-11-14 22:11 232 查看
前面说了,我要好好看Java,By the way,那天考软设倒数第二条是算法题,关于堆排列的,思想不是很难,只是加上c语言,虽然整体来讲确实算不上难,但是我看了下最后一条,java设计模式的题,同样是填代码,突然感觉好亲切,好人性化,在考场上他也能给我感动,真好!

今天把初始化与清理这章又反复看了一遍,觉得人家写的真好,反复咀嚼很有味道(thinking in Java)。现在我简要的以一个例子来记录我自己觉得重要的地方,也是我以前学习中忽略薄弱的地方。

注:
this可以用来调用一个构造器,但是不能调用两个,而且这个调用要位于最起始位,否则编译器会报错;
除了构造器,不许在其他地方调用构造器;
比如
public class A{
int i;
String j;
public A(int i){
/////
}
public A(String j){
/////////
}

public A(int i,String j){
this(i); //this要位于起始的地方
this.j=j; //这里就是,只能用一次this,这里必须要用原始的方法

}
}

变量定义的顺序决定了初始化的顺序,不管在类的什么位置,他都会在任何方法(包括构造器)之前得到初始化;
静态初始化只有在必要地时候才会发生,如果 不创建主类的对象,则它内部的静态初始化是不会发生的。

class Windows{   Windows(int marked){        System.out.println("windows"+marked);    }   void f_w(int marked){       System.out.println("f_windows"+marked);   }}class House{   static Windows w1=new Windows(1);   static Windows w10;   static Windows w11;   static{                       //Java允许将多个静态初始化动作组织成一个特殊的“静态子句”                                 //这段代码只执行一次,当首次生成这个类的一个对象时,       w10=new Windows(10);      //或首次访问那个类的静态数据成员时(即便没有生成过那个类的对像)       w11=new Windows(11);   }    House(){        System.out.println("Houses");        w2.f_w(1);    }    void f_h(int marked){        System.out.println("f_house"+marked);    }    static Windows w2=new Windows(2);}class Cup{     Windows w3=new Windows(3);     static Windows w4=new Windows(4);     Cup(){         System.out.println("Cup");         w4.f_w(4);     }     void f_c(int marked){         System.out.println("f_cup"+marked);     }     static Windows w5=new Windows(5);}public class Main {    public static void main(String[] args) {      System.out.println("Create new Cup() in main");//对应输出结果的6行      new Cup();                   //对应输出结果的7~9行       System.out.println("Create new Cup() again in main");//对应输出结果的10行      new Cup();                   //对应输出结果的 11~13行     House.w10.f_w(11);        //对static的调用,虽然只用了w10,也会触发静态子句的运行                               //对应输出结果的14~18行      cup.f_c(0);              //对应输出结果的19行    }     static Cup cup=new Cup();  //对应输出结果的1~5行}


一下是我机子上的输出结果:
1。windows4
2。windows5
3。windows3
4。Cup
5。f_windows4
6。Create new Cup() in main
7。windows3
8。Cup
9。f_windows4
10。Create new Cup() again in main
11。windows3
12。Cup
13。f_windows4
14。windows1
15。windows10
16。windows11
17。windows2
18。f_windows11
19。f_cup0

那个静态子句还有一种形式就是没有static,当然那是非静态子句了,这个可以用到匿名内部类中,以后再说,
哈哈,明天可以看下一张了—访问控制权限。。。

噢,想起来了,上次翻译的command的那本电子书,还没有推上来,因为我目前在win上,而那个文档在Ubuntu上,所以今天不弄了。
软设考完了,还剩一个六级,其他的没有什么要准备的了,现在跟亲爱的也不能天天在一起了,唉!可以有很多时间来看自己想看的东西了,以后争取每天都有新的知识放到博客里,
最后来点客套的官腔吧:非常感谢csdn给我提供了一个学习交流的平台,虽然目前我还是自己跟自己交流,不过这很大的促进了我的学习积极性,同时非常感谢我的小宇宙,对我的肯定,支持,理解,和关心以及引导。
很爱你,亲爱的!

你会看吧,你看完给我留个言吧!亲爱的,我回去了,外面好冷,我回去洗个澡,睡个觉,迎接新的一周!爱你
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: