java编程中的异常分析及面向对象的思考总结[图]
1.异常:
程序中出现的不正常现象。
2.异常的由来:
程序在运行的过程中出现了不正常的情况,程序把它看成对象提取了属性行为(名字,原因,位置等信息)
形成了各种异常类
3.异常的分类:(throwable)
1.Error(错误):运行中出现的严重错误,不需要我们进行更改。
2.Exception():运行中出现的不严重的错误,我们可以尝试去更改.
4.Exception:分类:
第一种分类:系统异常:系统提前定义好的,我们直接使用
自定义异常:需要我们自己定义
第二种分类:编译异常:在编译阶段抛出异常,处理异常
运行时异常:在运行阶段抛出异常,处理异常
public class Demo8 {
public static void main(String[] args) {//4.这里也没有处理异常的能力,继续向上抛,抛给JVM(java虚拟机)
//JVM的处理办法:就是调用异常对象的打印方法,将异常的名字,位置,原因打印到控制台
Math math = new Math();
math.div(2, 0);//3.抛给了这里,这里也没有处理异常的能力,继续向上抛,抛给main
}
}
class Math{
public int div(int a,int b){//2.抛给了这里,这里也没有处理异常的能力,继续向上抛,抛给调用方法的位置
return a/b;//1.先创建除数为零的异常对象(new ArithmeticException()),这里没有处理异常的能力
//将异常向上抛,抛给它所在的方法
}
}

