thinking in java 第五章2 初始化
第一点:
在编写程序的过程中,java会保证尽量在使用的时候初始化,所以在没有初始化的变量在使用过程中编译器会报错,这里我们说的变量有2种,一种是全局变量,一种是局部变量,全局变量编译器会自动赋给初值,而局部变量不能,看下面例子:
public class Chushihua {
private int j;
private Integer i1;
public void f() {
int i;
int n = j * 12;
Integer i2;
// int m = i*12;没有初始化,不能使用
System.out.println(j);
System.out.println(i1);
// System.out.println(i2); 没有初始化,不能使用
}
public static void main(String[] args) {
new Chushihua().f();
}
}
所以说对象和变量是一样的,全局的jvm会赋给初值,但是局部的必须赋给初值后才能使用,在使用的过程中还要注意变量的初始化顺序的问题。
第二点:
构造器和系统自动初始化的顺序,
public class Counter {
private Integer i = new Integer(5);
Counter() {
System.out.println(i);
System.out.println(j);
i = new Integer(7);
System.out.println(i);
}
private Integer j;
public static void main(String[] args) {
new Counter();
}
}
输出结果:
5
null
7
由此例子可以看出顺序,jvm会先对全局变量进行初始化,也就是构造方法的赋值操作是在初始化之后的。
也就是在类的内部,变量定义的先后顺序决定了初始化的顺序。即使变量散落在各个方法之间,他们仍会在构造器之前初始化。
静态数据的初始化:无论创建多少个对象,静态对象只占有一份存储区域。Static关键字不能应用于局部变量,因此他只能作用于域。
总结,一个对象在创建的过程中的初始化。
初始化的顺序是先静态对象,然后是“非静态”的对象,并且静态的对象在第一次对象初始化的时候只初始化一次。
构造器其实也是静态方法。
静态初始化块,当首次生成这个类的一个对象时,或者首次访问属于那个类的静态数据成员时(即使从未输出国那个类的对象),这段代码仅执行一次。非静态的初始化块世界和静态的初始化块是一样的,只是少了static
class Cup {
Cup(int i) {
System
相关文档:
一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体的业务实现了。当你需要再开发另一个相近的项目时,你以前的抽象层说不定还可以再次利用 呢,面对对象的设计 ......
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
* @author dengshaohua
*/
public class ReadPhone {
/**
* 读取数据
*/
public void ReadData(){
try {
FileReader read = new File ......
第一章 概述
版权声明
此文档由王健旭(http://www.wangjianxu.com ginger547@gmail.com )负责整理总结,并对该文档保有有限责任权利,此文档只能用于学习以及教学,请勿用作商业用途,因此而
产生的法律问题,本人一概不负责。 本 ......
下载链接http://ictclas.org/Down_OpenSrc.asp
简单介绍:
imdict-chinese-analyzer是 imdict智能词典的智能中文分词模块,作者高小平,算法基于隐马
尔科夫模型(Hidden Markov Model, HMM),是中国科学院计算技术研究所的ictclas中文分词程序
的重新实现(基于Java),可以直接为lucene搜索引擎提供中文分词支持 ......
class EnclosingOne {
public class InsideOne {
}
}
public class B {
public static void main(String[] args) {
EnclosingOne eo = new EnclosingOne();
EnclosingOne.InsideOne ei = eo.new InsideOne();
}
} ......