Java 异常处理、继承、重写/重载

news2024/9/28 11:16:22

一、java异常处理:

三种类型的异常:检查性异常、运行时异常、错误。

所有的异常类是从java.lang.Exception类继承的子类。Exception类是Throwable类的子类。除了Exception类外,Throwable还有一个子类Error。

异常类有两个主要的子类:IOException 类和 RuntimeException 类。

Java非检查性异常:

异常

描述

ArithmeticException

当出现异常的运算条件时,抛出此异常。例如,一个整数"除以零"时,抛出此类的一个实例。

ArrayIndexOutOfBoundsException

用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。

ArrayStoreException

试图将错误类型的对象存储到一个对象数组时抛出的异常。

ClassCastException

当试图将对象强制转换为不是实例的子类时,抛出该异常。

IllegalArgumentException

抛出的异常表明向方法传递了一个不合法或不正确的参数。

IllegalMonitorStateException

抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程。

IllegalStateException

在非法或不适当的时间调用方法时产生的信号。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。

IllegalThreadStateException

线程没有处于请求操作所要求的适当状态时抛出的异常。

IndexOutOfBoundsException

指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。

NegativeArraySizeException

如果应用程序试图创建大小为负的数组,则抛出该异常。

NullPointerException

当应用程序试图在需要对象的地方使用 null 时,抛出该异常

NumberFormatException

当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。

SecurityException

由安全管理器抛出的异常,指示存在安全侵犯。

StringIndexOutOfBoundsException

此异常由 String 方法抛出,指示索引或者为负,或者超出字符串的大小。

UnsupportedOperationException

当不支持请求的操作时,抛出该异常。

Java检查性异常:

异常

描述

ClassNotFoundException

应用程序试图加载类时,找不到相应的类,抛出该异常。

CloneNotSupportedException

当调用 Object 类中的 clone 方法克隆对象,但该对象的类无法实现 Cloneable 接口时,抛出该异常。

IllegalAccessException

拒绝访问一个类的时候,抛出该异常。

InstantiationException

当试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象因为是一个接口或是一个抽象类而无法实例化时,抛出该异常。

InterruptedException

一个线程被另一个线程中断,抛出该异常。

NoSuchFieldException

请求的变量不存在

NoSuchMethodException

请求的方法不存在

Throwable 类 异常方法:

序号

方法及说明

1

public String getMessage()
返回关于发生的异常的详细信息。这个消息在Throwable 类的构造函数中初始化了。

2

public Throwable getCause()
返回一个 Throwable 对象代表异常原因。

3

public String toString()
返回此 Throwable 的简短描述。

4

public void printStackTrace()
将此 Throwable 及其回溯打印到标准错误流。。

5

public StackTraceElement [] getStackTrace()
返回一个包含堆栈层次的数组。下标为0的元素代表栈顶,最后一个元素代表方法调用堆栈的栈底。

6

public Throwable fillInStackTrace()
用当前的调用栈层次填充Throwable 对象栈层次,添加到栈层次任何先前信息中。

捕获异常:使用try和catch关键字可以捕获异常。try/catch的语法:

try{

    // 程序代码

}catch(ExceptionName e1){

    //Catch 块

}

    catch不能独立于try存在;在try/catch后面添加finally块并非强制要求;try代码后不能及没有catch块也没有finally块;try、catch、finally块之间不能添加任何代码。

在Java中,throw和throws关键字用于处理异常。throw关键字用于在代码中抛出异常,而throws关键字用于在方法声明中指定可能会抛出的异常类型。

public void checkNumber(int num) {
  if (num < 0) {
     throw new IllegalArgumentException("Number must be positive");
   }
}

finally关键字用来创建在try代码块后面执行的代码块。无论是否发生异常,finally代码块中的代码都会被执行。

Java新增try-with-resource语法来打开资源,并且可以在语句执行完毕后确保每个资源被自定关闭。try-with-resource是一种异常处理机制,可以简化资源管理代码的编写。try-with-resource语句可以声明多个资源,方法是使用分号“;”分隔各个资源。

二、Java 继承:

继承是Java面向对象编程技术的一块基石,继承允许创建分等级层次的类。

继承是子类继承父类的特征和行为,使得子类对象具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。

在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来的。类的继承格式:

class 父类 {

 }

class 子类 extends 父类 {

}

继承类型:Java不支持多继承,但支持多重继承。

继承的特性:

◆ 子类拥有父类非 private 的属性、方法。

◆ 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。

◆ 子类可以用自己的方式实现父类的方法。

◆  Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继 承一个父类,多重继承就是,例如 B 类继承 A 类,C 类继承 B 类, 所以按照关系就是 B 类是 C 类的父类,A 类是 B 类的父类,这是 Java 继承区别于 C++ 继承的一个特性。

◆ 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联 系越紧密,代码独立性越差)。

继承的关键字:继承可以使用extends和implements两个关键字实现继承。

1、extends关键字:

  extends 只能继承一个类。

