什么是面向对象编程
-
面向对象编程(Object-Oriented Programming, OOP)
-
面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据。
-
抽象
-
三大特性:封装、继承、多态
-
从认识论角度考虑是先有对象后有类。对象,是具体的事务。类,是抽象的,是对对象的抽象
-
从代码运行角度考虑是先有类后有对象。类是对象的模板。
回顾方法
方法的定义
-
修饰符
-
返回值类型
-
break:跳出switch,结束循环 和return的区别
-
方法名:注意规范就ok 见名起义
-
参数列表:(参数类型 参数名)....
-
异常抛出
方法的调用:递归
-
静态方法
-
非静态方法
-
形参和实参
-
值传递的引用传递
-
this关键字
静态方法加static 类名.方法名()
非静态方法 new 对象.方法名()
static创建就有 非静态必须先实例化才能存在(new)
创建对象与初始化对象
-
使用new关键字创建对象
-
使用new关键字创建的时候,除了分配内存空间之外,还会给 创建好的对象 进行默认的初始化 以及对类中构造器的调用
-
类中的构造器也称为构造方法,是在进行创建对象的时候必须调用的。并且构造器有一下两个特点:1.必须和类名相同
2.必须没有返回类型,也不能写void
-
构造器必须掌握
package scanner; public class Student { String name; int age; public void study(){ System.out.println(); } }
package scanner; //一个项目只能有一个main方法 public class Application { public static void main(String[] args) { //类:抽象的,实例化 //类实例化后会返回一个自己的对象 //student对象就是Student类的具体实例 Student xiaoming = new Student(); Student xiaohong =new Student(); xiaoming.name="小明"; System.out.println(xiaoming.name); System.out.println(xiaoming.age=3); } }
-
一个类即使什么也不写,也会存在一个方法
-
使用new关键字,用它初始化值。本质是在调用构造器 有参构造:一旦定义了有参构造 无参构造必须显示定义。系统不再默认存在无惨构造。
构造器
构造器:
-
和类名相同
-
没有返回值
作用:
-
new 本质在调用构造方法
-
初始化对象值
注意点:
-
定义有参构造之后,如果相使用
画图理解一下
正在上传…重新上传取消
-
类与对象: 类是一个模板:抽象,对象是一个具体的实例
-
方法:
定义、调用!
-
对应的引用:
引用类型:基本类型(8)
对象是通过引用来操作的:栈———>堆
-
属性:字段Field成员变量
默认初始化:
数字: 0 0.0
char: u0000
boolean:false
引用: null
修饰符 属性类型 属性名=属性值!
-
对象的创建和使用
-必须使用new 关键字创建对象 构造器 Person zhangxin = new Person();
-对象属性 zhangxing.name
-对象的方法 zhangxin.sleep();
-
类
静态属性 属性
动态行为 方法
封装
-
该漏的漏,该藏的藏
-
我们程序要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:不仅暴露少量的方法给外部使用。
-
-
封装(数据的隐藏)
-
通常,应禁止直接访问一个对象中实际表示,而应通过操作接口来访问,这称为信息隐藏。
-
-
记住这句话就够了:属性私用(private),get/set
继承
-
继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模
-
extends的意思是“扩展”。子类是父类的扩展。
-
Java中类只有单继承,没有多继承
-
继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。
-
继承关系的两个类,一个子类(派生类)。一个为父类(基类)。子类继承父类,使用关键字extends表示
-
子类和父类之间,从意义上讲应该具有“is a”的关系
-
object类
(在java中所有类都默认继承object类 )
-
super
this是调用该类中的方法或属性
super是调用父类的方法和属性(但是私有的还是不能调用)
在子类构造方法中的super()必须写在代码的第一行
-
方法重写
super注意点
-
在子类构造方法中的super()必须写在代码的第一行
-
super是调用父类的方法和属性(但是私有的还是不能调用)
-
super必须只能出现在子类的方法或者构造方法中
-
super 和 this 不能同时调用构造方法
this and super
前提
-
this:没有继承也可以调用
-
super:只有在继承条件下才可以使用
构造方法
-
this是调用本类中的方法或属性
-
super是调用父类的方法和属性(但是私有的还是不能调用)
-
重写
-
方法名必须相同
-
参数列表必须相同
-
修饰符:范围可以扩大: public>protected>private
-
抛出异常:范围可以被缩小,但是不能扩大:ClassNotFoundException--->Exception(大)
-
子类和父类方法名必须一致,方法体不同
-
为什么重写因为父类功能子类不一定需要,或者不一定满足
多态
-
可以指向的引用类型就不确定了,父类的引用指向子类 对象主要能执行那些方法看对象左边的类型
-
父类型可以指向子类 但是不能调用子类独有的方法。
例: Student s1 = new Student(); Person s2 = new Student(); Object s3 = new Student(); father f1 = new son();
抽象类
-
关键字abstract 抽象类 不能new 只能靠子类去实现;约束
-
抽象类中可以写普通方法
-
抽象类必须在抽象方法中
思考题
-
抽象类存在构造方法吗
-
抽象类存在意义。、
接口
-
普通类:只有具体实现
-
抽象类:具体实现和规范(抽象方法)都有!
-
接口:只有规范!自己无法写方法--专业的约束!约束和实现分离:面向接口编程--
-
接口就是规范,定义的一组规则,体现了现实世界中“如果你是....则必须能...."的思想。如果你是天使,则必须能飞,如果你是汽车,则必须能跑。如果你是好人,则必须干掉坏人;如果你是坏人,则必须欺负好人。
-
接口的本质的契约,就像我们人间的法律一样,制定好后大家都遵守。
-
OO的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理去抽象。
接口作用
-
约束、
-
定义一些方法,让不同的人实现
-
public abstract
-
public static final
-
接口不能被实例化--,接口中没有构造方法--
-
implements可以实现多个接口
-
必须重写接口中的方法--
-
接口关键词interface
-
继承接口必须重写接口方法
内部类
异常机制
实际工作中,遇到的情况不可能是完美的。
error和exception区别:erroe通常是灾难性的致命错误,是程序无法控制和处理的,当出现这些异常时,java虚拟机(JVM)一般会选择终止线程;exception通常情况下是可以被程序处理的,并且程序中应该尽可能的去处理这些异常。
try....catch......finally
Ctrl+alt+T选择包裹。
抛出异常关键字throw