您的位置:首页 > 编程语言 > Java开发

JavaSE学习_05_static_gc

2016-09-02 13:03 197 查看
1、static关键字:用static关键字修饰的变量是静态变量,用static关键字修饰的方法叫静态方法,他们都从属于类,他们的数据会被放到方法区;

在同一个类中静态的方法或者属性可以直接用(不用引用.来调用),在不同的类中调用静态变量或者方法也可以不用创建对象,直接类名.就可以调用;

成员变量或者成员方法是从属于对象的,创建一个对象就有一份,而静态的成员或者方法是直接从属于类的,当类加载时就会被创建,但是有且只有一份,

若创建的多个对象都调用同一个静态变量,那么他们是访问的一份数据。

那么静态变量在什么时候使用呢?

如果我们用到的数据跟对象无关,只需要保存一份的时候;比如,人类的眼睛数量等,

静态变量的访问方式有两种:
1)类名.静态变量(推荐使用这种,这种方式更容易被理解)
2)对象引用.静态变量

学到现在数据大概存储存在堆、栈、方法区:
1)栈:局部变量(基本类型存储内容-值)(引用类型存储内容-地址)
2)堆:new出来的对象
3)方法区:类的信息(class字节码),静态属性

静态变量:static int eye;

静态方法:public static void test() {}

注意:静态方法、静态块里面不能使用this关键字,静态的方法、块不能使用非静态的属性或方法,非静态的方法、块里面可以使用静态的属性或方法;

这时创建对象的过程为:
1)会先静态初始化
2)开辟内存,创建对象
3)通过创建的对象调用构造器
4)把对象的地址返回

静态初始化:把类里所有的静态变量(静态块)都执行了。

2、gc机制:java垃圾回收机制;gc是java后台负责回收堆里面new出来的垃圾对象(没用引用指向的对象)的一个独立线程;

栈里面的局部变量是有作用域的,作用域结束后,就有编译器自动回收。

注意点:
1)默认情况下,在内存不足时才回收垃圾对象(没有引用指向的对象)
2)对象被回收的时候,gc线程会调用对象的finallize方法
3)System.gc()通知gc进行回收
4)没有垃圾对象-内存满了-出现内存溢出错误-OutOfMemoryError: Java heap space

这里一定要注意java的jc机制和c语言的区别:java的gc机制是后台自动调用的,即使你调用的System.gc()也仅仅是通知后台清理垃圾

(但是后台并不一定会做出相应),也就是一句话,java的内存只管用,不用考虑垃圾的问题;C的gc机制就不一样了,你必须要亲自去清理垃圾。就好比,有两个饭馆java和c,java饭馆里面有一个服务员,你吃完饭只管走人,不用收拾桌子,就算你叫服务员来收拾桌子,他也不一定会来,因为旁边还有干净的桌子没有使用,只有他觉得需要清理的时候才会清理;而c饭馆里面没有服务员,你吃完饭之后,只有自己清理桌子,不然就不让你走。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JavaSE static gc机制