黑马程序员6--关于内存的事
来源:互联网 发布:网络机房设备方案 编辑:程序博客网 时间:2024/06/18 11:14
---------------------- android培训、java培训、期待与您交流! ----------------------
Class
静态代码块
主函数
静态函数
构造代码块
构造函数
对象
函数
任何文件都是被加载到内存才能被应用,被处理,被修改。
Java运行时也不例外
当jvm运行时,先加载了.class的字节码文件
这时候静态代码块先被执行,它是给类初始化的,就像对象初始化时构造函数样
即使没有主函数也可以被执行。静态代码块存放在静态区(方法区),但是当输出System.out.println("haha");时,我认为是被压栈,进入了栈内存,虽着代码的执行完出栈。
例如:
class Demo
{
static{
System.out.println("haha");
}
}
先打印haha,然后报找不到主函数
主函数先在方法区存在,然后jvm调用main()方法,压栈(当函数执行完时就出栈)程序结束。
静态函数,也在方法区,(需要被调用才能执行)
构造代码块,随着对象的建立而被执行,用于对象的初始化,它和构造函数的区别在于,它在构造函数字前,初始化一次,对所有对象的公共初始化。
构造函数是对每个对象单独初始化(每个对象独有的值,一般放这里,几个对象就初始化几次)。
对象通过new产生,类加载器加载所需的类,
函数通过对象来调用
所有的函数都是被绑定的,静态函数被绑定为(类名.函数名)称为静态绑定,非静态函数被绑定为(this.函数名)称为动态绑定。
这样也解释了为什么静态不需要对象,非静态要对象,this表示对象。
内存的分类:
栈区(内存空间小,效率高),堆区(内存空间大,效率低),方法区(用于存储各中方法和静态变量,和堆差不多(我理解的)),
全局变量存放在堆区中(全局变量就是对象的属性,当然要放到堆区了),局部变量存放在栈区(为什么存放在栈区呢?因为局部变量是在方法中的,当调用方法时,方法压栈,然后才有的局部变量,局部变量当然要在栈区了。)
方法区的存在是为了,当一个仓库的角色(它是用来临时存放一些数据,当执行到这个数据时就会压栈在栈区操作)
---------------------- android培训、java培训、期待与您交流! ----------------------
- 黑马程序员6--关于内存的事
- 黑马程序员-------关于内存
- 黑马程序员_关于虚拟机内存的知识点补充
- 黑马程序员---C语言:关于内存的分布
- 黑马程序员---关于内存分配问题
- 黑马程序员4--关于集合的事
- 黑马程序员8--关于反射的事
- 黑马程序员9--关于代理的事
- 关于黑马程序员的自述
- 黑马程序员_一个小程序的发现-关于#define与C的内存
- 黑马程序员_一个小程序的发现-关于#define与C的内存
- 黑马程序员_一个小程序的发现-关于#define与C的内存
- 黑马程序员 初步了解内存的问题
- 黑马程序员-java内存分配的策略
- 黑马程序员_ 变量的内存分析
- 黑马程序员_OC内存管理的总结
- 黑马程序员-java的内存结构
- 黑马程序员--变量的内存分析
- datalist分页
- Storyboard 解析(good) 含自定义tableViewCell
- Snapchat创始人:你们想得太多了 应用与性无关
- 黑马程序员5--进制转换问题
- Magento 的 config.xml 配置参数详解
- 黑马程序员6--关于内存的事
- Java利用HttpURLConnection发送post请求上传文件
- 云计算的十大优势,不看后悔~
- 谈函数指针的实际应用
- 黑马程序员7--关于泛型的事
- 16个桌面Linux用户必须要知道的Shell命令
- WPF学习之资源-Resources
- 举例说明PERL特殊变量
- svg 学习笔记(各种元素)