【面向对象思想】
面向过程思想:为了解决一个问题(需求),思考先干嘛,后干嘛,再干嘛 (编年体)
面向对象思想:为了解决一个问题(需求),思考在这个问题中有一群怎样的事物?它们是怎样产生的?它们之间有怎样共同的特性和行为,即描叙事物在整个解决问题的步骤中的行为。
(纪传体)
举例
1. 买一台电脑
面向过程思想:了解自己需求 -> 了解一些品牌、配置、参数 -> 出发去百脑汇 -> 讨价还价 -> 买到电脑
面向对象思想:了解到某同学很懂电脑 -> 叫这位同学帮我买 -> 他就买回来了
2. 吃饭
面向过程思想: 买菜 -> 洗菜 -> 摘菜 -> 切菜 -> 炒菜 -> 装在盘子里
面向对象思想: 进饭店 -> 叫服务员点菜 -> 服务员叫厨师炒菜 -> 厨师叫服务员把盘子端出来 -> 吃了
3. 洗衣服
面向过程思想:把衣服脱下来 -> 放点洗衣粉 -> 泡水 -> 搓一搓 -> 清洗一下 -> 晒干
面向对象思想:把衣服脱下来 -> 放进洗衣机,放点洗衣液,点击全自动 -> 晒干
找个对象,无论是买电脑、吃饭、洗衣服, 都交给那个对象来处理就可以了。
【面向对象】
Object Oriented - 源自于对象
OOP:面向对象编程-Object Oriented Programming
OOA:面向对象分析-Object-Oriented Analysis
OOD:面向对象设计
面向对象三大特征
1. 封装 - 维护性
2. 继承 - 拓展性
3. 多态 - 灵活性
【封装-维护性】
概念
隐藏成员变量和成员方法,以及成员方法的实现过程
便于修改,,提高代码的可维护性
让外部程序只能通过该类所提供方法来实现对内部信息的操作和访问
类和对象
类 class: (图纸)对【对象】的抽象
对象 object: (实际生产的产品)对【类】的一个实例
抽象:抽取事物共同的共性,而忽略事物的特性
名词性的共性抽象成成员属性
动词性的共性抽象成成员方法
类中能定义什么东西呢?
成员属性 - 类中的一个属性
成员方法 - 类中的一个方法
构造器 - 构造对象时调用的方法, 往往用做成员属性初始化
对象在内存中的分配情况
1个对象在内存中的分配情况
2个对象在内存中的分配情况
3个对象在内存中的分配情况
注意的地方
1) .class字节码文件不是和.java文件一一对应,而是和有几个类对应
2) Runnable Class:可运行类,有主方法,作为程序入口
Java Bean :其他类型,往往是作为一个数据类型被别的类所调用
3) 成员属性对于不同的对象具有人手一份的效果
【隐藏】
把访问修饰符 public(公开的) 改成 private(私有的)
【this关键字】
1)指的是调用这个变量或者方法的对象本身
2)出现在构造器中时,指的是另一个构造器 (必须出现在第一行),或者为了和形参相区分(set方法里面也是)
构造器中调用属性,
3)成员方法中调用成员方法或者属性, 默认可以省略this
对于this关键字可以说是java里面比较复杂的关键字,因为thiis有一个核心概念 :当前对象,而这个当前对象很难去理解。
在java里面,利用this关系着女子可以实现类属性的调用,类方法的调用,表示当前对象
this调用属性
但是现在来观察如下的一点:
此处使用的是一个构造方法,而这个构造方法的主要功能是为title与price两个属性初始化,可是有一点不好就是方法中的参数名称不好。既然现在方法中的参数的目的是为了类中的属性初始化,那么最好的做法是直接将参数设置为与属性名称保持一致
Java程序里面它是以{}为界限。如果现在属性名称与参数名称出现了重名的情况下,那么默认情况下如果没有加入任何的限制,指的都是最近的{}里的变量名称。所以在这种情况下为了可以明确找到要访问的变量属于类中的属性的时候,需要在变量钱加this,这样就可以准确的进行属性的标记。
在以后的程序开发之中,只要访问类中的属性前面必须加上“this”
This调用方法
通过或之前的代码可以发现,所谓的this实际上指的就是明确的标记本类的结构,而在一个类里面除了成员之外还会包含有方法(普通,构造),利用this可以调用本类的普通方法或构造。
调用普通方法的时候是否在方法前加this,并没有一个明确的要求,即使不加this也表示本类调用的方法,但是为了一个代码的严谨性,一定要加上this
在一个类里面方法除了普通方法之外还会包含构造方法,这个时候表示多个构造方法之间要进行互相调用。而使用的形式“this(参数,参数)”
代码出现重复代码,有重复代码就需要消掉
虽然以上实现了构造方法间的互相调用,但是依然会灿在一些限制
·使用this()调用构造方法形式的代码只能够放在构造方法的首行
·进行构造方法互相调用的时候,一定要保留调用的出口
此时调用的语句的确是放在了构造方法的首行,但是在编译之后就会出现错误提示也就是说在使用this()互相调用构造的时候请至少保留一个构造没有使用this()调用其他构造方法。
This表示当前对象
所谓的当前对象指的就是当前你正在调用类中方法的对象。
哪个对象调用了print方法,this就自动与此对象指向同一块内存地址
This就是当前调用方法的对象。
在之前出现的this.属性实际上就属于当前对象中的属性,一定是堆内存保存的内容。
总结
- 类中的属性调用以后都要加上this
- 类中的构造方法间的互相调用。一定要保留有出口
- This表示当前对象,指的是当前正在调用类中方法的对象,this不是一个固定的
构造器(构造方法)
1)构造对象其实就是在调用构造器
2)语法: 访问修饰符 构造器名(参数列表){
方法体;
}
3)隐式构造器:
当程序员没有给类定义任何构造器时,jvm会自动为这个类添加一个没有参数没有任何实现的空构造器
显式构造器:
程序员显式的指定在类中的构造器,一旦有了这个构造器,jvm就不会再为这个类添加隐式构造器
4)构造器可以重载