Java基础(四) 初始化与清理

初始化

  1. 在类中变量定义的顺序决定了它们初始化的顺序。即使变量定义散布在方法定义之间,它们仍会在任何方法(包括构造器)被调用之前得到初始化,如下:
    在这里插入图片描述
    输出结果:
    在这里插入图片描述
  2. 静态变量初始化:
  • 初始化的顺序先是静态对象(如果它们之前没有被初始化),然后是非静态对象。且静态对象只有当是第一次访问时才会被初始化,此后,再次创建访问静态对象不会再次被初始化。
  • 同一个对象无论被创建了多少次,其中的静态数据都只占用一份存储区域,故static关键字不能应用于局部变量,只能作用于属性(字段、域)。
public class DataTest {
    DataTest(int i){
        System.out.println("DataTest("+i+")");
    }

    void f1(int dataTest){
        System.out.println("f1("+dataTest+")");
    }

    static class House{
        static DataTest test = new DataTest(1);
        House(){
            System.out.println("House()");
            test2.f1(1);
        }

        void f2(int test){
            System.out.println("f2("+test+")");
        }

        static DataTest test2 = new DataTest(2);

    }

    static class Cup{
        DataTest test3 = new DataTest(3);
        static DataTest test4 = new DataTest(4);
        Cup(){
            System.out.println("Cup()");
            test4.f1(2);
        }
        void f3(int i){
            System.out.println("f3("+i+")");
        }
        static DataTest test5 = new DataTest(5);

    }

    public static class Test{
        public static void main(String[] args){
            System.out.println("main creating new Cup()");
            new Cup();
            System.out.println("main creating new Cup()");
            new Cup();
            house.f2(1);
            cup.f3(1);

        }
        static House house = new House();
        static Cup cup = new Cup();

    }
}

上述代码输出结果:

DataTest(1)
DataTest(2)
House()
f1(1)
DataTest(4)
DataTest(5)
DataTest(3)
Cup()
f1(2)
main creating new Cup()
DataTest(3)
Cup()
f1(2)
main creating new Cup()
DataTest(3)
Cup()
f1(2)
f2(1)
f3(1)

清理回收

  1. 对象可能不被垃圾回收。
  2. 垃圾回收不等同于析构。
  3. 垃圾回收只与内存有关。
    JVM垃圾回收机制见之后博客。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值