DAY4
我们看现实生活中的任何一个事物,都可以看成一个对象,都可以将任何一个事物中的行为和属性抽取出来,抽取出来的这个是某一类事物的总体特点和行为,具体到某一个具体的事物才是一个对象,抽取出来的这一类事物叫做类
就比如我说人有耳朵和鼻子,都能吃饭,这是泛指,可以封装成一个类;
比如我自己就是一个具体的对象;
比如造房子的一张图纸可以理解为一个类;
依照图纸盖出来的房子可以理解为一个具体的对象;
我们这个面向对象的思想就是将现实生活中的行为和特点抽取出来,然后封装到类中,然后再通过创建对象的方式去体现
定义一个类:
案例:
Java中最小的单位是类
栈:存放的都是局部变量,不会为变量赋值,方法的执行都是在栈中;
堆:存放的都是new出来的东西,会为变量赋值,引用变量的初始化值都是null,基本数据类的值就是我们以前说的默认值
方法区:现阶段,我们只需要知道类的字节码文件是存放在方法区中的class区。方法区种存放的都是唯一的东西,方法区里面还有一个static区,在创建对象时,在方法区中的字节码文件中的没有被static修饰的成员变量会在堆中拷贝一份,方法还是存放在方法区种的class区中,堆中存放的是方法的地址值,当需要调用方法时,会根据地址值将方法加载到栈中执行
一个对象在内存中的初始化图解如下:
两个对象在内存中的初始化图解:
三个对象在内存中的初始化图解:
成员变量和局部变量的区别:
如果成员变量和局部变量同名的话,使用的原则是就近原则
- 类中的位置
成员变量定义在类中,方法外
局部变量定义在方法内部或者参数列表上 - 内存中的位置
成员变量放在堆内存中
局部变量放在栈内存中 - 生命周期
成员变量随着对象的创建而存在,随着对象的消失而消失
局部变量随着方法的调用而存在,随着方法的调用完毕而消失 - 初始化值
成员变量有初始化值
局部变量必须我们自己手动赋值
注意事项:
基本数据类型作为实参传递时,形参的值改变不影响实参的值;引用数据类型作为实参传递时,形参的值改变影响实参的值
匿名对象:
定义:没有名字的一个对象
如:定义一个Test类,new Test()就是匿名对象
使用场景: - 当需要调用一个类中的方法而且仅仅需要调用一次时
- 当类的对象作为实参传递时,可以使用匿名对象
Java三大特征
1、封装
定义:就是隐藏类的属性和实现细节,仅对外提供公共的访问方式
封装的好处: - 解决代码安全问题
- 提供代码的复用性
什么时候使用封装?
当类的成员变量设置存在安全风险时候,可以提供一个公共的访问方法用于设置这个成员变量
private修饰符关键字:表示私有的意思,可以修饰成员(成员变量和成员方法),被private修饰的成员只能在类中访问
封装的基本步骤: - 一般情况下封装是将不需要向外部暴露的实现细节用private修饰,然后提供setXXX和getXXX方法
this关键字:
this所在的方法正在被哪个对象调用,this就代表该对象
一般在封装属性的时候,会在设置属性值的时候,将参数的名称和属性的名称一致,然后再用this来明确表示该属性
案列图解:
构造函数:
定义:构造函数一般是用于初始化数据,在创建对象的时候就传递一些数据进去
构造方法格式: - 没有返回值类型,连void都没有
- 构造方法的名字和类名一致
- 不能使用return返回一个具体的值,但是可以使用return用于结束构造方法
特点: - 构造方法是可以重载的
- 如果我们自己没有定义构造方法,系统会默认给出一个空参的构造方法,一旦我们自己定义了构造方法,系统将不再提供。
成员方法:
返回值类型: - 有明确返回值的方法
- 返回值为void的方法
参数列表: - 有参成员方法
- 无参成员方法
标准的JavaBean: - 成员变量
- 构造方法
无参构造方法
有参构造方法 - 成员方法
setXXX
getXXX
打印所有成员变量的方法等等
设置成员变量的方式: - 使用构造方法
- 使用setXXX方法
案例解析:
一个标准JavaBean在内存中的图解: