IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java11 接口与异常 -> 正文阅读

[Java知识库]Java11 接口与异常

static关键字

代码块:在构造方法前

static静态代码块:最先执行,且只执行一次

abstract抽象类

abstract抽象方法,只有方法名字,没有方法的实现。

  1. 不能new这个抽象类,只能靠子类去实现它;约束!
  2. 抽象类中可以写普通的方法。
  3. 抽象方法必须在抽象类中。

接口

接口:只有规范!自己无法写方法~专业的约束!约束和实现分离:面向接口编程。

接口的本质是契约!

声明接口的关键字是interface

接口中定义的基本类型都是静态常量:public static final

接口中的所有定义其实都是抽象的public abstract

*接口都需要实现类:类的结尾Impl,implements

实现了接口的类,就需要重写接口的方法

多继承,利用接口实现


异常

异常:Exception

检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。在编译时不能被简单的忽略。

运行时异常:是可能被程序员避免的异常。可以在编译时被忽略。

错误:错误不是异常,是脱离程序员控制的问题。在代码中通常被忽略。

异常处理机制

抛出异常

捕获异常

异常处理五个关键字:try、catch、finally、throw、throws

package com.wang.exception;

public class Demo01 {
    public static void main(String[] args) {
        int a = 0;
        int b = 0;

        //Ctrl + Alt + T
        try{ //try监控区域
            System.out.println(a/b);
        }catch (Error e){ //catch(想要捕获的异常类型!) 捕获异常
            System.out.println("Error");
            e.printStackTrace(); //打印错误的栈信息
        }catch (Exception e){
            System.out.println("Exception");
        }catch (Throwable t){
            System.out.println("Throwable");
        }finally { //处理善后工作
            System.out.println("finally");
        }
    }

}

在开发中,如果去调用别人写的方法时,是否能知道别人写的方法是否会发生异常?这是很难判断的。针对这种情况,Java总允许在方法的后面使用throws关键字对外声明该方法有可能发生异常,这样调用者在调用方法时,就明确地知道该方法有异常,并且必须在程序中对异常进行处理,否则编译无法通过。

如下面代码

public static void main(String[] args) {
    // TODO Auto-generated method stub
   int result = divide(4,2);
   System.out.println(result);
}

public static int divide(int x,int y) throws Exception
{
    int result = x/y;
    return result;
}

这时候 编译器上会有错误提示 Unhandled exception type Exception
所以需要对调用divide()方法进行try…catch处理

public static void main(String[] args) {
    
  try {
     int    result = divide(4,2);
      System.out.println(result);
   } catch (Exception e) {
    
      e.printStackTrace();
   }
  
}

public static int divide(int x,int y) throws Exception
{
    int result = x/y;
    return result;
}
}
package com.wang.exception;

public class Demo02 {
    public static void main(String[] args) {

        new Demo02().test(0,0);

    }

    //假设这方法中,处理不了这个异常,方法上抛出异常throws
    public void test(int a,int b) throws ArithmeticException{
        if(b==0){
            throw new ArithmeticException(); //主动抛出的异常,一般在方法中使用
        }
    }
}
  1. 编译时异常

    在Java 中,Exception类中除了RuntimeException 类及其子类外都是编译时异常。编译时异常的特点是Java编译器会对其进行检查,如果出现异常就必须对异常进行处理,否则程序无法编译通过。

处理方法

使用try… catch 语句对异常进行捕获

使用throws 关键字声明抛出异常,调用者对其进行处理

2.运行时异常

RuntimeException 类及其子类运行异常。运行时异常的特点是Java编译器不会对其进行检查。也就是说,当程序中出现这类异常时,即使没有使用try… catch 语句捕获使用throws关键字声明抛出。程序也能编译通过。运行时异常一般是程序中的逻辑错误引起的,在程序运行时无法修复。例如 数据取值越界。

3.自定义异常

JDK中定义了大量的异常类,虽然这些异常类可以描述编程时出现的大部分异常情况,但是在程序开发中有时可能需要描述程序中特有的异常情况。例如divide()方法中不允许被除数为负数。为类解决这个问题,在Java中允许用户自定义异常,但自定义的异常类必须继承自Exception或其子类。例子如下

package www.kangxg.jdbc;

public class DivideDivideByMinusException  extends Exception {
/**
 * 
 */
private static final long serialVersionUID = 1L;
 
public DivideDivideByMinusException(){
    super();
}

public DivideDivideByMinusException(String message)
{
    super(message);
}
}
package www.kangxg.jdbc;

public class Example {
public static void main(String[] args) throws Exception {
    
    try {
         int    result = divide(4,-2);
          System.out.println(result);
     } catch (DivideDivideByMinusException e) {
        
         System.out.println(e.getMessage());
     }
  
}

public static int divide(int x,int y) throws DivideDivideByMinusException
{
    if(y<0)
    {
        throw new DivideDivideByMinusException("被除数是负数");
    }
    int result = x/y;
    return result;
}
    }
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-18 12:34:18  更:2021-08-18 12:36:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 5:43:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码