1.面向对象的内存分析:
(1)栈:存储局部变量(基本数据类型变量,引用数据类型变量)
在调用方法时,jvm会为该方法开辟一个栈帧,存储该方法里的
参数,局部变量等等;
引用变量存的是地址值;
(2)堆:存放的是对象及属性其数据;在new 一个对象的在堆中已经产生了地址值;
每个对象的地址值不同
注意:
Student stu=new Student();
Student stu1=stu;
此时stu1和stu的地址值相同,指向的是同一个对象;
(3)方法区:存放类的信息,和一些字节信息;
(4)操作对象的属性数据时的流程:
栈中的引用通过new对象产生的地址值,去操作在堆里面的属性给其赋值、取值;
在没有初始化的时候其属性的默认值是各个数据类型的默认值;
成员变量:
定义在类中,方法外;有默认值,不用初始化;堆中;
与对象一起在堆中,对象使用完毕,就被gc()回收;
局部变量:
定义方法中;
没有初始值,使用之前,必须初始化;
存储在栈中,一旦方法使用完,变量就失效
2.封装:![](https://i-blog.csdnimg.cn/blog_migrate/b560bf94f8fc116d22b02942a3b2bb88.png)
方法的封装、类的封装(组件)
get/set方法(set是赋值,get是取值)
类的封装的步骤:
1.修改属性的权限,限制对属性的访问--private;
2.为每一个属性建立set、get方法,用于对属性的操作;
3.对操作属性的方法加入限制--public;
构建JavaBean的原则:
数据全私有,方法全公开,无参构造方法
例:
public class Student{ private String name;//数据私有 private int age; public void setName(String name){//方法公开 this.name=name; } public String getName(){ return name; } public void setAge(int age){ this.name=name; } public int getAge(){ return age; } }
封装的作用:
对外部提供可调用的稳定功能,降低代码的出错率,提供代码的复用性和可维护性
无论方法内部里面的数据逻辑是否改变,只要其功能不变,其他的功能就不会收到
此方法的改变;
构建的JavaBean的目的:
方便使用该组件