个人简介
> 个人主页:是Lay的主页
> 学习方向:JAVA后端开发
> 种一棵树最好的时间是十年前,其次是现在!
> ⏰往期文章:【Java基础】编程思维训练
> 喜欢的话麻烦点点关注喔,你们的支持是我的最大动力。
面向对象介绍
并不是一个技术,而是一种编程指导思想
把现实世界的具体事物全部看成一个一个的对象来解决问题
为什么要用面向对象编程
生活中我们解决问题就是按照对象化的方式进行的.如果程序也能够按照生活中的方式来解决问题,那么程序就更符合人类的思维习惯,代码看起来会更易理解,更简单.
面向对象的指导思想,优点小结:
在程序中也把现实世界的具体事物全部看成一个一个的对象来解决问题.
按照面向对象编程来设计程序:程序代码符合人类思维习惯,更易理解,更简单
面向对象的重点学习什么?
学习获取已有对象并使用
学习如何自己设计对象并使用
活动地址:CSDN21天学习挑战赛
目录
前言:
1. 设计对象并使用
1.1 设计类,创建对象并使用
1.2 定义类的几个补充注意事项
2. 对象内存图
3. 面向对象的编程案例
4. 构造器
4.1 构造器的作用
4.2 构造器有几种, 各自的作用是什么
4.3 构造器有哪些注意事项
5. this关键字
5.1 this关键字的作用
5.2 this关键字在构造器中, 成员方法中可以做什么
5.3 this的用法
6. 封装
6.1 封装是什么,一般封装是怎么体现出来?
6.2 封装有什么好处?
6.3 为啥要用封装?
6.4 属性的封装
6.5 方法的封装
7. 标准JavaBean
8. 补充知识: 成员变量,局部变量的区别
面向对象: 这种思想强调的是结果,Java就是一门面向对象的语言不在意完成的过程,在意的是 有对象可以帮我干活
1. 类和对象是什么?
类: 类指的是类型Type,是指一类事物,使用Java中的class关键字来描述
类是抽象的,要提取这一类事物的特征与功能
可以把类理解成设计图纸,模板
注意:类在现实世界中不是真实存在,它只是一种对象的数据类型
对象: 对象就是根据类创建出来的一个个独立且具体的实例
一个类可以创建出多个对象,我们通过对象唯一的地址值区分不同的对象
对象具有各种特征,并且每个对象的每个特征都可以有自己特定的值
对象具有各种行为,每个对象可以执行的操作
2. 如何得到对象?
public class 类名 {
1. 成员变量 (代表属性的,一般是名词)
2. 成员方法 (代表行为的,一般是动词)
}
类名.对象名 = new 类名( );
3. 拿到对象后能做什么?
对象.成员变量;
对象.成员方法(...)
1. 成员变量的完整定义格式是: 修饰符 数据类型 变量名称 = 初始化值; 一般无需指定初始化值, 存在默认值
2. 类名首字母建议大写,且有意义, 满足"驼峰模式"
3. 一个Java文件可以定义多个class类,且只能一个类是public修饰, 而且public修饰的类名必须成 为代码文件名
实际开发中建议还是一个文件定义一个class类
2.1 对象放在哪个位置
堆内存中
2.2 Car c = new Car ( ); c 变量名中存储的是什么?
存储的是的对象在堆内存中的地址
2.3 成员变量 (name, price)的数据放在哪里, 存在于哪个位置?
对象中, 存在于=堆内存中
1. 定义汽车类Car
2. 定义汽车类的属性:颜色 品牌 价格 车长
3. 定义汽车类的方法:启动功能start() 停止功能stop(),stop()要封装,先启动再停止
4. 创建Car类的对象c,给c对象的属性赋值并查看:“暗夜紫” “BMW” 200 0.2
5. 封装定义好的4个属性,并提供属性对应的get与set方法
6. 使用set()与get()重新给c对象赋值并查看赋值结果 “特斯拉” “black” 200.02 3
package com.example.bbb;
/*本类用于OOP的知识回顾*/
public class TestCar {
public static void main(String[] args) {
//4.创建汽车类的对象c
Car c = new Car();
//5.给c对象的属性赋值,并打印查看赋值的结果"宝马" "活力橙" 200000.98 3.1
// c.brand = "宝马";
// c.color = "活力橙";
// c.price = 200000.98;
// c.length = 3.1;
// System.out.println(c.length);
// System.out.println(c.price);
// System.out.println(c.brand);
// System.out.println(c.color);
//6.通过c对象调用汽车类的方法
c.start();
//c.stop();
//8.通过set方法给c对象重新赋值 "特斯拉" "石墨绿" 210000.99 2.9
c.setBrand("特斯拉");
c.setColor("石墨绿");
c.setPrice(210000.99);
c.setLength(2.9);
//9.通过get方法查看c对象的属性是否赋值成功
System.out.println(c.getBrand());
System.out.println(c.getColor());
System.out.println(c.getPrice());
System.out.println(c.getLength());
}
}
//1.定义汽车类Car,用来描述汽车这一类事物
class Car{
//2.定义汽车类的属性
//7.封装属性,并提供对应的get与set方法
private String brand;//品牌
private String color;//颜色
private double price;//价格
private double length;//车长
//3.定义汽车类的方法
public void start(){
System.out.println("汽车启动~");
stop();//在本类的公共方法里调用这个私有方法
}
//10.封装并调用stop()的功能
private void stop(){
System.out.println("汽车停止~");
}
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public double getLength() {
return length;
}
public void setLength(double length) {
this.length = length;
}
}
格式 :修饰符 类名(形参列表){ } ;
初始化类的对象
无参构造器: 初始化对象时, 成员变量的数据均采用默认值
有参构造器: 在初始化对象的时候, 同时可以为对象进行赋值
在任何类定义出来, 默认就自带了无参数构造器,写不写都有
一旦定义了有参构造器, 无参数构造器就没有了, 此时就需要自己写无参数构造器了
作用: 出现在成员方法, 构造器中代表当前对象的地址, 用于访问当前对象的成员变量, 成员方法
可以用于访问当前对象的成员变量
1. 当成员变量与局部变量同名时,使用this指定成员变量
2.使用this在构造方法的第一行调用构造方法的功能
this();–调用的是本类的无参构造
this(参数);–调用的是本类对应参数的构造方法
1). 面向对象的三大特征之一, 合理隐藏, 合理暴露
2). 一般会把成员变量使用private隐藏起来
3). 通过getter和setter方法暴露其访问
1). 加强了程序代码的安全性
2). 适当的封装可以提升开发效率, 同时可以让程序
封装可以提高程序的安全性
封装可以让资源按照我们预先规定的方式来操作
用private修饰属性,一旦属性被private修饰,就只能在本类中使用,外界无法访问
所以为了让外界能够按照我们提供的方式来调用,需要根据属性生成公共的getXxx()与setXxx()方法
方法的封装也是使用private来修饰方法
如想要调用私有方法的功能,就需要在本类的公共方法里调用这个私有方法
可以理解为实体类, 其对象可以用于在程序中封装数据
标准JavaBean须满足如下需求:
1). 成员变量使用private修饰
2). 提供每一个成员变量对应的setXxx( ) / getXxx( )
3). 必须提供一个无参构造器
区别 | 成员变量 | 局部变量 |
类中位置不同 | 类中, 方法外 | 常见于方法中 |
初始化值不同 | 有默认初始化值 | 没有, 使用之前需要完成赋值 |
内存位置不同 | 堆内存 | 栈内存 |
生命周期不同 | 随着对象的创建而存在,随着对象的消失而消失 | 随着方法的调用而存在, 随着方法的运行结束而消失 |
作用域 | 在所归属的大括号中 |