【面向对象思想】
面向过程思想:为了解决一个问题(需求),思考先干嘛,后干嘛,再干嘛 (编年体)
面向对象思想:为了解决一个问题(需求),思考在这个问题中有一群怎样的事物?它们是怎样产生的?它们之间有怎样共同的特性和行为,即描叙事物在整个解决问题的步骤中的行为。
(纪传体)
举例
1. 买一台电脑
面向过程思想:了解自己需求 -> 了解一些品牌、配置、参数 -> 出发去百脑汇 -> 讨价还价 -> 买到电脑
面向对象思想:了解到某同学很懂电脑 -> 叫这位同学帮我买 -> 他就买回来了
2. 吃饭
面向过程思想: 买菜 -> 洗菜 -> 摘菜 -> 切菜 -> 炒菜 -> 装在盘子里
面向对象思想: 进饭店 -> 叫服务员点菜 -> 服务员叫厨师炒菜 -> 厨师叫服务员把盘子端出来 -> 吃了
3. 洗衣服
面向过程思想:把衣服脱下来 -> 放点洗衣粉 -> 泡水 -> 搓一搓 -> 清洗一下 -> 晒干
面向对象思想:把衣服脱下来 -> 放进洗衣机,放点洗衣液,点击全自动 -> 晒干
找个对象,无论是买电脑、吃饭、洗衣服, 都交给那个对象来处理就可以了。
【面向对象】
Object Oriented - 源自于对象
OOP:面向对象编程-Object Oriented Programming
OOA:面向对象分析-Object-Oriented Analysis
OOD:面向对象设计
面向对象三大特征
1. 封装 - 维护性
2. 继承 - 拓展性
3. 多态 - 灵活性
【static 静态的】
1. 修饰属性 -> 静态属性 (属于类的,区分于成员属于成员(对象)的)
2. 修饰方法 -> 静态方法 (属于类的,可以用类名直接调用)
静态方法中不允许出现非静态的成员属性和方法
静态方法中不允许出现this
3. 静态代码块
只在加载这个类的时候执行一次
4. 静态内部类
修饰为static的内部类,没有内部类对象和外部类对象之间的联系
就是说可以直接使用Outer.Inner这个类
甚至可以不需要创建内部类对象
普通的内部类不能有static方法和属性,也不能包含静态类;但是静态类可以有
静态类可以直接使用外部类的静态属性和方法
静态类不能使用外部类的非静态属性和方法
静态类一般会声明为public,方便调用
5. 静态导入(不说)
6.静态变量在内存中的存放位置
【代码块】
{} - 代码块的格式
1. 局部代码块
定义在方法内的代码块
作用:隔离局部变量的作用域
2. 构造代码块
直接定义在类中的代码块
作用:在构造器之前执行
3. 静态代码块
用static修饰的代码块
作用:只在加载这个类的时候执行一次
【final关键字】
1. 修饰基本类型数据时,只能赋值一次(值不能改变)
2. 修饰引用类型数据时,引用不能指向其他对象
3. 修饰方法,表示方法不能被重写(覆盖)
4. 修饰类,表示该类不能有子类
【初始化顺序】
任何一个对象的初始化主要经历2步
1. 加载类
属于类的东西,在这个时间会完成初始化
静态属性,静态代码块的初始化顺序就是它们的定义顺序
2. 初始化对象
初始化属于对象的东西
成员属性,构造块,构造器
先初始化成员属性和构造块,初始化顺序就是它们的定义顺序
最后执行构造器。
【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不是一个固定的