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

一、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.mzph.cn/news/154542.shtml

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

相关文章

OpenAI宫斗,尘埃落定,微软成最大赢家

周末被OpenAI董事会闹剧刷屏,ChatGPT之父Sam Altman前一天被踢出董事会,免职CEO,后一天重返OpenAI,目前结局未知。 很多同学想要围观,缺少背景知识,这里老章为大家简单介绍前因后果及涉及的人物,时间线,让大家轻松围观。 备好瓜子,开始。 1、主角 先看一张图,看一…

Unity PackageManager 在离线环境下使用

在一台上网的电脑上运行工程C:\Users\XXX\AppData\Local\Unity\cache\npm\packages.unity.com 目录下的包们拷贝到不上网的电脑即可。 如果有异常&#xff0c;则清空 C:\Users\XXX\AppData\Local\Unity\cache\packages\packages.unity.com 目录和项目工程下Library\Package…

Python学习(打基础版)

以前只是大致的了解&#xff0c;现在比较完整的整理一下笔记&#xff0c;以后工作可能会用到。 学习地址如下所示&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了_哔哩哔哩_bilibili 第一章 环境配置 1 初识Python 人…

Ubuntu Server download

前言 Ubuntu——公共云、数据中心和边缘上最受欢迎的 Linux 发行版。自成立以来&#xff0c;Ubuntu 一直在获得市场份额&#xff0c;截至今天已接近 50%。 Ubuntu Server download VersionUbuntu Server 其它主机型号版本Ubuntu AMD历史版下载百度云Ubuntu Server all Ubuntu…

Redis内存满了会宕机吗

当 Redis 的内存数据满了&#xff0c;它不会立即宕机。Redis 会根据一些内存管理策略来处理内存数据满的情况&#xff0c;具体行为取决于你的 Redis 配置和所使用的版本。 处理方式 一般来说&#xff0c;当 Redis 内存数据满了&#xff0c;以下是可能发生的情况&#xff1a; …

VivadoAndTcl: read_xdc

读取一个或者多个物理和时序约束。 read_xdc constraints0.xdc read_xdc {constraints0.xdc constraints1.xdc}

阿里8年经验之谈 —— 分享一次接口性能摸底测试过程!

接口性能测试是用于验证应用程序中的接口是否可以满足系统的性能要求的一种测试方法。确定应用程序在各种负载条件下的性能指标&#xff0c;例如响应时间、吞吐量、并发性能等&#xff0c;以便提高系统的性能和可靠性。本文主要讲述接口性能测试从前期准备、方案设计到环境搭建…

SQL常见函数整理 —— LAG() 向上偏移

1. 用法 窗口函数&#xff0c;用于访问窗口中当前行之前的行的数据。该函数可以根据需要计算当前行之前的值&#xff0c;使我们能够轻松地比较不同行之间的差异和变化。 2. 基本语法 LAG(column, offset, default_value) OVER (ORDER BY column)column&#xff1a;代表在返回…

【香橙派】实战记录1——简介及烧录 Linux 镜像

文章目录 一、简介1、参数2、结构3、其他配件4、下载资料 二、基于 Windows PC 将 Linux 镜像烧写到 TF 卡的方法1、使用 balenaEtcher 烧录 Linux 镜像的方法2、效果 一、简介 Orange Pi Zero 3 香橙派是一款开源的单板卡片电脑&#xff0c; 新一代的arm64开发板&#xff0c;…

百度搜索万亿规模特征计算系统实践

作者 | Jay 导读 本文主要介绍百度搜索在全网万亿级规模内容做内容理解的工程实践&#xff0c;涉及机器学习工程化、资源调度、存储优化等多个Topic。 全文6648字&#xff0c;预计阅读时间17分钟。 01 业务背景 百度收录了互联网海量内容&#xff0c;要索引这些内容&#xff0…

如果文件已经存在与git本地库中,配置gitignore能否将其从git库中删除

