Java内存分配

来源:互联网 发布:mac上玩梦幻西游手游 编辑:程序博客网 时间:2024/06/15 20:18

public class A{

private B b;//引用类型变量

}

public class B{

}

new A();//对象

1、引用类型变量和对象的区别

声明的对象是在堆内存中初始化的, 真正用来存储数据的。不能直接访问。

引用类型变量是保存在栈当中的,一个用来引用堆中对象的符号而已(指针)

2、成员变量与局部变量的区别

局部变量,在方法内部声明,当该方法运行完时,内存即被释放。
成员变量,只要该对象还在,哪怕某一个方法运行完了,还是存在

3、反射的基础

在装载类的时候,加入方法区中的所有信息,最后都会形成Class类的实例,代表这个被装载的类。方法区中的所有的信息,都是可以通过这个Class类对象反射得到。我们知道对象是类的实例,类是相同结构的对象的一种抽象。同类的各个对象之间,其实是拥有相同的结构(属性),拥有相同的功能(方法),各个对象的区别只在于属性值的不同
    同样的,我们所有的类,其实都是Class类的实例,他们都拥有相同的结构-----Field数组、Method数组。而各个类中的属性都是Field属性的一个具体属性值,方法都是Method属性的一个具体属性值。

4、方法什么时候设计为静态,什么时候为非静态

对象是类的一个实例,各个对象结构相同,只是属性不同。
而静态方法是对象无法调用的。
所以,静态方法适合那些工具类中的工具方法,这些类只是用来实现一些功能,也不需要产生对象,通过设置对象的属性来得到各个不同的个体。


方法区:类的基本信息(每个类的全限定名每个类的直接超类的全限定名(可约束类型转换)该类是类还是接口该类型的访问修饰符直接超接口的全限定名的有序列表)运行时常量池(如文字字符串、final变量值、类名和方法名常量),字段信息(字段的名、类型、修饰符),方法信息(方法名、返回值类型、参数类型、修饰符、异常、方法的字节码),静态变量(即类变量,静态变量和静态块

Java栈:的形式存放本地方法调用状态,包括方法调用的参数局部变量、中间结果(局部变量区为一个以字为单位的数组,每个数组元素对应一个局部变量的值。调用方法时,将方法的局部变量组成一个数组,通过索引来访问。若为非静态方法,则加入一个隐含的引用参数this,该参数指向调用这个方法的对象。而静态方法则没有this参数。因此,对象无法调用静态方法。

0 0
原创粉丝点击