黑马程序员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培训、期待与您交流! ----------------------

原创粉丝点击