/**
* Java中 try块,catch块,finally块中定义变量都是局部变量
* 三个块写在在一起,却相当于独立的方法,编译器相当委托 try与catch多个块之间
* 三个块相当于三个方法,之间还存在调用关系,try块调用catch块传入参数exception
* 三个块作用域,互不相通
* 初始化块(静态动态),方法块(类的静态方法与动态方法),还有就是这三个块
* 与块作用域对应的是变量的初始化
* 栈变量,或者局部变量,方法中的变量(非类变量),必须在声明后显式的初始化
* 声明与初始化对应两个过程,一遍初始化与声明合二为一
* FileOutputStream outStream;声明 (局部变量的话不能直接使用)
* outStream = null;赋值
* outStream = new String("abc");堆中才有对应的变量
* 而栈变量,类成员变量声明后 则不必自己显示初始化,在类实例生成时,new时会在类加载过程中自动初始化
* 同时在Java中数组是类,int【】 arr = new int[10]; 中变量会自动初始化,鬼知道有没autoboxing
*
*
* 还有就是null的问题,可将null强制转化为各种类型引用,并可调用类方法
* null,引用在本质上都是相同的,都是堆地址的引用。
*
* 下面的例子中 只有将 outStream = null
* 才能编译通过,为什么不强制检查运行时异常 runtimeException
* nullpointException
*/
public static void errMethod1() {
FileOutputStream outStream;
try {
outStream = new FileOutputStream("test.dat");
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} finally {
try {
outStream.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
* Java中 try块,catch块,finally块中定义变量都是局部变量
* 三个块写在在一起,却相当于独立的方法,编译器相当委托 try与catch多个块之间
* 三个块相当于三个方法,之间还存在调用关系,try块调用catch块传入参数exception
* 三个块作用域,互不相通
* 初始化块(静态动态),方法块(类的静态方法与动态方法),还有就是这三个块
* 与块作用域对应的是变量的初始化
* 栈变量,或者局部变量,方法中的变量(非类变量),必须在声明后显式的初始化
* 声明与初始化对应两个过程,一遍初始化与声明合二为一
* FileOutputStream outStream;声明 (局部变量的话不能直接使用)
* outStream = null;赋值
* outStream = new String("abc");堆中才有对应的变量
* 而栈变量,类成员变量声明后 则不必自己显示初始化,在类实例生成时,new时会在类加载过程中自动初始化
* 同时在Java中数组是类,int【】 arr = new int[10]; 中变量会自动初始化,鬼知道有没autoboxing
*
*
* 还有就是null的问题,可将null强制转化为各种类型引用,并可调用类方法
* null,引用在本质上都是相同的,都是堆地址的引用。
*
* 下面的例子中 只有将 outStream = null
* 才能编译通过,为什么不强制检查运行时异常 runtimeException
* nullpointException
*/
public static void errMethod1() {
FileOutputStream outStream;
try {
outStream = new FileOutputStream("test.dat");
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} finally {
try {
outStream.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}