public class A{
private B b;//引用类型变量
}
public class B{
}
new A();//对象
1、引用类型变量和对象的区别
声明的对象是在堆内存中初始化的, 真正用来存储数据的。不能直接访问。
引用类型变量是保存在栈当中的,一个用来引用堆中对象的符号而已(指针)
2、成员变量与局部变量的区别
局部变量,在方法内部声明,当该方法运行完时,内存即被释放。
成员变量,只要该对象还在,哪怕某一个方法运行完了,还是存在
在装载类的时候,加入方法区中的所有信息,最后都会形成Class类的实例,代表这个被装载的类。方法区中的所有的信息,都是可以通过这个Class类对象反射得到。我们知道对象是类的实例,类是相同结构的对象的一种抽象。同类的各个对象之间,其实是拥有相同的结构(属性),拥有相同的功能(方法),各个对象的区别只在于属性值的不同。
同样的,我们所有的类,其实都是Class类的实例,他们都拥有相同的结构-----Field数组、Method数组。而各个类中的属性都是Field属性的一个具体属性值,方法都是Method属性的一个具体属性值。
4、方法什么时候设计为静态,什么时候为非静态
对象是类的一个实例,各个对象结构相同,只是属性不同。
而静态方法是对象无法调用的。
所以,静态方法适合那些工具类中的工具方法,这些类只是用来实现一些功能,也不需要产生对象,通过设置对象的属性来得到各个不同的个体。
方法区:类的基本信息(每个类的全限定名,每个类的直接超类的全限定名(可约束类型转换),该类是类还是接口,该类型的访问修饰符,直接超接口的全限定名的有序列表),运行时常量池(如文字字符串、final变量值、类名和方法名常量),字段信息( 字段的名、类型、修饰符),方法信息(方法名、返回值类型、参数类型、修饰符、异常、方法的字节码),静态变量(即类变量,静态变量和静态块)
Java栈:以帧的形式存放本地方法的调用状态,包括方法调用的参数、局部变量、中间结果(局部变量区为一个以字为单位的数组,每个数组元素对应一个局部变量的值。调用方法时,将方法的局部变量组成一个数组,通过索引来访问。若为非静态方法,则加入一个隐含的引用参数this,该参数指向调用这个方法的对象。而静态方法则没有this参数。因此,对象无法调用静态方法。)