栈是局部变量; 堆是New出来的对象 ,
放在方法中的变量都是局部变量; 放在栈中;
当方法执行完成之后栈中的变量就会依次出栈,然后进行垃圾回收;
JVM的内存结构
编译完源代码之后,生成一个或者多个字节码文件;
我们使用JVM中的类的加载器和解释器对生成的字节码文件进行解释运行,意味着需要将字节码文件对应的类加载到内存中,在运行的时候才会涉及内存解析
虚拟机栈;平时提的:将局部变量存储在栈结构中;
堆: 我们将New出来的结构(数组,对象)加载在堆空间中,补充:对象的属性(非static )加载 在堆空间中.
方法区: 类的加载信息;常量池 静态域(static对象)
类的属性和方法
类中只包括属性(成员变量)和局部变量;
局部变量:包括形式参数;
1.相同点:
定义变量的格式:数据类型 变量名称=变量值;
先声明后使用;
变量都有对应的作用域;
2.不同点:
在类的位置不同;
属性:直接定义在方法的{}中
局部变量:在类的方法中的变量;
关于权限修饰符的不同:
属性:可以声明属性时,指明其权限,使用权限修饰符;
private public 缺省 protected —>封装性;
变量:不用写,用类来代替了;
关于默认初始化值的不同
属性:类的属性,根据其类型都有初始化值
局部变量:没有默认默认赋值;所以局部变量声明后必须赋值;
特别的形式参数在调用的时候赋值就可以;
在内存中的加载位置
属性:加载到堆空间中(非static )
局部变量:加载到栈空间
变量的数据类型
方式一:
方式二: 按照在类中的声明的位置:
方法
方法的声明 :
权限修饰符 返回值类型 方法名 (形参列表){
方法体
}
引用数据类型
引用数据类型,不是null 就是值;
Order 02=01; //赋值时候o1和o2用的是一个对象实体;
方法形参的传递机制:值传递机制(和上个一样)
1.形参:方法定义时,声明的小括号内的参数;
2.实参:在方法调用的时候传递给形参的数据;
最后没有换成功;为什么呢?
因为在swap中的形参是建立在栈中的(新定义的变量);
传递机制
如果参数是基本数据类型,此时实参赋值给形参的是是实参真正存储的数据值;