5.异常的特点:
当程序出现多个异常的时候,程序会打印异常信息并中断程序,所以当同时出现多个异常的时候,只能执行第一个.
6.常见的异常
public class Demo2 {
public static void main(String[] args) {
int[] arr = new int[]{4,5,6};
//数组下标越界异常  ArrayIndexOutOfBoundsException
//System.out.println(arr[7]);
arr = null;
//空指针异常  NullPointerException
System.out.println(arr[0]);
}
}
7.对异常的处理
检测异常,捕获异常,让异常不影响下面代码的执行.
* try{
*         可能出现异常的代码
* }catch(Exception e){//捕获异常   e就是要捕获的异常
*         对出现异常的代码的处理过程
* }
*
* 继续执行下面正常的代码
public class Demo3 {
public static void main(String[] args) {
Math math = new Math();
try {
int value = math.div(4, 0);//3.抛到这里  new ArithmeticException()
//只要try内部的代码发生了异常,catch会立刻捕获异常,所以这里的代码不会执行.
//只有try里面的代码没有发生异常,这里的代码才会执行.
System.out.println("value:"+value);
} catch (Exception e) {//4.捕获异常: e =  new ArithmeticException()
//e.printStackTrace();//可以打印异常的位置,原因,名字等信息
System.out.println(e.getMessage());//异常的原因
//System.out.println(e.toString());//异常的名字,原因
System.out.println("处理异常的代码");
}
System.out.println("go on");
}
}
class Math{
public int div(int a,int b)//2.抛到这里  new ArithmeticException()
{
return a/b;//1.产生并抛出  new ArithmeticException()
}
}
8.多异常的处理
* try{
*         可能出现异常的代码
* }catch(异常一 e){//捕获异常 e就是要捕获的异常
*         对出现异常的代码的处理过程
* }catch(异常二 e){//捕获异常 e就是要捕获的异常
*         对出现异常的代码的处理过程
* }catch(Exception e){//捕获异常 e就是要捕获的异常
*         对出现异常的代码的处理过程
* }
*
* 继续执行下面正常的代码
public static void main(String[] args) {
Math1 math1 = new Math1();
try {
math1.div(3, 0);
} catch (ArithmeticException e) {
e.printStackTrace();
}catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}catch (Exception e) {//注意:一定要将包含Exception的异常捕获放后面,不然后面的异常执行不到了父类异常所有异常都能接收
e.printStackTrace();
}
System.out.println("go on");
}
}
class Math1{
int[] arr = {3,5};
public int div(int a, int b){
System.out.println(arr[1]);
return a/b;
}
}
* try{
*         可能出现异常的代码
* }catch(Exception e){//捕获异常   e就是要捕获的异常
*         对出现异常的代码的处理过程
* }finally{
*         必须执行的代码:作用:用于资源的释放:比如:多线程中的锁对象,流的关闭,数据库的关闭等
* }
*
*
*
* 继续执行下面正常的代码
*
* try{
*         获取资源
* }finally{
*         释放资源.
*         必须执行的代码:作用:用于资源的释放:比如:多线程中的锁对象,流的关闭,数据库的关闭等
* }
public class Demo5 {
public static void main(String[] args) {
Math2 math2 = new Math2();
try {
math2.div(22, 0);
} catch (ArithmeticException e) {
e.printStackTrace();
//return;//让当前的方法结束,finally里面的代码还是可以执行
System.exit(0);//退出程序,finally里面的代码不会再执行
} finally {
//必须执行的代码
System.out.println("finally");
}
System.out.println("go on");
}
}
class Math2{
public int div(int a,int b)//2.抛到这里  new ArithmeticException()
{
int[] arr = {3,4};
System.out.println(arr[1]);
return a/b;//1.产生并抛出  new ArithmeticException()
}
}
9.自定义异常
自定义异常:自己定义的异常类,由于Exception里面有异常的基本功能,一般我们都写Exception的子类
*
* 为什么要有自定义异常?
* 答:系统没有定义的异常需要我们自己定义,我们解决的是系统没有解决的问题.
*
* 比如:订单异常     用户信息异常    除数为负数
*
* 异常的分类:
* 编译异常:在编译阶段抛出,处理的异常---除RuntimeException以外的所有异常
*             所有相关的工作都要由我们自己完成
* 运行时异常:在运行阶段抛出,处理的异常--RuntimeException异常
*             所有的工作我们都可以不管
*
* 异常处理的方式:
* 1.异常的声明
* 异常声明后,调用者去处理,调用者不处理,继续声明直到交给JVM
* 2.trycatch
* 实现的是真正的对异常的处理
*
*
* 让谁去处理异常比较合适?
* 谁调用可能出现异常的方法,谁负责处理异常
*/
//自定义一个负数异常类:
class FuShuException extends Exception{
public FuShuException() {
}
public FuShuException(String message) {
super(message);
}
}
public class Demo6 {
public static void main(String[] args)
{
Math3 math3 = new Math3();
//1.trycatch  2.继续声明
try {
math3.div(3, -2);
} catch (FuShuException e) {
e.printStackTrace();
}
}
}
class Math3{
//声明异常,告诉别人我有可能发生异常
public int div(int a,int b) throws FuShuException
{
/*
*throw是抛出的意思 
*throws是声明异常的意思
*/
if (b<0) {
throw new FuShuException("除数为负数了");//手动生成并抛出除数为负数异常
}
return a/b;
}
}
JAVA面向对象:
1. 万物皆对象
2. 面向对象和面向过程的区别:
面向过程主要是描述一件事情或者是一个过程的执行
面向对象编程主要是用语言描述将现实世界中存在的事物,或者规律。无限接近机器识别的语言。
3.对象:
对象包括  属性  和  特征 
4.类:类是所有对象的抽象概念或者集合(物以类聚),对象称为类的具体实例。
类是抽象的,对象是具体
5.面向对象的三大特征:
封装 , 继承 , 多态
6.封装:隐藏内部实现细节,对外提供公共的访问方法;
好处:代码设计者角度,安全性,防止代码被修改破坏; 
调用者角度,忽略实现细节,只关注功能怎么用。
设计:成员变量尽量私有化(private),对外提供公有方法
继承:从当前类中派生出一个新类,这个新类可以获得已有类的全部(非private)属性和方                法,并可以添加自己的属性和方法。即子类继承父类。
多态:对象的多种形态,以继承为基础
对象的多态:向上转型  和向下转型
方法的多态:方法的重载方法的覆写
7.package  包
对所有class进行分类,以便方便管理
命名规则:小写字母,一般都是四级目录:com.公司名.项目名.模块名称
8.构造方法:什么是构造方法?构造方法是一个类在初始化的形态,类本身自带特征。
jvm在构建一个类的时候,会构建一个默认的构造方法。
构造方法的特点:
公有的、和类名相同、没有返回值
构造方法的用处在哪里?
初始化成员变量。
构造方法越多,代表在这个类初始化的时候,形态越多,功能约强大。
构造方法的重载概念(overload)
构造方法的重载,参数类型不同,参数个数不同,参数次序不同 都能构成重载。仅仅限于本类。
9.类的成员方法:
方法的概念:方法是一个类接收外部信息的其中的渠道。
方法在一个类中专门解决业务逻辑的。
public  返回值 方法名(参数列表){
// return 返回值;
}
10.方法参数的传递:传值或者传递引用
方法的参数传递只能传递两种类型:
如果要是传值,就是一个具体的值
如果要传递引用,那么传递的该对象的地址
11.static 用来修饰静态的方法,代码块或者变量,可以直接使用类名调用,不需要new对象调用
static 修饰的变量在内存中只有一个地址
使用场景:只有在工具类中才可以使用,节省内存空间
12.static 用来修饰静态的方法、静态的代码模块、静态变量
如果使用static所修饰的方法或者变量,可以使用类名直接调用,
不需要new对象来调用.
static 修饰的变量在内存中只有唯一的一个地址,
使用场景:只有在工具类中才可以使用,该方法被频繁的调用,确实节省内存空间
13.类的继承 extends
类与类的关系有哪些?
第一种是关联(has-a)关系(聚合)、第二种是继承(is-a)关系
如果是关联关系,那么就是类调用类的关系。
所有的对象都是继承Object类,java是单根继承的特点
单根继承的好处是什么?不好的地方?
子类可以调用父类的方法,减少代码的冗余度。
在父类的角度考虑问题,继承可以延伸父类的功能(扩大功能)
如果子类继承父类,子类可以调用父类的公有方法,不能调用父类的私有方法
子类调用父类的时候,父类的构造方法会被调用
14.super关键字只能存在子类中,主要在子类的方法中调用父类的方法,包括构造方法,一般写在程序的第一行
super可以在子类的构造方法中调用父类的构造方法super();
重写(override)子类覆盖父类的同名方法,好处在于扩充子类的方法功能。
里氏替换原则,如果B类和C类有相同的属性和方法,就应该把相同的属性和方法提取到A类中,让B类和C类继承A类
15.final关键字
表示最终的。如果用final 所修饰的变量,称为常量(不能被改变或者赋值)。
如果final修饰一个方法,那么该方法在子类中不能被重写。
如果final 修饰一个类,那么这个类不能被继承。
16.抽象类 abstract 关键字
public abstract class 类名{
}
抽象类和普通类的区别是什么?抽象类是不能被实例化的,也就是不能使用new 关键字,普通类是可以实例化的

