Java复习第七天面向对象,this和类的初始化原理

面向对象复习

什么是面向对象

面向对象是当今软件开发的主流技术之一,它是把数据即对数据的操作放在一起作为一个整体即对象。

一个对象的内存中有那些部分?

栈:存放的都是局部变量,方法的执行也是在栈中;栈中的变量没有初始化值
当方法执行完毕就会被视为垃圾,等待gc的回收
堆:存放的都是new出来的东西;堆中的变量都会赋初始化值,基本数据类型的初始化值就是默认值,引用数据类型的初始化值就是null
当没有引用指向的时候就会被视为垃圾,等待gc的回收
方法区:存放的都是唯一的东西;分为static区和class字节码区,在创建对象的时候,会把没有被static修饰的成员变量拷贝一份到堆内存中,
方法还是存放在方法区中,存放在堆中的只是方法地址值
当整个程序退出的时候方法区中的东西才会被释放


定义一个老师类和几个具体老师的对象的步骤

第一步:分析现实环境中老师的属性和行为
属性:年龄,姓名,性别...
行为:授课,吃饭,睡觉...
第二步:将属性对应成成员变量,将行为对应成成员方法
属性-成员变量:name,age,sex
行为-成员方法:不需要加static,teach,eat,sleep
第三步:创建对象和调用成员
1.创建对象
类名 对象名 = new 类名();
2.调用成员变量
取值:对象名.成员变量名;
赋值:对象名.成员变量名 = 要赋的值;
3.调用方法

对象名.成员方法名(参数);

对现实事物的属性进行分析,抽象出来

电脑:

属性(静态的描述):尺寸,颜色,价格,品牌...
行为(可以干什么):玩游戏,听音乐,看视频,聊天,学java...
手机:
属性:尺寸,颜色,价格,品牌...

行为:打电话,发短信,听音乐,玩王者荣耀,吃鸡...

一个对象内存初始化原理

Java复习第七天面向对象,this和类的初始化原理


二个对象内存初始化图解

Java复习第七天面向对象,this和类的初始化原理


三个对象内存初始化图解

Java复习第七天面向对象,this和类的初始化原理


实参和形参的内存图解

Java复习第七天面向对象,this和类的初始化原理


基本数据类型作为实参传递,形参的值改变不影响实参的值

引用数据类型作为实参传递,形参的值改变直接影响实参的值

匿名对象:没有名字的对象
匿名对象的两种使用情况:
对象调用方法仅仅一次的时候

作为实际参数传递


在同一方法中,当成员变量和局部变量同名时,使用的是哪个变量呢?
遵守就近原则,使用的是局部变量
this:当前的方法正在被哪个对象调用,this就代表该对象
什么时候使用this?
当局部变量和成员变量同名时,为了区分成员变量和局部变量时,可以使用this关键字


构造方法的作用:给类中的成员变量赋值
构造方法格式:
方法名和类名一致
没有返回值类型,连void都没有
不能使用return返回一个具体的值
构造方法特点:
系统会默认给出一个空参构造方法,如果我们不提供,系统会给默认的,如果我们给出了构造方法,那么系统将不再提供
构造方法是可以重载的
只要使用new关键字创建对象,当前类的构造方法就会被调用
一次性:构造方法只能在创建对象的时候给成员变量赋值

重复:setXxx方法可以通过对象一直给成员变量赋值

一个标准JavaBean的写法:
私有化成员变量
提供setXxx和getXxx方法
提供无参和有参构造方法

提供一个可以打印所有成员变量的方法

封装:就是把内部的实现细节隐藏,仅对外提供公共的访问方式
封装好处:
隐藏实现细节,提供公共的访问方式
提高安全性
提高代码复用性
private关键字:被private修饰的成员只能在类的内部进行访问
一般在开发中是将一个类中的所有字段都私有化,然后提供getXxx和setXxx方法
private关键字:
是一个权限修饰符。
可以修饰成员(成员变量和成员方法)
被private修饰的成员只在本类中才能访问
private最常见的应用:
把成员变量用private修饰
提供对应的getXxx()/setXxx()方法

this关键字在内存中的图解

Java复习第七天面向对象,this和类的初始化原理

类的初始化过程在内存中的图解

Java复习第七天面向对象,this和类的初始化原理