Java面向对象06

初识面向对象

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

什么是面向对象

面向对象编程的本质是:以类的方式组织代码,以对象的组织(封装)数据
三大特性:封装 继承 多态
从认识论角度考虑是现有对象后又类。对象,是具体的事物。类,是抽象的,是对对象的抽象。
从代码运行角度是先有类后又对象。类是对象的模板。

方法回顾和加深

修饰符 返回值类型 方法名(...){
        //方法体
        return 返回值;
    }

方法的定义
修饰符
返回类型
break:跳出switch,结束循环和return的区别
方法名:注意规范 见名知意
参数列表:(参数类型,参数名)…
异常抛出:

由于static修饰的表示属于类,因此如果想访问类的方法或者变量,则可以直接通过 类名.方法名()或者 类名.变量名进行访问
所谓动态和静态的区别:对于一个类来说,如果没有被static所修饰的成员变量或者成员方法,那么每实例一个新的对象(new),这些非static修饰的属于对象。

方法的调用:递归
静态方法
非静态方法
形参和实参
值传递和引用传递
this关键字

基本数据类型和引用类型数据
对于基本数据类型来说,给形参传递的是实参值得副本;对于引用类型数据来说,传递的是地址的副本。但由于地址的副本和原来的相同,因此传递过去后形参也指向同一个内存空间中。

对象的创建和分析

类与对象的关系

类是一种抽象的数据类型,它是对一类事物整体描述/定义,但是并不能代表某一具体的事物。
对象是抽象概念的具体实例

创建与初始化对象

使用new关键字创建对象
类中的构造器也称为构造方法,是再进行创建对象的时候必须要调用的。并且构造器有一下俩个特点:

  • 1.必须和类名字相同
  • 2.必须没有返回类型,也不能写void
    作用:
  • 1.new 本质实在调用构造方法
  • 2.初始化对象的值
    注意点:
  • 1.定义有参构造之后,如果想使用无参构造,显示的定义一个无参的构造(原本是默认)
  • alt+Insert 生成构造器
  • this指向类自己本身

创建对象内存分析

在这里插入图片描述

面向对象的三大特性

封装

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

  • 提高程序的安全性,保护数据
  • 隐藏代码的实现细节
  • 统一接口
  • 系统可维护性增加

继承

继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模。
extends的意思是“扩展”。子类是父类的扩展
Java中只有单继承,没有多继承!

  • 继承是类和类之间的一种关系。除此之外,类和类之间的关系还有依赖、组合、聚合等。
  • 继承关系的俩个类,一个为子类(派生类),一个为父类(基类)。子类继承符类,使用关键字extends
  • 子类和父类之间,从意义上讲应该具有“is a”的关系。

super注意点:

  • 1.super调用父类的构造方法,必须在构造方法的第一个
  • 2.super必须只能出现在子类的方法或者构造方法中!
  • 3.super和this不能同时调用构造方法!
    Vs this:
    代表的对象不同:
    this:本身调用者这个对象
    super:代表父类对象的应用
    前提
    this:没有继承也可以使用
    super:只能在继承条件才可以使用
    构造方法
    this();本类的构造
    super();父类的构造

静态的方法和非静态的方法区别很大
静态方法:方法的调用只和左边,定义的数据类型有关
非静态:调用的是对象的方法,重写 protected 和public

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

  • 1.方法名必须相同
  • 2.参数列表必须相同
  • 3.修饰符:范围可以扩大:public>protected>Default>private
  • 4.抛出异常:范围,可以被缩小,但不能扩大;ClaaaNotFoundException -->Exception(大)
    重写:子类的方法和父类必须要一致,方法体不同,返回值一样
    为什么需要重写:
  • 父类的功能,子类不一定需要,或者不一定满足!
  • Alt+Insert:override;

多态

即同一个方法可以根据发送对象的不同而采用多种不同的行为方式。
一个对象的实际类型是确定的,但可以指向对象的引用类型有很多
定义格式:父类类型 变量名=new 子类类型();
多态存在的条件:

  • 1.有继承关系
  • 2.子类重写父类的方法
  • 3.父类引用指向子类对象

多态中成员的特点
多态成员变量:编译运行看左边
Fu f=new Zi();
System.out.println(f.num);//f是Fu中的值,只能取到父中的值
2.多态成员方法:编译看左边,运行看右边
Fu f1=new Zi();
System.out.println(f1.show());//f1的门面类型是Fu,但实际类型是Zi,所以调用的是重写后的方法。
注意:多态是方法的多态,属性没有多态性

在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。

多态注意事项:

  • 1.多态是方法的多态,属性没有多态
  • 2.父类和子类,有联系 类型转换异常! ClassCastException
  • 3.存在条仔:继承关系,方法需要重写,父类引用指向子类对象!
    - 1.static 方法,属于类,它不属于实例
    - 2.final 常量;
    - 3.private 方法
    多态的转型
    多态的转型分为向上转型和向下转型两种
    向上转型:把子类转换为父类
    多态本身就是向上转型过的过程
    使用格式:父类类型 变量名=new 子类类型();
    适用场景:当不需要面对子类类型时,通过提高扩展性,或者使用父类的功能就能完成相应的操作。
    向下转型:把父类转换为子类
    一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用类型转为子类引用各类型
    使用格式:子类类型 变量名=(子类类型) 父类类型的变量;
    适用场景:当要使用子类特有功能时。

instanceof
作用:用来判断某个对象是否属于某种数据类型。

静态代码块 <- 匿名代码块 <-构造方法

抽象类的接口

abstract 抽象类 单继承 (接口可以实习那多继承)
抽象类可以没有抽象方法,有抽象的必须是抽象类
约束~有人帮我们实现
abstract,抽象方法,只有方法名字,没有方法的实现
1.不能new这个抽象类,只能靠子类去实现它:约束!
2.抽象类中可以写普通的方法
3.抽象方法必须在抽象类中
继承抽象类的子类,都必须继承抽象类的所有方法

接口:只有规范!自己无法写方法,专业的约束!约束和实现分离:面向接口编程~
作用:
1.约束
2.定义一些方法,让不同的人实现~ 10 —> 1
3.public abstract
4.public static final
5.接口不能被实例化,接口中没有构造方法
6.implements可以实现多个接口
7.必须要重写接口中的方法

内部类及OOP实战

…晕菜了

异常

Exception
检查性异常
运行时异常
错误ERROR

ArrayIndexOutOfBoundException 数组下标越界
NullPointerException 空指针异常
ArithmeticException 算术异常
MissingResourceException 算术异常
MissingResourceException 找不到类
…这些异常时不检查异常,程序中可以选择捕获处理,也可以不处理。
这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生
Error和Exception的区别:Error通常时灾难性的致命错误,时程序无法控制和处理的,当出现这些异常时,Java虚拟机(JVM)一般会选择终止线程;Exception通常情况下时可以被程序处理的,并且在程序中应该尽可能的去处理这些异常。

异常处理五个关键字
try catch finally throw throws
处理运行时异常时,采用逻辑去合理规避同时辅助try-catch处理
在多重catch块后面,可以加上一个catch(Exception)来处理可能会被遗漏的异常
对于不确定的代码,也可以加上try-catch,处理潜在的一茶馆
尽量去处理异常,切记只是简单地调用printStackTrace()去打印输出
具体如何处理异常,要根据不同的业务需求和异常类型去决定
尽量添加finally语句块去释放占用的资源

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值