如果一个类有抽象方法,那么这个类必然是抽象类,反之抽象类不一定有抽象方法。追风筝的人读后感(http://www.simayi.net/duhougan/5505.html)心得体会,定义一个抽象类的用途在哪里?抽象的概念是不需要实际去做的,但是在实际应用中有两种场景用途:

1、父类某一个功能或者方法,需要子类强行去重写的,那么该方法必须是抽象的,这个类必须是抽象类。
2、父类对于某一个方法,无法预知子类会怎么实现,那么该方法必须是抽象的。
抽象类在继承的关系图中起到什么作用?
承上启下的作用。
17.接口 interface
接口的概念:
接口是一种标准,所有实现该接口的子类都要实现这个标准。
接口也是一种契约,所有实现该接口的子类都要实现该契约的条款。
接口也是一种身份特征,所有的子类都具有该身份特征。
接口里面的所有方法都是抽象的、公有的。
接口里所有的成员变量都是常量。
接口可以继承吗?接口是可以继承接口的。
18.多态
什么是多态?一个事物在不同的条件下,所表现的多种形态。
在开发中使用多态的场景,主要是使用在方法的参数传递上,可以传递接口、也可以传递抽象类
instanceof 来判断两个类之间是否有关系
对象的向上和向下转型:
向上转型:统一标准   A父类  cdef子类都可以按照父类的标准执行,向下转型的意义:使用子类独有的方法。

java编程中的异常分析及面向对象的思考总结[图]相关推荐

  1. JAVA 代码交互率低的原因分析,深入剖析Java编程中的中文问题及建议最优解决方法...

    说明:本文为作者原创,作者联系地址为: josserchai@yahoo.com .由于 Java 编程中的中文 问题是一个老生常谈的问题,在阅读了许多关于 Java 中文问题解决方法之后,结合作者的 ...

  2. 如何优雅地在 Java 8 中处理异常

    2019独角兽企业重金招聘Python工程师标准>>> 前言 Java 8 引入的流 (Stream) API 和 lambda 表达式为我们打开了新世界的大门,自此之后我们也可以在 ...

  3. java编程里的values怎么使用,详解Java编程中super关键字的用法

    这篇文章主要介绍了Java编程中this与super关键字的用法,包括从内存结构方面分析super的作用域,需要的朋友可以参考下 通过用static来定义方法或成员,为我们编程提供了某种便利,从某种程 ...

  4. Java编程中“为了性能”需做的26件事

    下面是参考网络资源总结的一些在Java编程中尽可能要做到的一些地方. 1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说, ...

  5. Java编程中“为了性能”尽量要做到的一些地方 [转]

    最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源总结的一些在Ja ...

  6. Java编程中“为了性能”尽量要做的26点

    最近的机器内存又爆满了,除了新增机器内存外,还应该好好review一下我们的代码,有很多代码编写过于随意化,这些不好的习惯或对程序语言的不了解是应该好好打压打压了. 下面是参考网络资源总结的一些在Ja ...

  7. Java编程中的注意点

    Java编程中的注意点 Java基础部分 1.Java存放浮点数精度问题 Java中在HashMap存放浮点数会有精度问题,可以使用字符串来存放 2.while(k–)的相关问题 上面那个while的 ...

  8. JAVA语言异常,Java语言中的异常

    1.异常分类 从产生源头来看,Java语言中的异常可以分为两类: JVM抛出的异常.比如:访问null引用会引发NullPointerException:0作为除数,如9/0,JVM会抛出Arithm ...

  9. Java编程中忽略这些细节,Bug肯定找上你

    摘要:在Java语言的日常编程中,也存在着容易被忽略的细节,这些细节可能会导致程序出现各种Bug. 本文分享自华为云社区<Java编程中容易忽略的细节总结丨[奔跑吧!JAVA]>,作者:j ...

最新文章

  1. python 连续矫正_Python实现系统时间自动校正 | 学步园
  2. 自定义一个安全的rm指令
  3. 为什么总线要用一根来表示一bit
  4. 爬虫采集-基于webkit核心的客户端Ghost.py [爬虫实例]
  5. MySQL查询语种关键字_SQL——SQL语言全部关键字详解
  6. xss 跨站脚本漏洞 php,跨站脚本漏洞(XSS)基础讲解
  7. 程序员面试100题之十三:求二叉查找树的镜像
  8. 2018 年视频监控企业竞争力分析 海康威视连续七年蝉联全球第一
  9. 计算机组成原理随笔(一)
  10. Sub-process /usr/bin/dpkg returned an error code (1)解决办法
  11. android 用年月日初始化date_Android 系统自带api选择年月日 日历
  12. D3 transtion
  13. DDL触发器与DML触发器比较
  14. 三点弯曲弹性模量怎么计算公式_腰背肌锻炼:五点支撑和三点支撑(视频)
  15. 索引 2 超出范围。_重点推荐:音响灯光行业搜索引擎推广教学
  16. C++调用C#编写的com组件方法
  17. ES6学习笔记六(新增数据结构)
  18. 零基础自学SQL课程 | SQL中的日期函数大全
  19. 初等函数导数公式 ,积分表
  20. blendshape变形器详细解释

热门文章

  1. 【开发工具 - 安装手册】BeyondCompare4 下载与安装 + 永久免费使用
  2. 普通手机安装谷歌商店上的app
  3. 黑马程序员_JAVA之面向对象(封装,继承和多态)
  4. random.nextInt()的用法
  5. java代码实现龙卷风_Java-使用二叉树实现快速排序-遁地龙卷风
  6. 信息收集------总
  7. eolinker本地部署教程
  8. Ubuntu20.04出现段错误核心已转储问题解决方案
  9. Android无障碍开发(AccessibilityService)入门
  10. 音频数据的SD/Flash读取与DAC播放