想把项目的前后台代码放到同一个git仓库管理&#xff0c;由于未设置.gitignore&#xff0c;就使用vscode做stage操作&#xff08;相当于git add . 命令 其中【.】点表示全部文件&#xff09;&#xff0c;观察将要入库的文件发现&#xff0c;node_modules、target、.idea、log等…

【华为OD题库-028】数据分类-java

题目 对一个数据a进行分类,分类方法为:此数据a (四个字节大小)的四个字节相加对一个给定的值b取模&#xff0c;如果得到的结果小于一个给定的值c&#xff0c;则数据a为有效类型&#xff0c;其类型为取模的值;如果得到的结果大于或者等于c&#xff0c;则数据a为无效类型。 比如一…

无服务器开发实例|微服务向无服务器架构演进的探索

在当今的技术环境中&#xff0c;许多组织已经从构建单一的应用程序转变为采用微服务架构。微服务架构是将服务分解成多个较小的应用程序&#xff0c;这些应用程序可以独立开发、设计和运行。这些被拆分的小的应用程序相互协作和通信&#xff0c;为用户提供全面的服务。在设计和…

C#的类型转换

目录 一、简介二、基本类型转换1.整数类型转换1.隐式转换2.显式转换 2.浮点类型转换1.隐式转换2.显式转换 3.字符类型转换1.字符到整数的转换2.整数到字符的转换 4.布尔类型转换1.布尔到整数的转换2.整数到布尔的转换 三、隐式转换和显式转换四、装箱和拆箱五、自定义类型转换六…

Java核心知识点整理大全7-笔记

目录 4.1.9. JAVA 锁 4.1.9.1. 乐观锁 4.1.9.2. 悲观锁 4.1.9.3. 自旋锁 4.1.9.4. Synchronized 同步锁 Synchronized 作用范围 Synchronized 核心组件 Synchronized 实现 4.1.9.5. ReentrantLock Lock 接口的主要方法 非公平锁 公平锁 ReentrantLock 与 synchronized …

腾讯云COS+picgo+typora 图床搭建与自动上传

1、腾讯云 COS 腾讯云活动 COS新用户专享 COS 操作步骤 1、点击 创建桶&#xff0c;完善信息 点击下一步&#xff0c;剩下的配置可自己配置 2、picgo 官网地址 2.3.1版本下载地址 现在稳定版本是2.3.1 相关连接 腾讯云密钥设置地址picgo官网地址2.3.1版本下载地址

解决k8s node节点报错: Failed to watch *v1.Secret: unknown

现象&#xff1a; 这个现象是发生在k8s集群证书过期&#xff0c;重新续签证书以后。 记得master节点的/etc/kubernetes/kubelet.conf文件已经复制到node节点了。 但是为什么还是报这个错&#xff0c;然后运行证书检查命令看一下&#xff1a; 看样子是差/etc/kubernetes/pki/…

深入 Django 的 URL 分发器

概要 在 Django 的 MVC 架构中&#xff0c;URL 分发器扮演着至关重要的角色&#xff0c;它负责将用户的请求路由到相应的视图函数或类。这一机制不仅保证了 Django 应用的高度可扩展性&#xff0c;还为开发者提供了灵活的 URL 设计能力。本文将详细介绍 Django 中的 URL 分发器…

11204环境,expdp突然变慢

客户反馈&#xff0c;最近expdp备份特别的慢&#xff0c;9月份的时候还是18分钟完成&#xff0c;现在都1个多小时&#xff0c;数据量也没啥变化。 9月底备份log Master table "SYS"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded **************…

Linux内核移植之网络驱动更改说明二

一. 简介 本文继续学习 NXP官方Linux内核移植网络驱动的更改。 在学习 uboot 移植的时候就已经说过了&#xff0c;正点原子开发板的网络和 NXP 官方的网络硬件上不同&#xff0c;网络 PHY 芯片由 KSZ8081 换为了 LAN8720A&#xff0c;两个网络 PHY 芯片的复位 IO 也不同。 所…