面向对象
java语言属于面向对象的语言
面向对象本身不是一门具体的技术,符合人类思维的思想.
宗旨:把一个复杂的大型的业务,利用面向对象的思想进行面向对象的分析,
接着面向对象的设计,最终进行面向对象的编程.
对象是数据在内存中的”载体”
重新认识类和对象
类是抽象的概念,对象是具体的概念
类是构建对象的蓝图/模板,对象是类的具体的实例化[表现]
类是用来描述对象的.
比如:
类:水果 交通工具 学生
对象:榴莲 飞机 小三
比如:
id username age 100 admin 18 101 tom 17
面向对象的思想
核心:”一切皆对象”
①分析出系统中业务的关键对象 - “找对象” - 未来页面上显示的数据
②找出对象的**”属性”** - “对象拥有什么”
③分析出对象的”方法” - “对象可以干什么,对象的功能”
④找出对象与对象之间的关系.
1:1 - 一个丈夫对应一个妻子,一个妻子对应一个丈夫. 1:N - 一个客户拥有多个订单.一个订单只能属于一个客户 - 70% N:N - 一个学生可以选择多门课程,一门课程可以被多个学生来选择. 自关联 - 自己关联自己.
⑤最后一步才会去考虑具体怎么编码实现.可能也会考虑数据结构或者算法.
“相亲业务” -
- 媒婆帮你找一个”对象”
- 你要查看”对象”的属性
- 询问”对象”的功能
- 分析你和”对象”是否来道🌩
- 考虑 - 追 - 彩礼 - 结婚 - 具体怎么实现!
面向过程的思想
C是典型的面向过程的思想
①优先考虑的就是算法和数据结构 - 考虑的就是具体怎么实现.
实体类
实体类就是用来描述对象的.
实体类中包含属性,构造方法,getter/setter方法,toString方法.
如何定义属性
语法:
修饰符 数据类型 属性名 [=初始值];
修饰符
public 公开的
private 私有的
数据类型
- 八种基本数据类型
- 内置对象类型以及自定义对象类型.
属性名
参考变量的命名 - “小驼峰”
三大特征 - 封装性
封装 - Encapsulation - 屏蔽底层的细节,数据提供保护的机制
属性私有化
提供getter/setter方法
setter方法 - set属性名[首字母变大写] - 推荐的命名规则
setter方法这种设置值的好处
2-1. setter方法中是可以进行参数有效性判断的.
2-2. 业务需求改变了 - 属性名称改变了,使用到这个属性的具体的地方都要发生改变 - “可维护性”
2-3. 并不是所有的属性的值都是通过那么太简单的计算得到的.
public class Orders{ private int id; private double price; private int count; private double total; //getter/setter - 提供好了 public double getTotal(){ double result = this.price * this.count; return result; } } Orders o = new Orders(); o.setPrice(100.0); o.setCount(10); //o.setTotal(o.getPrice()*o.getCount()); System.out.println(o.getTotal());
2-4. 并不是所有的属性都需要对外进行公开的.
this关键字
作用1 - 当前对象,区分方法中参数和实体类中的定义的属性 - 当两者同名的时候.
调用当前实体类中已经存在的另外一个构造方法.
2-1. this()调动空参
2-2. this(参数1,参数2) - 带参构造
2-3. this调用构造的语句一定要在构造体的首行
this和super语句的区别
toString方法
当我们直接输出对象的时候,默认一定会去调用toString方法 - 如果这个对象是null,那么不会调用toString方法的
当自定义的实体类中没有手动提供toString方法,那么这个对象会自动去调用java.lang.Object类中的toString方法
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
java.lang.Object - 它是所有的类的根类,基类,超类,父类.
如果某个类没有明确指定它的父类,那么这个类默认会直接继承java.lang.Object类
“User类是Object类的儿子” - 规定 - “子类可以调用父类中所有的公开的成员“
Object类中提供的toString方法只能用来返回对象的内存地址 - 不满足实际的打印需求
所以需要在实体类中重新重写这个toString方法.
当子类User类一旦重写了toString方法之后,那么就会采取”就近原则”,直接调用自己重写
之后的toString方法.
构造方法-constructor
作用:创建对象的时候调用构造方法,通过new关键字
可以在创建对象的同时进行赋值操作,赋值的方式只有1次,setter赋值,可以多次赋值
特点
当实体类中如果没有手动提供任何一个构造方法的时候,那么系统会自动分配一个
空参构造.如果实体类中一旦手动提供了带参构造之后,那么系统将不会再分配一个空参构造了.
定义的时候,不需要返回类型的
public 类名([参数列表]){ //构造体 }
构造允许重载的
实体类中推荐只用提供空参,全参