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饭馆里面没有服务员,你吃完饭之后,只有自己清理桌子,不然就不让你走。
在同一个类中静态的方法或者属性可以直接用(不用引用.来调用),在不同的类中调用静态变量或者方法也可以不用创建对象,直接类名.就可以调用;
成员变量或者成员方法是从属于对象的,创建一个对象就有一份,而静态的成员或者方法是直接从属于类的,当类加载时就会被创建,但是有且只有一份,
若创建的多个对象都调用同一个静态变量,那么他们是访问的一份数据。
那么静态变量在什么时候使用呢?
如果我们用到的数据跟对象无关,只需要保存一份的时候;比如,人类的眼睛数量等,
静态变量的访问方式有两种:
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学习笔记]-7.8 static关键字之特点
- [javase学习笔记]-7.12 static关键字的使用场景
- JAVASE学习笔记三——this,static
- JavaSE学习笔记-static关键字
- javaSE学习05_基本类型的类型转换
- 一 javase学习记录05
- JavaSE基础知识学习—Static关键字
- [javase学习笔记]-7.10 static关键字使用的注意细节
- JavaSE 学习参考:static关键字用法汇总
- [javase学习笔记]-8.5 statickeyword的使用场景
- JavaSE 学习参考:static关键字用法汇总
- [javase学习笔记]-8.3 statickeyword使用的注意细节
- javaSE学习笔记之几个关键字this、super、final、static
- JavaSE入门学习12: Java面相对象之static用法
- JavaSE入门学习12: Java面相对象之static使用方法
- FreeBSD学习笔记05-域名解析
- 20080229.net学习static
- javase学习-----String转化为Date
- 转载来的wcf学习笔记05
- 小五思科技术学习笔记之浮动路由(floating static route)