第五天

类与对象

1.类与对象 类是一个模板:抽象。对象是一个具体的实例

2.方法 定义、调用! 3.对应的引用 引用类型:基本类型(8个) 对象是通过引用来操作的:栈--->堆 4.属性:字段Field 成员变量 默认初始化: 数字:0 0.0

char : u0000

boolean: false

引用: null 修饰符属性类型属性名=属性值! 5.对象的创建和使用

-必须使用new关键字创建对象,构造器

-对象的属性 kuangshen.name

-对象的方法 kuangshen.sleep()

6.类:

静态的属性 属性

动态的行为 方法

封装

该露的露,该藏的藏 我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。 封装(数据的隐藏) 通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏。

提供一些可以操作这些属性的方法:get/set方法。

封装的意义:

1.提高程序的安全性,保护数据

2.隐藏代码的实现细节

3.统一接口

4.系统可维护性增加了

继承

继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。 extends 的意思是“扩展”。子类是父类的扩展。 JAVA中类只有单继承,没有多继承! 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。 继承关系的俩个类,一个为子类(派生类),一个为父类(基类)。子类继承父类,使用关键字extends来表示。子类和父类之间,从意义上讲应该具有"is a"的关系. object类 super

方法重写

子类继承了父类就会拥有父类的全部方法。

修饰符等级(由高到低):public、protected、default、private

调用父类的构造器必须在子类构造器的第一行

super注意点:

  1. super调用父类的构造方法,必须在构造方法的第一个

  2. super 必须只能出现在子类的方法或者构造方法中!

  3. super和 this 不能同时调用构造方法!

this: 代表的对象不同: this:本身调用者这个对象

super:代表父类对象的应用

前提: this:没哟继承也可以使用 super:只能在继承条件才可以使用

构造方法: this() ;本类的构造

super():父类的构造!

方法的重写

静态方法:方法的调用只和左边定义的数据类型有关

非静态方法:重写(关键词只能是public)

父类的引用指向了子类

重写:需要继承关系,子类重写父类的方法!

1.方法名必须相同

2.参数列表必须相同

3.修饰符:范围可以扩大,不可以缩小

4.抛出的异常:范围可以被缩小但不能扩大

总结:重写子类的方法和父类必须一致;方法体不同;

子类重写了父类的方法,执行子类的方法

为什么重写:父类的功能子类不一定需要(Alt + Insert:override)

多态

动态编译:类型:可扩展性

即同一方法可以根据发送对象的不同而采用多种不同的行为方式。

一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多

多态存在的条件

  • 有继承关系

  • 子类重写父类方法

  • 父类引用指向子类对象

注意:多态是方法的多态,属性没有多态性

instanceof 类型转换

父类的引用指向子类

多态注意事项:1.多态是方法的多态,属性没有多态

2.父类和子类有联系。(在没有关系的类型间转换,会报类型转换异常!)(ClassCastException)

类型转换

子类转换为父类(强制转换),可能丢失自己本来的一些方法。

方便方法的使用,减少重复的代码

抽象类

abstract修饰符可以用来修饰方法也可以修饰类,如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类。 抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类。 抽象类,不能使用new关键字来创建对象,它是用来让子类继承的。

抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的。 子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类。

抽象方法:只有方法的名字没有方法的实现。

接口

普通类:只有具体实现 抽象类:具体实现和规范(抽象方法)都有!接口:只有规范! 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是...则必须能..”的思想。如果你是天使,则必须能飞。如果你是汽车,则必须能跑。如果你好人,则必须干掉坏人;如果你是坏人,则必须欺负好人。 接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守。 OO(面向对象)的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象。 声明类的关键字是class,声明接口的关键字是interface

接口都需要实现类(implements)

实现接口中的类必须实现接口中的所有方法

内部类

内部类就是在-个类的内部在定义一个类,比如,A类中定义一个B类,那么B类相对A类来说就称为内部类,而A类相对B类来说就是外部类了。 1.成员内部类 2.静态内部类 3.局部内部类 4.匿名内部类

异常机制

异常分类:

检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。 运行时异常:运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。 错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

异常的体系结构

 

异常处理机制

1.抛出异常

2.捕获异常

异常处理五个关键字

try(监控区域)、catch(捕获异常)、finally(善后工作,出不出现异常都会执行,释放资源)、throw(抛出异常,一般在方法中使用)、throws(抛出异常,在方法上使用)

try,catch必须要有,finally可以不使用。

catch(此处放想要捕获的类型)

假设捕获多个异常,需要遵循层层递进从小到大。

快捷键:Ctrl + Alt + T

在多重catch块后尽量增加catch(Exception)来处理更大的异常

自定义异常

1.创建自定义异常类。 2.在方法中通过throw关键字抛出异常对象。 3.如果在当前抛出异常的方法中处理异常,可以使用try-catch语句捕获并处理;否则在方法的声明处通过throws关键字指明要抛出给方法调用者的异常,继续进行下一步操作。 4.在出现异常方法的调用者中捕获并处理异常。

posted @ 2022-04-15 09:04  潘pp  阅读(42)  评论(0)    收藏  举报