一、每次建立对象时,都须要进行加载和建立2个操做:
spa
① 先去判断须要的类是否已经加载,若是已经加载了,则无需再加载,若是没有加载,则须要经过类加载器加载类信息到方法区
code
② 在堆中建立新对象对象
二、栈、堆、方法区的存储blog
栈:对象的引用、局部变量
内存
堆:对象和全局变量(属性)
io
方法区:类信息、属性信息、方法信息class
三、方法的调用机制变量
每次调用方法,伴随着“方法入栈”操做,也就是栈中为该方法分配了一块空间,用于保存该方法中涉及到的变量引用
每次方法调用结束,伴随着“方法出栈”操做,也就是栈中分配的空间被释放了方法
在类的方法调用过程当中,首先判断方法区是否存在该方法,存在则方法入栈,调用结束后出栈。
Java中方法传递参数是按值传递:
若是是基本类型,则值 表明元素内容
若是是引用类型,则值 表明地址号
特殊状况:
在调用的方法中对引用型变量形参从新实例化,改变的是地址,则不会影响实参,即传值进去没用从新实例化为新地址。
class Test{ public void method(Person persion){ person=new Person(); person.name = "Zane"; System.out.println(p.name); // 输出为Zane } } class Person{ String name; } public static void main(String[] args){ Test t = new Test(); Person p = new Person(); p.name = "Mort"; t.method(p); System.out.println(p.name); // 输出为Mort }