java 面向对象思想与实现

面向对象概念

  1. 面向对象的设计思想
    1.1 什么是面向对象
    一种看待问题的思维方式,着眼于找到一个特殊功能的具体个体,然后委托这个个体去做某些事情,我们称之为“对象”。
    “对象”是计算机抽象世界看待世界的一种方式,“面向对象”可以用很多方式表达。
    (1)世界上每一个事物都可以称为一个对象,
    对象有身份/名字(identify),状态(state),行为(behavior)
    比如:世界是由什么组成的?
    具体的各种自然界的位置。
    注意:在用语言文字来描述一件事的时候,其中的每个名词都可能被抽取出来作为一个“对象”。
    在Java用什么来描述一个类?
    类和对象的关系 class和Object的关系
    人类 (class)和 赵炳泉(Object)
    类的概念:类是所有对象的抽象概念或者集合(物以类聚),对象称为类的具体实例
    类是抽象的,对象是具体的
  2. 对象实例化 new 关键字 实例化一个对象或者创造一个对象
    对象和对象的引用的关系 电视机和遥控器的关系,拿到了遥控器就可以控制电视机
    Person person = new Person();
    Person 表示对象的引用

在计算机中new一个对象的过程中 计算机做了什么

在内存中申请一片独立的空间,表示可以使用独立的空间运行程序,申请的空间大小由对象自身的属性决定

堆内存 栈内存
实体 地址
Person 使用变量名字 如”a”来代替地址

6. 面向对象的三大特性

封装

隐藏内部实现的细节,对外提供公共的访问方法
对于设计者来说,一个是安全性,防止代码被修改破坏
从调用者角度,忽略实现细节,只关注功能怎么调用
如何设计封装:

  1. package 包的概念引入:
    对所有的class进行分类,以方便管理。包命名的规则:小写字母,一般都是四级目录
    Com.company.project.model
    如何编译包
javac -d  . 类名.java
javac -d . *.java
如何执行:
Java 全路径(包名/…/…/…/类名) 

8. 构造方法:

什么是构造方法?
构造方法是一个类在初始化的形态,类本身自带的特征。
//jvm会提供一个默认的构造方法,直到我们重新定义一个构造方法
构造方法的特点:
共有的,与类名相同,没有返回值
构造方法的用处在哪里?
初始化成员变量
This表示本类对象的引用
构造方法越多,代表在这个类初始化的时候,形态越多。
构造方法的重载(overload);
参数类型不同,参数次序不同,参数个数不同都能构成重载。
构造方法的重载
构造方法越多,实例化对象的类型就越多
类在编程中称为最小单元

9. 类的成员方法:

方法的概念:方法是一个类接受外部信息的其中的渠道。
方法在一个类中专门解决业务逻辑的。
public 返回值 方法名(参数列表){ return 返回值 }
10. 方法参数的传递:传值或者传递引用
对象的关系:
关联关系,类与类之间是可以互相调用的
方法的参数传递只能传递两种类型:
如果是要传值就是一个具体的值、
如果要传递引用,那么传递的是该对象的地址
11. static 用来修饰静态的方法,静态的代码模块,静态变量
12. 如果使用static所修饰 的方法或者变量,可以使用类名直接调用,不需要new对象来调用,
13.static修饰的变量在内存中只有唯一的一个地址 ,
14. 使用场景:只有在工具类中才可以使用,该方法被频繁的调用,确实节省内存空间
在非静态方法中是可以引用静态方法的
静态的代码模块无法调用非静态的

类的继承 extends

类与类的关系有哪些?
1. 关联(聚合)(has -a)
2. 继承关系 (is-a)
如果是关联关系,那么就是类调用类
所有的对象都是继承Object类,Java是单根继承的特点

单根继承的好处

能保证纯正的血统
子类可以调用父类的方法,减少代码的冗余度。
在父类的角度考虑问题,继承可以衍生父类的功能(扩大功能)

