Java中的栈变量,堆变量

/**
     * 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();
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值