文章目录
前言
面向对象
一、设计对象并使用
1、类和对象
定义好上图左边的对象(后面会填充手机相应属性)之后,通过new关键字来生成对象。
注意上图中间的框 我们只是定义一个类,不是定义一部真正的手机,所以属性目前没有赋值。
2、类的几个补充注意事项
总结如下:
二、封装
1.封装的原则
封装首先就是要考虑,我要把功能放在哪个类中,人画圆(draw()函数),那是把这个函数放在Person类还是Circle类中?答案是圆的方法,而不是人的方法。引出封装的原则。
封装的原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为。
我们要理解成,每个类封装的都是这个类自己要干的事情,人画圆,这件事是谁干的呢,其实是圆这个类自己画的圆,然后人调用圆的方法即可,再者说画圆一般需要知道半径,而半径这个属性是封装在圆中的,所以画圆这个方法也要定义在圆类中比较合适。比如,人关门,也认为成门自己关的。
3.如何正确使用属性
别人在使用时会赋值一些不合理的值。为了让别人无法赋值我们自己的属性(通过private关键字),并且我们在赋值我们的属性时要拒绝不合理的数值(通过编写和调用set方法来实现,而get函数是对外提供成员变量的函数)。
注意这里出现了问题,“小米”这个值并没有赋值给phone这个对象的brand属性。
为了解决这个问题,我们首先要定义两个名词:成员变量,局部变量,如下图所示。
但是当成员变量和局部变量重名时,输出age语句,输出的age是哪个呢?答案:就近原则,如下图所示
就近原则,使得我们使用的是局部变量,如果我想使用成员变量,要通过下面的 第三节this关键字。
三、this关键字
this的内存原理
四、构造方法
之前的代码,如上面第三行是空参的构造方法,我们没有定义构造函数的情况下,会自动帮我们写一个空参的构造方法。
五、标准JavaBean
练习:根据下面图片设计JavaBean类
package com.itheima.demo1;
public class User {
private String username;
private String password;
private String email;
private String gender;
private int age;
public User(){}
public User(String username, String password, String email, String gender, int age){
this.username = username;
this.password = password;
this.email = email;
this.gender = gender;
this.age = age;
}
}
两种快捷方式如下:
快捷键是Alt+Insert
还有就是安装ptg插件,并在类中右键使用
六、对象内存图
JDK8之前方法区和堆是放在一起的(与上图表示有出入),其实他们在物理上也是连在一起的。
1.一个对象的内存图
其中第4点和第5点是对第3点进行赋值。
2.两个对象的内存图
3.两个变量指向同一个对象内存图![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/26a9ab8c462c484fbaff4b279eaa6c41.png)
七、补充知识:成员变量、局部变量区别