里氏替换原则

将多个类中重复的方法提取出来作为父类的方法,用多个方法去继承父类的方法

单根继承的不好

当父类的方法出现问题,子类调用的时候就也会出现问题

多继承的好处是什么??

方法更多

如果子类继承父类,子类可以调用父类的公有方法
子类调用父类的时候,父类的构造方法会被调用
Super关键字只能存在子类中,主要在子类的方法中调用父类的方法,包括构造方法
写在程序的第一行
super就是子类调用父类方法的关键字;
Super可以在子类的构造方法中调用父类的构造方法super();
因为需要调用父类任何的构造方法
重写(override)子类覆盖父类的同名方法,好处在于扩充子类的方法功能。

final关键字

表示最终的。如果用final所修饰的变量,称为常量(不能被改变或者赋值)
如果final修饰一个方法,那么该方法在子类中不能被重写
如果final修饰一个类,那么这个类不能被继承

14. 抽象类

abstact 关键字

public abstract class 类名{

}
  • 抽象类和普通类的区别在哪里?
    基类是可以实例化的,抽象类是不能被实例化的,也就是不能使用new 关键字
  • 定义一个抽象类的用途是什么?
  • 抽象的概念是不需要实际去做的,但是在实际应用中有两种实际用途:
    1. 父类某一个功能或者方法,需要子类强行去重写的,这个类必须是抽象类
    2. 父类对于某一个方法无法预知子类会怎么实现,那么该方法必须是抽象的
  • 抽象类在继承的关系图中起什么作用?
    承上启下的作用

如果一个类里面有抽象方法,必然是抽象类,反之抽象类不一定有抽象方法

接口 interface

接口的概念
接口是一种标准,所有实现该接口的子类都要实现这个标准。
接口也是一种契约,所有的实现该接口的子类都要实现该接口的条款
接口也是一种身份特征,所有的子类都具有该身份特征。
接口里面的所有方法都是抽象的,公有的。
接口里所有的成员变量都是常量。
接口可以继承接口
16. 多态
17. 什么是第多态?一个事物在不同的条件下,所表现出的多种形态
18. 在开发中使用多态的场景,主要使用用在方法的参数传递上,可以传递接口,也可以传递抽象类

异常

Exception
异常是一个对象
异常就是错误,是在程序编译阶段或者执行过程中的错误。
学习异常主要是调试程序的错误信息,根据错误信息来发现程序的bug
异常分类:运行时异常和编译异常
异常的级别ErrorException
Error:表示不可抗因素造成的
Exception:表示程序运行错误,是可以调试的
捕获异常的语法

 try{
        假设代码运行正常
}catch(异常类型){

}finally{
//不管程序是否出错,都执行
}

异常的类型必须要明确的,这样才能准确的找出错误。
throwsthrow的区别 声明异常和 抛出异常
声明异常(throws)>=抛出异常(throw)
自定义异常信息:标准的异常中无法描述错误信息,我们需要自己定义一个异常信息。
Catch的捕获需要从小到大
什么时候捕获异常,什么时候抛出异常?
如果我们调用的是标准的API文档的方法,如果该类抛出异常,我们必须要捕获。

在实际开发中,我们所编写的程序的功能执行成功与否,与外界有紧密关系(比如,参数传递,调用关系)必须要抛出异常

某些方法在调用的时候会抛出异常,抛出异常就必须要处理
例如在某些方法在API中描述的时候就把调用时可能会抛出的异常写在之中。
例如,方法中的参数错误传递,even
Example

**Class FileInputStream**
public FileInputStream( ) 
                throws  FileNotFoundException

**Throws:**
 [FileNotFoundException]  - if the file does not exist, is a directory rather than a regular file, or for some other reason cannot be opened for reading.
 [SecurityException]  - if a security manager exists and its checkRead method denies read access to the file.

猜你喜欢

转载自blog.csdn.net/qq_37913435/article/details/81414564