public class Animal {

private String name;

private int id;

public Animal(String myName, int myid) {

//初始化属性值

}

public void eat() {

//吃东西方法的具体实现

}

 public void sleep() {

//睡觉方法的具体实现

}

}

public class Penguin extends Animal{

}

2、implements关键字:

使用 implements 关键字可以变相的使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(接口跟接口之间采用逗号分隔)。

public interface A {

public void eat();

public void sleep();

}

 public interface B {

public void show();

 }

public class C implements A,B {

}

3、super和this关键字:

super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。this关键字:指向自己的引用。

class Animal {

void eat() {

System.out.println("animal : eat");

}

}

class Dog extends Animal {

void eat() {

System.out.println("dog : eat");

 }

void eatTest() {

this.eat(); // this 调用自己的方法

super.eat(); // super 调用父类方法

}

}

public class Test {

public static void main(String[] args) {

Animal a = new Animal();

  1. eat();

Dog d = new Dog();

d.eatTest();

}

}

4、final关键字:

final 可以用来修饰变量(包括类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。final 含义为 "最终的"。使用 final 关键字声明类,就是把类定义定义为最终类,不能被继承,或者用于修饰方法,该方法不能被子类重写

三、Java Override/Overload:

重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。重写的好处在于子类可以根据需要,定义特定于自己的行为。重写方法不能抛出新的检查异常或者比被重写方法申明更加款发的异常。示例:

class Animal{

public void move(){

 System.out.println("动物可以移动");

}

}

class Dog extends Animal{

public void move(){

System.out.println("狗可以跑和走");

}

public void bark(){

System.out.println("狗可以吠叫");

}

}

public class TestDog{

public static void main(String args[]){

Animal a = new Animal();

Animal b = new Dog();  

a.move();

b.move();

b.bark();

}

 }

方法的重写的规则:

◆ 参数列表与被重写方法的参数列表必须完全相同。

◆ 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值 的派生类。

◆ 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类 的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。

◆ 父类的成员方法只能被它的子类重写。

◆ 声明为 final 的方法不能被重写。

◆ 声明为 static 的方法不能被重写,但是能够被再次声明。

◆ 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明 为 private 和 final 的方法。

◆ 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public  和 protected 的非 final 方法。

◆ 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。 但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的 更广泛的强制性异常,反之则可以。

◆ 构造方法不能被重写。

◆ 如果不能继承一个类,则不能重写该类的方法。

重载是在一个类里面,方法名字相同,但参数不同,返回值可以相同也可以不同。每个重载的方法都必须有一个独一无二的参数类型列表。重载的规则:

◆ 被重载的方法必须改变参数列表(参数个数或类型不一样);

◆ 被重载的方法可以改变返回类型;

◆ 被重载的方法可以改变访问修饰符;

◆ 被重载的方法可以声明新的或更广的检查异常;

◆ 方法能够在同一个类中或者在一个子类中被重载。

◆ 无法以返回值类型作为重载函数的区分标准。

重载和重写的区别:

区别点

重载方法

重写方法

参数列表

必须修改

一定不能修改

返回类型

可以修改

一定不能修改

异常

可以修改

可以减少或删除,一定不能抛出新的或者更广的异常

访问

可以修改

一定不能做更严格的限制(可以降低限制)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1235832.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业设计选题推荐-网上产品商城-Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

同为科技(TOWE)工业连接器:保障高效、可靠、安全的电气连接

国内经济快速的发展&#xff0c;人们生活水平的不断提高&#xff0c;基础设施的建设是发展的基础&#xff0c;完善的基础设施对加速经济的发展起到至关重要的作用。其中&#xff0c;基础建设中机场、港口、电力、通讯等公共设施必须配套相应的电气设施&#xff0c;工业用插头插…

华为无线ac+fit三层组网,每个ap发射不同的业务vlan

ap管理dhcp在ac控制器上&#xff0c;业务dhcp在汇聚上 配置WLAN业务 &#xff08;1&#xff09;配置VAP模板 • 配置员工网络的VAP模板&#xff08;employee&#xff09; [AC-wlan-view] security-profile name employee //创建名为“employee”的安全模板 [AC-wlan-sec-prof-…

Windows to Go U盘系统制作(未测完成)

三、Windows U盘系统制作 1、下载windows镜像&#xff0c;并通过Windows To Go方式制作&#xff0c;具体选项参考下面截图 2、选择Windows版本 3、配置Windows 体验相关参数

dvwa 代码注入impossible代码审计

dvwa 代码注入impossible代码审计 <?phpif( isset( $_POST[ Submit ] ) ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ user_token ], $_SESSION[ session_token ], index.php ); // 检查token值是否正确// Get input$target $_REQUEST[ ip ]; $target stripslas…

Tensorrt 实现 yolov5-cls 遇到的问题

yolov5-6.2增加了分类训练、验证、预测和导出&#xff08;所有 11 种格式&#xff09;&#xff0c;还提供了 ImageNet 预训练的 YOLOv5m-cls、ResNet&#xff08;18、34、50、101) 和 EfficientNet (b0-b3) 模型. 官方Git : https://github.com/ultralytics/yolov5 分类模型与…

