Java基础复习03:面向对象基础入门(类与对象的概念 构造器 this关键字)

面向对象基础入门

  • 一、类与对象
    • [1.1 类的概念](#1.1 类的概念)
    • [1.2 如何定义类并使用](#1.2 如何定义类并使用)
    • [1.3 对象的成员变量的默认值](#1.3 对象的成员变量的默认值)
    • [1.4 成员变量(属性)和局部变量的区别](#1.4 成员变量(属性)和局部变量的区别)
    • [1.5 对象内存图](#1.5 对象内存图)
    • [1.6 两个变量指向同一个对象的内存图](#1.6 两个变量指向同一个对象的内存图)
    • [1.7 垃圾回收](#1.7 垃圾回收)
    • [1.8 标准JavaBean(实体类)](#1.8 标准JavaBean(实体类))
  • 二、构造器
    • [2.1 构造器的概念](#2.1 构造器的概念)
    • [2.2 无参构造器默认就有](#2.2 无参构造器默认就有)
    • [2.3 小结](#2.3 小结)
  • 三、this关键字
    • [3.1 this关键字的作用](#3.1 this关键字的作用)
    • [3.2 this在有参构造器中的用法](#3.2 this在有参构造器中的用法)
    • [3.3 this在成员方法中的用法](#3.3 this在成员方法中的用法)

一、类与对象

1.1 类的概念

所以对象也叫(对象)实例

一个类可以new出很多个对象

1.2 如何定义类并使用

同一个类 不同的对象 属性应该都是不一样的 所以一般定义类的时候就不给初始值


1.3 对象的成员变量的默认值

默认值规则和数组相同

1.4 成员变量(属性)和局部变量的区别

构造方法的形参也是局部变量

1.5 对象内存图

对象在堆内存中 如果把方法也都存放在对象里 方法可能有成千上万行 那一个对象占用的空间就太大了

所以方法是直接放在方法区的class文件里 放一份即可 然后对象通过方法引用 找到方法就行 而且方法区的空间一般也比较大 很合适

S1:类加载Test类和main方法到方法区

S2:把main方法拿到栈 开始执行

S3:执行到第一句的时候 先类加载Car类 (一些成员变量 方法之类的 相当于代码文件)

S4:执行Car c1的时候 汽车对象还没出来 只是给c1对象变量分配了栈内存中的一块空间 暂时没有存任何东西

S5:执行new Car()的时候 才初始化对象(默认值) new出来的东西都在堆内存 同时把对象在堆内存中的地址返回给c1

S6:注意:方法那么多代码不会直接放在对象空间里 而是直接放在.class文件里 对象空间存一份方法引用地址即可

S7:正常往下执行 执行到c1.start()的时候 根据c1存的地址 找到对象 然后根据对象里的方法引用地址 再找到方法 然后根据方法名定位到start方法 把该方法拿到栈内存 运行 (start方法也知道 它是c1对象调的 所以它的name访问的就是c1的name)

1.6 两个变量指向同一个对象的内存图

s1 s2是栈内存 两个不一样的变量 但是他们保存的地址是同一个 都指向了堆内存同一个对象

1.7 垃圾回收

s1 = null; s2 = null; 相当于堆内存中某一个对象没有任何人指向他了

1.8 标准JavaBean(实体类)

实际上 在set方法里 是不需要进行安全性检测的(比如年龄不能高于200)

如下图 我在前端页面选择的时候 选项已经定死了(那个时候就做好了安全性的考虑)

所以后端收到的数据不可能有问题 只需要用set方法把数据注入就行了

二、构造器

2.1 构造器的概念

建议以后这样理解:

类型 对象名 = new 构造器() 调用构造器完成对象初始化

无参构造器把默认值赋给成员变量

2.2 无参构造器默认就有

一旦写了有参构造器 默认存在无参构造器就消失了

需要显式定义一下无参构造器 否则会报错

2.3 小结

三、this关键字

3.1 this关键字的作用

this出现在 成员方法 构造方法中 代表当前对象的地址

通过this即可访问当前对象 的成员变量和成员方法

3.2 this在有参构造器中的用法

有参构造器的形参如果写成 int a int b 虽然能达到效果 但是这种命名风格很不好
为了让有参构造器的形参名可以做到见名知义 this就派上用场了

右边的name:确实接收到了奔驰 但它是Car方法里的局部变量

左边的name和右边的name一模一样 也是Car方法里同一个局部变量
所以并没有为当前对象的name赋值 打印出来还是默认值


3.3 this在成员方法中的用法

c对象调用的goWith 所以goWith里的this就代表c对象的地址 所以this.name找到的是奔驰

如果d对象调用goWith 那么goWith里的this就是d对象的地址了

相关推荐
java水泥工10 分钟前
什么是前端
java·vue·html5
可信计算10 分钟前
从单视口渲染到分支击穿:关于概率、脑神经与“创世启动器”的一些构想
人工智能·笔记
优化Henry14 分钟前
LTE基站传输割接后S1连接失败排查实录
运维·网络·笔记·学习·信息与通信
Rain的Java大神之路23 分钟前
Java 工程师做 AI,核心机会在「落地」而非「训练」
java·后端·ai编程
薛之谦_1 小时前
JAVA 多线程编程:从基础原理到实战应用
java·开发语言
LMT_Lanmantech1 小时前
Creo许可降本增效:不增购,也能让现有许可发挥更大价值
java·大数据·开发语言
星恒随风1 小时前
Linux进程间通信(一):从匿名管道、命名管道到进程池,深入理解Pipe、FIFO与文件描述符
linux·运维·笔记·学习·状态模式
Shaoshing1 小时前
Serializable
java
霖霖7141 小时前
【ESP32笔记】读取DHT11温湿度数据
笔记·单片机·mcu·物联网
Xudde.1 小时前
DC-6 靶机渗透测试(Vulnhub Writeup)
笔记·学习·安全·web安全