文章目录

  • 多态 异常处理
    • 1. 多态【重点】
      • 父类的引用指向子类的对象,或者接口的引用指向遵从接口的类对象,这就是多态
    • 2. 异常处理
      • 2.1 生活中的异常
      • 2.2 Throwable类
      • 2.3 Exception 和 Error
      • 2.4 如何处理异常
        • 2.4.1 捕获异常
        • 2.4.2 抛出异常
      • 2.5 自定义异常

多态 异常处理

1. 多态【重点】

父类的引用指向子类的对象,或者接口的引用指向遵从接口的类对象,这就是多态
最主要的作用就是拓宽方法的参数范围!!!
拓宽方法的返回值范围!!!
package com.qfedu.a;class Animal {}class Dog extends Animal {}class Cat extends Animal {}class Tiger extends Animal {}/*
Animal 是目前代码中的一个基类
Dog, Cat, Tiger都是Animal的子类
同时我们可以认为 Dog, Cat, Tiger都是动物*/
public class Demo1 {public static void main(String[] args) {Animal animal = new Animal();Dog dog = new Dog();Cat cat = new Cat();Tiger tiger = new Tiger();giveMeAnimal(animal);giveMeAnimal(dog);giveMeAnimal(cat);giveMeAnimal(tiger);System.out.println();// Animal类的引用去保存其他Animal类或者Animal对应的子类对象Animal animal1 = returnAnimal();System.out.println("返回" + animal1.getClass());}/*** 这里是需要一个动物类对象的方法** @param animal 需要的是Animal类对象*/public static void giveMeAnimal(Animal animal) {System.out.println("获取" + animal.getClass());}/*** 返回一个动物类对象** @return 返回的是一个Animal类对象,动物类对象*/public static Animal returnAnimal() {return new Tiger();}
}
package com.qfedu.a;/*** USB接口,要求所有的USB设备完成connect方法*/
interface USB {void connect();
}/*** 键盘是USB设备,需要遵从USB接口,完成USB接口规定的方法*/
class Keyboard implements USB {@Overridepublic void connect() {System.out.println("键盘噼里啪啦写代码~~~");}
}/*** HHKB是键盘类的子类,同时也可以认为是USB设备*/
class HHKB extends Keyboard {@Overridepublic void connect() {System.out.println("HHKB 让程序员快乐的键盘~~~");}
}/*** 鼠标是USB设备,需要遵从USB接口,完成USB接口规定的方法*/
class Mouse implements USB {@Overridepublic void connect() {System.out.println("鼠标点点点~~~");}
}/*** Logi类是鼠标类的子类,同时也是USB设备*/
class Logi extends Mouse {@Overridepublic void connect() {System.out.println("Logi MX Master 2S");}
}/*** 电脑类,不是USB设备,但是可以使用USB接口*/
class PC {/*** 电脑类使用USB接口的方法,这里需要的参数是USB接口* @param usb USB接口*/public void useUSBInterface(USB usb) {// USB接口的方法,是规定USB设备需要完成的方法。usb.connect();}
}public class Demo2 {public static void main(String[] args) {PC pc = new PC();Keyboard keyboard = new Keyboard();Mouse mouse = new Mouse();// 电脑使用USB接口,传入USB设备键盘pc.useUSBInterface(keyboard);// 电脑使用USB接口,传入USB设备鼠标pc.useUSBInterface(mouse);// 传入一个HHKB的匿名对象,同时也是USB设备pc.useUSBInterface(new HHKB());// 传入一个Logi的匿名对象,同时也是USB设备pc.useUSBInterface(new Logi());}
}

2. 异常处理

2.1 生活中的异常
生病了~~~
医生: 你怎么了
我: 我难受
医生:你那里南里
我: 我头疼
医生:为什么头疼。吃什么东西了,多长时间了
我: 昨天完成喝了两斤江小白,4升果粒橙,10杯扎啤
医生小声嘀咕: 该错误,异常都是有前因后果的!!!Debug而生
写bug3000+BUG ~ 20BUG
2.2 Throwable类
Throwable Java中所有异常和错误的基类
--| Exception 异常 可以处理的
--| Error 错误 GG思密达需要学习的方法:构造方法:Throwable();创建一个Throwable类对象,Throwable类对象内错误或者异常信息为nullThrowable(String message);创建一个Throwable类对象,并且使用message作为错误或者异常信息成员方法:String toString(); 当前异常或者错误的简要信息描述String getMessage();获取当前异常或者错误信息void printStackTrice();展示错误或者异常的前因后果
package com.qfedu.b_throwable;public class Demo1 {public static void main(String[] args) {Throwable throwable = new Throwable("因为穷,所以异常");System.out.println(throwable.getMessage());System.out.println(throwable.toString());throwable.printStackTrace();System.out.println();test();}public static void test() {new Throwable("前因后果").printStackTrace();}
}
2.3 Exception 和 Error
Exception 异常 处理异常
Error 错误 无法处理!!!只能避免错误!!!/*
java.lang.OutOfMemoryError内存溢出错误!!!*/
// long[] array = new long[1024 * 1024 * 1024];
/*
java.lang.NullPointerException空指针异常!!!*/
int[] array = null;
array[10] = 10;
2.4 如何处理异常
2.4.1 捕获异常
使用的结构try {// 有可能出现异常的代码} catch (/* 对应的异常类型 */) {// 对应当前异常类型处理方式,目前只能打印printStackTrace}
package com.qfedu.b_throwable;/*
try catch使用注意事项:1. 代码中出现异常,从异常位置开始,代码会终止运行2. 使用try catch捕获异常之后,JVM认为当前代码中不存在任何异常,可以继续运行3. 在try 代码块中如果发现代码的异常类型有多种情况,这里需要在添加对应当前异常的catch块4. 在try代码块中,有且只会发生一种异常,从异常位置开始,代码不会继续运行,进入catch块处理5. catch块使用Exception是允许的,但是是用于最终的处理方案,防止有异常被漏掉。不能作为所有异常的处理方式!!!异常处理,做到对症下药!!!*/
public class Demo3 {public static void main(String[] args) {test(1, 1, null);}public static void test(int num1, int num2, int[] arr) {// 这个代码有可能存在异常,这里采用捕获操作int ret = 0;try {ret = num1 / num2;arr[0] = 10;} catch (Exception e) {System.out.println("所有的异常他爹");e.printStackTrace();}System.out.println("ret : " + ret);}
}
// Alt + Enter
2.4.2 抛出异常
高级版参数合法性判断。
如果方法运行前,发现参数是不符合要求的,这里终止方法运行,并且给予用户错误提示。throw在方法中指定条件下抛出对应的异常。
throws在方法的声明位置告知调用者,当前方法有哪些异常抛出。
package com.qfedu.b_throwable;/*
抛出异常注意事项:1. 代码中只要指定了throw 抛出异常,从抛出异常位置开始,代码就不在执行,之后的代码都是无效代码2. 如果代码中存在多个异常需要抛出,需要对症下药针对不同的情况抛出3. 一个方法抛出多个异常,可以在方法声明位置throws之后使用逗号隔开4. 调用一个带有异常抛出的方法,需要在调用方法位置对于当前抛出的异常进行处理可以选择抛出,可以选择捕获!!!在开发过程中你可以选择抛出,可以选捕获,但是到了用户层面记得一定是捕获!!!*/
public class Demo4 {public static void main(String[] args) throws ArithmeticException, NullPointerException {try {test(1, 0, null);} catch (ArithmeticException e) {// 捕获算术异常,展示效果System.out.println("算术异常");} catch (NullPointerException e) {System.out.println("数组异常");}System.out.println();test(1, 0, null);}/*** @param num1* @param num2* @throws ArithmeticException 告知调用者这里存在一个算术异常抛出* @throws NullPointerException 数组空指针异常*/public static void test(int num1, int num2, int[] array)throws ArithmeticException, NullPointerException {/* 参数合法性判断if (0 == num2 || null == array || array.length == 0) {System.out.println("Input Parameter is invalid!");return;}*/if (0 == num2) {// 当前方法中参数不合法,抛出一个算术异常throw new ArithmeticException("算术异常 / by zero");}if (null == array || array.length == 0) {throw new NullPointerException("数组异常");}int ret = num1 / num2;}
}
2.5 自定义异常
Java中异常类型非常的多,但是也不能满足我们生活
例如:没有对象异常穷异常没有流量异常格式:class 自定义异常类名 extends Exception {一般情况下完成一个无参数构造方法和一个String类型参数的构造方法以及你现在不会写的一些针对与当前异常的处理方式方法,}

希望大家关注我一波,防止以后迷路,有需要的可以加我Q讨论互相学习java ,学习路线探讨,经验分享与java Q:2415773436

Java第十天:多态 异常处理相关推荐

  1. (十)Core Java 面向对象(封装,继承,多态,接口) -02 (96)

     目录 :        24 ). 面向对象(聚集关系) 25 ). 面向对象(子父类中变量的特点) 26 ). 面向对象(子父类中函数的特点-覆盖) 27 ).  面向对象(子父类中构造函数的特点 ...

  2. java第十四章上机四客户类_java语言程序设计教学大纲.doc

    java语言程序设计教学大纲.doc 还剩 5页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 第六章 结构控制 2 2第七章 数组 2第八章 字符串 ...

  3. Java这十年 - Java技术本纪 (3)

    Java技术本纪 Java虚拟机的  10    年 文/曹晓刚 Java虚拟机的起源与构造 当我们说到"Java"这个词的时候,指的是四个相互关联的概念:Java语言.Java ...

  4. java第十九次学习笔记

    java第十九次学习笔记 异常 java第十九次学习笔记 前言 一.try catch 二.多个异常如何处理 前言 斯人若彩虹遇上方知有 一.try catch package Demo01;impo ...

  5. java培训:Java的十大算法

    想要学好java语言,就要打好基础,java要学习的东西有很多,今天小编就来和大家说下java的十大算法. 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个 ...

  6. 【转载】Java异常控制机制和异常处理原则

    转载自Java异常控制机制和异常处理原则 Java异常控制机制又被称为"违例控制机制". 捕获程序错误最理想的时机是在编译阶段,这样可以彻底避免错误的代码运行.但并非所有的错误都能 ...

  7. Java子线程中的异常处理(通用)

    Java子线程中的异常处理(通用) 参考文章: (1)Java子线程中的异常处理(通用) (2)https://www.cnblogs.com/toplist/p/7594557.html 备忘一下.

  8. java多态口诀,Java之路---Day12(多态),多态Java

    Java之路---Day12(多态),多态Java 2019-10-26-22:40:09 目录: 1.多态的概念 2.多态的分类 3.实现多态的三个必要条件 4.多态的格式 5.多态成员变量的使用特 ...

  9. 学习Java的十大理由,益处太多了

    Java应该是软件开发同学最熟悉的一种开发语言,古老但很流行,再加上现在大数据发展形势一片大好,更让Java的魅力十足.Java是任何人都会掌握的最基本的编程语言之一,因此简单.然而,使用Java开发 ...

最新文章

  1. 日记 [2008年03月26日]
  2. Spark Streaming metadata checkpoint
  3. count_sort计数排序OpenMP的并行化
  4. 真恶心,用安卓模拟器开微信不能找附近的人
  5. 【渝粤教育】21秋期末考试成本会计10168k2
  6. 首次构建android studio gradle 下载缓慢的问题
  7. python multiprocessing 和tcp
  8. 过滤你不想看见的网页里的东西
  9. Linux 常用开关机以及7个启动级别
  10. 熵权法求权重的Matlab实现
  11. TCP/IP,Linux下多进程编程,进程复制函数fork,双返回值函数,通过父进程复制一份代码相同的子进程,父子进程执行顺序由调度算法决定,代码中获取进程执行用户的函数,数据共享状态
  12. 解决fatal: No configured push destination.
  13. Android模仿微信浮窗功能的效果实现
  14. zblog php wordpress,ZblogPHP转换WordPress教程
  15. GitHub上1.5万Star的开源抢票神器!
  16. ROSMoveit中机械臂的点动(Jog)实现
  17. 小程序云开发,CMS内容管理系统
  18. 为什么他们能成为大师-7位华人诺贝尔科学奖得主的成功法则
  19. H5流式播放(FMP4转封装与mediaSource)
  20. 一方库、二方库、三方库 概念

热门文章

  1. 我与《JavaScript高级程序设计》的相爱相杀----JavaScript摘记
  2. 麦克斯韦方程组及本构关系
  3. “ 请找出下面重复的字”
  4. 日常上网必备趣味,实用的100个网站
  5. 润和软件推出HarmonyOS物联网系列模组Neptune,助力Harmony生态
  6. Navicat Premium 12安装包和破解补丁(亲测有效)
  7. Java中,File创建一个文件
  8. Shapefile格式数据去除投影坐标系
  9. time_t c语言 2038,什么是2038问题?
  10. html文标题党,教你成为微信公众号推文标题党