关于静态初始化问题
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,这里必须要用原始的方法
}
}
变量定义的顺序决定了初始化的顺序,不管在类的什么位置,他都会在任何方法(包括构造器)之前得到初始化;
静态初始化只有在必要地时候才会发生,如果 不创建主类的对象,则它内部的静态初始化是不会发生的。
一下是我机子上的输出结果:
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给我提供了一个学习交流的平台,虽然目前我还是自己跟自己交流,不过这很大的促进了我的学习积极性,同时非常感谢我的小宇宙,对我的肯定,支持,理解,和关心以及引导。
很爱你,亲爱的!
你会看吧,你看完给我留个言吧!亲爱的,我回去了,外面好冷,我回去洗个澡,睡个觉,迎接新的一周!爱你
今天把初始化与清理这章又反复看了一遍,觉得人家写的真好,反复咀嚼很有味道(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给我提供了一个学习交流的平台,虽然目前我还是自己跟自己交流,不过这很大的促进了我的学习积极性,同时非常感谢我的小宇宙,对我的肯定,支持,理解,和关心以及引导。
很爱你,亲爱的!
你会看吧,你看完给我留个言吧!亲爱的,我回去了,外面好冷,我回去洗个澡,睡个觉,迎接新的一周!爱你
相关文章推荐
- C++中关于类中常数静态成员初始化的问题
- 关于C#静态变量初始化问题
- 展讯的一道笔试Java题(关于静态初始化问题)
- 关于静态数据的初始化顺序问题
- 关于静态链接导致ACE未初始化的问题
- 关于如何初始化一个类内的静态二维数组变量问题
- C++中关于类中常数静态成员初始化的问题
- 静态成员变量初始化问题。关于 error LNK2005 static int:已经在***.obj中定义
- 有关于在Java 类的静态初始化块中创建一个自身实例的问题。
- 关于C++的new是否会对内存初始化的问题
- 关于MM图收的初始化出错问题
- 关于C++重定义多次初始化问题
- 关于 vs2012创建mvc4.0项目 entityframework5.0.0无法初始化powershell主机 的问题
- c#关于int(或其他类型)的字段在对象初始化时默认初始化问题的解决方法
- 关于tesseract的字库初始化问题
- 关于C++类的成员初始化列表的相关问题
- C++学习——静态对象的初始化问题
- 全局变量,静态全局变量,静态局部变量,类静态成员内存分配与初始化问题
- 关于java变量的初始化问题
- 关于java对象初始化的问题