day8--面向对象编程

面向对象编程

OOP

一、面向对象

  • 面向对象思想
    • 物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考,最后才对某个分类下的细节进行面向过程的思索。
    • 面向对象适合处理复杂的问题,适合处理需要多人协作的问题
  • 对于描述复杂的事物,为了从宏观上把握,从整体上合理分析,我们需要使用面向对象的思路来分析整个系统,但是,具体到微观操作,仍然需要面向过程的思路

面向对象编程的本质就是:以类的方式组织代码,以对象的组织(封装)数据。

  • 抽象
  • 三大特性
    • 封装
    • 继承
    • 多态
  • 从认识论角度考虑是先有对象后有类。对象,是具体的事物,类是抽象的,是对对象的抽象。
  • 从代码运行角度考虑是先有类后有对象。类是对象的模板。

二、方法回顾加深

  • 方法的定义

    • 修饰符
    • 返回类型
    • break与return
    • 方法名
    • 参数列表
    • 异常抛出 (throw)
  • 方法的调用

    • 静态方法

      类加载时加载

    • 非静态方法

      实例化类

    • 形参和实参

    • 值传递和引用传递

      • 引用传递:对象,本质还是值传递
    • this关键字

三、对象的创建分析

类实例化后会返回一个自己的对象

构造方法:

  • 跟类名同
  • 无返回类型
  • 如果定义了有参构造,就需要默认的定义无参构造
  • alt+insert

作用:

  • new本质在调用构造器
  • 初始化对象的值

对象是通过引用来操作的

四、面向对象的三大特性

1 、封装

高内聚,

低耦合; 仅暴露少量的方法给外面使用

该露的露,该藏的藏

通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏

属性私有 get/set

意义:

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

  • 隐藏代码的实现细节

  • 统一接口

  • 提高了系统的可维护性

2. 继承

继承的本质是对某一批类的抽象,从而实现对现实世界 更好的建模

extands的意思是扩展,子类是父类的扩展

java中类只有单继承,没有多继承

  • 继承是类和类之间的一种关系,除此之外,类和类之间的关系还有依赖,组合,聚合等。
  • 继承关系的两个类,一个为子类(派生类)一个为父类(基类)。子类继承父类,使用关键字extends来表示。
  • 子类和父类之间,从意义上讲应该具有 is a 的关系
  • object 类
  • supper
  • 方法重写

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

ctrl + h 继承树

在java中所有的类,都默认直接或者间接继承object类

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

注意点

  1. super调用父类的构造方法,必须在构造方法的第一个
  2. super必须只能出现在子类的方法或者构造方法中
  3. super和this不能同时调用构造方法

this:

  • 代表的对象不同:
    • this本身调用者这个对象
    • super代表父类对象的应用
    • super只能在有继承关系的时候调用
    • this()本类的构造
    • super()父类的构造

方法重写

重写都是方法的重写,和属性无关

父类的引用可以指向子类

静态方法的调用只跟左边定义的类型有关

静态方法和非静态的方法区别很大

非静态public方法存在重写

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

1.方法名必须相同

2.参数列表必须相同

3.修饰符范围可以扩大,不能缩小 ,public>protect>default>private

4.抛出的异常,范围可以被缩小,但不能扩大: classNotFoundException --->Exception(大)

为什么需要重写

  1. 父类的功能,子类的功能不一定需要或者满足

3.多态

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

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

子类调用的方法都是自己的或者继承父类的

父类调用的方法都是自己的方法

instanceof (类型转换) 引用类型

instanceof 可以判断两个类型是否有父子关系

x instanceof y 看这个代码编译能不能通过,就看是否存在父子关系

子类转父类可能丢失自己本来的一些方法

注意

  1. 多态是方法的多态,属性没有多态
  2. 父类和子类有联系,类型转换异常 classCastException
  3. 存在条件:继承关系,方法需要重写,父类的引用指向子类对象
  4. static方法属于类,不属于实例
  5. final常量不能重写
  6. private方法也不能重写

static关键字

private static int age   //静态变量
    
public static void go(){} //静态方法

static {
    //静态代码块
}
import static java.lang.Math.random;    //静态导入包


final 修饰的类,不能继承

五、抽象类和接口

abstract 修饰符可以用

抽象类的所有方法继承了它的子类必须实现

接口可以多继承

//抽象类
public abstract class Action {
    //抽象方法  只有方法名字,没有方法实现
    public abstract void doSomething();
}
  1. 不能new抽象类,只能靠子类去实现
  2. 抽象类里面可以写普通方法,抽象方法必须在抽象类中
  3. 抽象的抽象,约束
  4. 存在的意义,抽象出来,提高开发效率

接口

普通类:只有具体实现

抽象类:具体实现和规范都有

接口:只有规范,自己无法写方法,专业的约束,约束和实现分享

接口就是规范,定义的是一组规则,体现了现实世界中如果你是到必须能的思想,如果你是天使则必须能飞。

接口的本质是契约

oo的精髓是对对象的抽象。

//抽象的思维
public interface UserService{
    //接口中定义的属性都是public static final
    
    //接口中的所有定义其实都是抽象的 public abstract
    void add();
    void delete();
    void update();
    void query();
}
//实现了接口的类,就必须要实现接口的方法
public class UserServiceImpl implements UserService,Time{
    
}

public interface Time{
    void timer();
}
  1. 约束

  2. 定义一些方法,让不同的人实现

  3. 接口不能被实例化,接口中没有构造方法

  4. implements可以实现多个接口

  5. 必有要重写接口中的方法

六、内部类及oop实战

内容类就是一个类的内部再定义一个类。

  1. 成员内部类

    通过外部类来实例化内部类

  2. 静态内部类

  3. 匿名内部类

    一个java类中可以有多个class类,但是只能有一个类用public修饰

  4. 局部内部类

七、异常机制

  1. 什么是异常

    异常指程序运行中出现的意外。Exception

    异常发生在程序运行期间,它影响了正常的程序执行流程

  2. 异常体系结构

    • 检查性异常
    • 运行时异常
    • 错误
  3. java异常处理机制

  4. 异常处理

  5. 自定义异常

image-20220412184036352

Exception

  • RuntimeException
    • ArrayIndexOutOfBoundsException
    • NullPointerException
    • ArithmeticException
    • MissingResourceException
    • ClassNotFoundException

异常处理机制

try catch finally throw throws


try{
  //监控区域
  
  //主动抛出异常
  throw new Exception();
}catch (ArithmeticException e){ //想要捕获的异常
 //捕获异常
}
catch (Error e){ //想要捕获的异常
 //捕获异常
}
catch (Exception e){ //想要捕获的异常
 //捕获异常
}
catch (Throwable e){ //想要捕获的异常
 //捕获异常
}finally{
  //执行善后工作
}

在捕获异常中,如果要捕获多个异常,需要catch从小到大

选中代码码 CTRL+ALT+T 包果代码

//throws 用在方法上
public void test() throws Exception{
    throw new Exception();
}

自定义异常

用户自定义异常类,只需要继承Exception类即可

  1. 创建自定义异常类
  • 处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
  • 在多生catch块后面,可以加一个catch(Exception)来处理可能会被遗漏的异常
  • 对于不确定的代码,也可以加上try-catch,处理潜在异常
  • 尽量去处理异常,切忌只是简单地打印异常
  • 具体如何处理异常,要根据不同的业务需求和异常类型去决定
  • 尽量添加finally语句去释放占用的资源,IO.
posted @ 2022-04-13 23:20  LukeZhang_sz  阅读(40)  评论(0)    收藏  举报