树莓派的的串口通信协议

首先&#xff0c;回顾一下串口的核心知识点&#xff0c;也是面试重点&#xff1a; 串口通信通常使用在多机通讯中串口通信是全双工的决定串口通信的成功与否的是 数据格式 和 波特率数据格式&#xff1a;1. 数据位 2.停止位 3. 奇偶校验位 树莓派恢复串口 回忆前几节树莓派刷机…

ES 查询语法-详解

文章目录 1.DSL查询文档1.1.DSL查询分类1.2.全文检索查询1.2.1.使用场景1.2.2.基本语法1.2.3.总结 1.3.精准查询1.3.1.term查询1.3.2.总结 1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL&#xff…

gwas数据获取如何获取完整的GWAS summary数据(1)------GWAS catalog数据库

IEU OpenGWAS project (mrcieu.ac.uk) UK Biobank - UK Biobank GWAS Catalog 在孟德尔随机化&#xff08;Mendelian randomization&#xff0c;MR&#xff09;研究中&#xff0c;对于暴露数据我们只需要那些显著的SNP信息&#xff0c;这样的信息在各种GWAS数据库中都是很容…

2019ICPC南京站

A A Hard Problem 题意&#xff1a;给定一个正整数 n &#xff0c;你需要找出最小整数 k&#xff0c;满足&#xff1a;从{1,2,⋯,n}中任意选择长度为k的子集&#xff0c;存在两个不同的整数 u,v∈T, 且 u 是 v 的因数。 思路&#xff1a;打表找规律 #include <bits/std…

分类问题的评价指标

一、logistic regression logistic regression也叫做对数几率回归。虽然名字是回归&#xff0c;但是不同于linear regression&#xff0c;logistic regression是一种分类学习方法。 同时在深度神经网络中&#xff0c;有一种线性层的输出也叫做logistic&#xff0c;他是被输入…

【docker下安装jenkins】(一)

目的&#xff1a;在Linux操作系统&#xff08;x86_64)下&#xff0c;使用docker部署jenkins&#xff0c;python使用压缩包安装 安装jenkins的步骤 &#xff11;、编排jenkins的docker-compose.yml文件 说明&#xff1a;这里遇到部署jenkins后&#xff0c;占用内存8G,所以重新…

智能时代的智能工具(gpt)国产化助手

目前gpt对代码以及其他领域都是可以支持&#xff0c;在国内有很多&#xff0c;常用的百度的 文心一言 &#xff0c;阿里的 通义千问 &#xff0c;还有&#xff08;“豆包”&#xff0c;“”讯飞星火“”&#xff09;等&#xff0c;除了写代码可以外&#xff0c;也可以很好的支持…

设计模式—结构型模式之享元模式

设计模式—结构型模式之享元模式 享元模式(Flyweight Pattern)&#xff0c;运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象&#xff0c;而这些对象都很相似&#xff0c;状态变化很小&#xff0c;可以实现对象的多次复用。对象结构型。 在享元模式中可以共…

OpenCV中的形态学8

文章目录 形态学概述图像全局二值化阈值类型自适应阈值二值化OpenCV腐蚀获取形态学卷积核OpenCV膨胀开运算闭运算形态学梯度顶帽运算黑帽操作小结 形态学概述 开运算&#xff1a;先做腐蚀后做膨胀&#xff08;腐蚀可以理解为缩小&#xff09; 闭运算&#xff1a;先膨胀后腐蚀 …

LeetCode209.长度最小的子数组(滑动窗口法、暴力法)

LeetCode209.长度最小的子数组 1.问题描述2.解题思路3.代码4.知识点 1.问题描述 给定一个含有 n 个正整数的数组和一个正整数 target 。找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果…

OpenGeometry 开源社区特聘子虔科技云CAD专家 共建云几何内核

11月5日&#xff0c;由广东省工业和信息化厅、广东省科学技术厅、广东省教育厅、深圳市人民政府主办的2023工业软件生态大会在广东省深圳市召开。 开幕式上&#xff0c;备受关注的云几何内核开源平台——OpenGeometry开源社区正式发布。这意味着在几何引擎领域将通过开源这个模…

界面控件DevExpress WPF流程图组件,完美复制Visio UI!(一)

DevExpress WPF Diagram&#xff08;流程图&#xff09;控件帮助用户完美复制Microsoft Visio UI&#xff0c;并将信息丰富且组织良好的图表、流程图和组织图轻松合并到您的下一个WPF项目中。 P.S&#xff1a;DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至…

专业课140+总分420+东南大学920专业综合考研,信息学院通信专业考研分享

专业课140总分420东南大学920专业综合考研&#xff0c;信息学院通信专业考研分享 我是三月开始系统考研备战&#xff0c;寒假先看的高数全书&#xff0c;奈何在家效率极其低下&#xff0c;才草草看了前三四章。回校后学习的比较认真&#xff0c;每天大概保持10个小时左右&…