Object 内部类 异常

Objbect类

java提供了Object,它是所有类的父类,每个类都直接或间接的继承了Object类,因此Object类通常被称为超类

当定义一个类时,如果没有使用extends关键字直接去指定父类继承,只要没有被继承的类,都是会默认的去继承Object类,超类中定义了一些方法

方法名称方法说明
boolean equals()判断两个对象是否相等
int hashCode ( )返回对象的散列码值
String toString ( )返回对象的字符串表示形式
实例代码// 定义 Animal类
class Animal{// 定义动物叫的方法void  shout(){System.out.println("动物叫");}
}
// 测试被继承的情况是否可以使用没有被继承和被继承的情况都是可以使用超类的方法
class Dog extends Animal{void o(){System.out.println("你好");}
}
// 主类 a
public class a {public static void main(String[] args) {Animal op = new Animal();   Dog p = new Dog();System.out.println(p.toString());System.out.println(op.toString()); // 默认继承了Object使用自带的toString,打印方法}
}------------------------
输出:
Dog@1b6d3586
Animal@1b6d3586

Object自带的方法并且支持重写,但是其实多次一举,因为这种和普通方法的定义然后重写没有区别这里也是直接写完

// 定义 Animal类
class Animal{// 定义动物叫的方法public String toString(){return  "动物";// 因为默认toString是返回字符串的格式,所以有返回格式我们不能使用void}
}
// 主类 a
public class a {public static void main(String[] args) {Animal op = new Animal();System.out.println(op.toString()); // 打印重写后的方法}
}

内部类

Java中允许在一个类的内部定义类,这样的类称为内部类,一个普通类如果定义了内部类,那么普通类就会变成外部类,根据 内部类的位置,修饰符和定义方法不同,内部类可分为 成员内部类 局部内部类 静态内部类 匿名内部类 四种

成员内部类

在类中除了可以定义成员变量,成员方法外还可以定义类,这样的类就被称为成员内部类,成员内部类可以访问所在外部类(自身边所在位置定义的普通类),的所有成员

实例代码class Other{int m = 0;public void  shout(){   // 普通类的成员方法System.out.println("外部类的普通方法shout()");}//成员内部类class inner{int n = 100; // 内部类成员变量public  void show1(){// 成员内部类的方法访问外部类的属性也就是成员变量System.out.println("外部类的变量:m="+m);}public  void  show2(){System.out.println("成员内部类的普通方法");}}// 普通类的成员方法 功能是访问成员内部类public void  info(){// 实例化成员内部类inner er = new inner();System.out.println("成员内部类的变量n="+er.n);er.show2(); // 调用成员内部类方法}
}public class b {public static void main(String[] args) {Other other  = new Other(); // 实例化普通类// 通过已经实例化的普通类 other 去访问里面的成员内部类Other.inner er = other.new inner();er.show1();other.info();}
}------------------------------
输出: 外部类的变量:m=0
成员内部类的变量n=100
成员内部类的普通方法

成员内部类和外部类可以互相的去访问,但是需要先将外部类实例化,利用外部类去访问所在的成员内部类,再去进行调用,也就是

如果想通过外部类访问内部类,则需要通过外部类创建内部类对象,创建内部类对象的具体语法格式如下:

  Other.inner er = other.new inner();外部类名.内部类名 变量名存储 = 外部类对象.new 内部类名();

局部内部类

在方法中定义的类叫局部内部类也称为方法内部类,是指定义在某个局部范围中的类, 和在方法中定义的变量叫局部变量一样,有效范围也只限于方法内部类

访问规则

局部内部类可以在里面拿到外部类的所有成员变量和方法

但是它自身内部类定义的变量也方法只能在自己的内部类利用所属方法中访问,外面拿不到里面,里面可以拿到外面,自己可以访问自己

 实例代码class  Othou{int m = 100;// 普通的成员方法public  void  tset1(){System.out.println("我是外部类的成员方法");}// 成员方法里面定义局部内部类public  void  tset2(){class  op{int n = 1;public void  show(){ // 3System.out.println("外部的变量m="+m);// 里面拿外面tset1(); // 局部内部类可以访问外面的属性和方法,调用 }}op er = new op();// 实例化局部内部类System.out.println("局部的变量n="+er.n);//第一个调用自己拿自己er.show(); //2 调用它回到 11行}
}public class a {public static void main(String[] args) {Othou o = new Othou();o.tset2();}
}----------------------------------输出:局部的变量n=1
外部的变量m=100
我是外部类的成员方法

静态内部类

静态内部类就是使用static关键字修饰的成员内部类,和上文的成员内部类相比就是增加了 static关键字 但是静态内部类只能访问外面的静态成员,也就是可以拿到外面的值,

并且可以不创建主类的对象,直接创建自己的内部类对象,也一样可以拿到外部类的值使用

创建静态内部类语法

外部类名.静态内部类名 变量名 = new 外部类名().静态内部类();

class ou{static int my = 100; // 定义静态成员变量 只能调用静态的 普通的成员无法调用// 定义静态内部类static class Inner{int l = 1;public  void  sho(){// 在静态啊内部类的方法中访问外部类的成员变量System.out.println("外部静态变量my="+my);}}
}public class b {public static void main(String[] args) {// 跳过主类直接创建静态内部类ou.Inner nn = new ou.Inner();nn.sho(); //调用show方法测试静态变量my的值}
}----------------------------------------------------
输出:
外部静态变量my=100

匿名内部类

匿名内部类是没有名称的内部类,在java中调用某个方法,如果它的形参类型是接口类型 ,除了可以传递一个接口实现类外,还可以使用实现接口的匿名内部类作为参数

匿名内部类的作用就是多提供一种实现接口的方法,将接口的方法作为子类实现

创建匿名内部类语法

new    父接口 () {//  匿名内部类实现部分}
实例代码interface  Ani{  //定义接口void si();  // 接口的方法 下文需要实现}public class c {public static void main(String[] args) {String name = "小邓";saber(new Ani() {@Overridepublic void si() {System.out.println(name+"实现接口的方法");}});}public static void  saber(Ani an){ //接口类型的方法an.si();  // 调用方法}
}-------------------------------------输出: 小邓实现接口的方法

注意:

JDK8新增特性,允许局部内部类 匿名内部类访问非final修饰 变量,在13 行里面访问了name所以才没有报错,在之前是会出错误的,如果要访问需要加上final修饰,具体为什么 我也不知道,

匿名内部类的编写分为两步

(1) 在调用saber() 方法时,在方法参数的位置写上 new Ani() {} 这就相当于创建了一个实例对象, 并将对象作为参数传递给了 saber() 方法 在new Ani ()后面还有一个大括号,表示创建的对象为Ani 的子类实例, 该子类的匿名的

      saber( new Ani() {} );

(2) 在大括号中编写匿名子类的实现代码,实现接口的方法

      saber(new Ani() {public void si() {System.out.println(name+"实现接口的方法");}});

匿名内部类是实现接口的一种简便写法,在程序中不一定非要使用,理解语法即可

异常(Exception)

什么是异常?

在程序中难免出现各种各样的报错 bug,所以java语言引入了异常类, 对这些不正常情况进行封装,通过异常处理机制对程序运行时发生的各种问题进行处理

public class d {public static void main(String[] args) {// 因为传入的值是 0 导致报错System.out.println("值是"+div(4,0));}//  定义方法两个值相除 public static int div(int x,int y){int re = x/y;return  re;}
}

ArithmeticException 异常只是java类中的一种,Java提供了大量的异常类, 这些类全部继承于java.lang.Throwable类

Throwable类有两个直接子类 Error(错误) Exception(异常)

Error

它表示Java程序运行时产生的系统内部错误,或资源耗尽的错误,这种错误比较严重,仅靠修改程序是不能恢复的,比如缺少JDK 运行一个不存在的东西就会报这种错误

Exception

它被称为异常类,表示程序本身可以处理的错误,异常处理都是针对Exception类及其子类的,在Exception类的众多子类中有一个特殊的子类—RuntimeException类及其子类表示运行时异常 Exception及其子类表示编译时异常

try…catch 和 finally

监听异常try

抛出异常 throw

由于发生了异常导致程序无法继续向下执行,为了解决异常,java提供了对异常处理的方式——异常捕获. 使用tay…catch实现

try代码块中的程序发生了异常,系统会将异常的信息封装成一个异常对象,并将这个对象传递给catch处理

catch需要一个参数指明它所能接收的异常类型, 这个参数的类型必须是Exception类及其子类

try{// 程序代码块   写入可能发生的异常语句 
}catch(ExceptionType (Exception类及其子类)  e){// 对ExceptionType的处理   对异常代码的处理 
}

*捕获***异常catch **

通过catch语句捕获异常,而后通过调用 Exception对象的getMessage()方法返回异常信息 /by zero

catch 异常处理完毕程序仍会向下执行,但是在try中发生了异常,异常语句下面的代码就不会执行

public class min {public static void main(String[] args) {// 定义try...catch语捕获异常try{System.out.println("值是"+div(4,0));System.out.println("try有异常下面不会继续输出");  // 不会执行}catch (Exception e){System.out.println("捕获的异常信息为"+e.getMessage());}System.out.println("程序继续执行");}public static int div(int x,int y){int re = x/y;return  re;}
}

finally

有时候希望有些语句无论程序是否发生异常都要执行,那么就可以在try...catch后面加入 finally

即使我们使用了return结束方法,但是finally 语句还是会去执行,不受return语句的影响还是说发生了异常,在程序设计中,通常使用finally代码块处理未完成的事情,例如释放资源

public class min {public static void main(String[] args) {// 定义try...catch语捕获异常try{System.out.println("值是"+div(4,0));System.out.println("try有异常下面不会继续输出");  // 不会执行}catch (Exception e){System.out.println("捕获的异常信息为"+e.getMessage());return;}finally {System.out.println("怎么样都会去执行");}// 因为有了return 结束了方法就不会执行System.out.println("向下执行");}public static int div(int x,int y){int re = x/y;return  re;}
}--------------------------
输出:捕获的异常信息为/ by zero
怎么样都会去执行

注意点:

finally语句在一种情况下是不会执行的,那就是try...catch执行了System.exit(0)它表示退出当前的Java虚拟机,退出了那就任何代码都不会执行

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

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

相关文章

Linux 高级IO

学习任务: 高级 I/O:select、poll、epoll、mmap、munmap 要求: 学习高级 I/O 的用法,并实操 1、高级 I/O: 前置知识: 阻塞、I/O 多路复用 PS: 非阻塞 I/O ------ 非阻塞 I/O 阻塞其实就是进入了休眠状态&am…

JAVA WEB — HTML CSS 入门学习

本文为JAVAWEB 关于HTML 的基础学习 一 概述 HTML 超文本标记语言 超文本 超越文本的限制 比普通文本更强大 除了文字信息 还可以存储图片 音频 视频等标记语言 由标签构成的语言HTML标签都是预定义的 HTML直接在浏览器中运行 在浏览器解析 CSS 是一种用来表现HTML或XML等文…

雷池社区版 7.1.0 LTS 发布了

LTS(Long Term Support,长期支持版本)是软件开发中的一个概念,表示该版本将获得较长时间的支持和更新,通常包含稳定性、性能改进和安全修复,但不包含频繁的新特性更新。 作为最受欢迎的社区waf&#xff0c…

出海企业如何借助云计算平台实现多区域部署?

云计算de小白 如需进一步了解,请单击链接了解有关 Akamai 云计算的更多信息 在本文中我们将告诉大家如何在Linode云计算平台上借助VLAN快速实现多地域部署。 首先我们需要明确一些基本概念和思想: 部署多区域 VLAN 为了在多区域部署中在不同的 VLAN …

AI赋能酒店设计|莱佛士学生成功入围WATG设计大赛

近日,由Wimberly Allison Tong & Goo(WATG)主办的“用人工智能重新构想酒店行业的未来”设计比赛正式拉开帷幕。这场设计比赛,不仅是为了庆祝WATG即将步入80周年,更是为了激发年轻设计师们的创造力和探索实践精神&…

Netty原来就是这样啊(二)

前言: Netty其实最大的特点就是在于对于对NIO进行了进一步的封装,除此以外Netty的特点就是在于其的高性能 高可用性,下面就会一一进行说明。 高性能: 我在Netty原来就是这样啊(一)-CSDN博客 解释了其中的零拷贝的技术除此以外还有Reactor线程模型,这个Reactor线程模型的思想…

对于相对速度的重新理解

狭义相对论速度合成公式如下, 现在让我们尝试用另一种方式把它推导出来。 我们先看速度的定义, 常规的速度合成方式如下, 如果我们用速度的倒数来理解速度, 原来的两个相对速度合成, 是因为假定了时间单位是一样的&am…

idea 导入Spring源码遇到的坑并解决

1.下载相关文件 通过百度网盘分享的文件:Spring 链接:https://pan.baidu.com/s/1r9rkGOCaY9SFn9ecng5cIg?pwd8888 提取码:8888 2.配置gradle环境 gradle下载地址 需要翻墙下 https://services.gradle.org/distributions/ 我选择的是 grad…

红队-linux基础(1)

声明 通过学习 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频,做出的文章如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 一.openssl 1、openssl passwd -1 123 openssl是一个开源的…

迈入国际舞台,AORO M8防爆手机获国际IECEx、欧盟ATEX防爆认证

近日,深圳市遨游通讯设备有限公司(以下简称“遨游通讯”)旗下5G防爆手机——AORO M8,通过了CSA集团的严格测试和评估,荣获国际IECEx及欧盟ATEX防爆认证证书。2024年11月5日,CSA集团和遨游通讯双方领导在遨游…

[Unity Demo]从零开始制作空洞骑士Hollow Knight第十八集补充:制作空洞骑士独有的EventSystem和InputModule

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、制作空洞骑士独有的EventSystem和InputModule总结 前言 hello大家好久没见,之所以隔了这么久才更新并不是因为我又放弃了这个项目,而…

你们要的App电量分析测试来了

Batterystats 是包含在 Android 框架中的一种工具,用于收集设备上的电池数据。您可以使用 adb 将收集的电池数据转储到开发计算机,并创建一份可使用 Battery Historian 分析的报告。Battery Historian 会将报告从 Batterystats 转换为可在浏览器中查看的…

<项目代码>YOLOv8 学生课堂行为识别<目标检测

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

智慧水肥一体化:道品科技现代农业的智能管理模式

智慧水肥一体化是现代农业中一种重要的管理模式,它通过信息技术和物联网技术的结合,实现对水资源和肥料的智能化管理。这一系统的主要功能包括环境监测、集中管理、智能控制、主动报警和数据管理。以下将分别对这些功能进行详细阐述,并探讨智…

ES入门:查询和聚合

安装完ElasticSearch 和 Kibana后我们开始学习 为了方便测试,使用kibana的dev tool来进行学习测试: 测试工具 从索引文档开始 插入 向 Elasticsearch 索引 customer 的 _doc 类型的文档 id 为 1 的文档发送 PUT 请求的例子。 请求体为 JSON 格式&am…

Docker Remote API TLS 认证_docker远程接口未授权访问漏洞怎么解决

漏洞描述: Docker Remote API 是一个取代远程命令行界面的REST API,其默认绑定2375端口,如管理员对其配置不当可导致未授权访问漏洞。攻击者利用docker client或者http直接请求就可以访问这个API,可导致敏感信息泄露,…

华为eNSP:QinQ

一、什么是QinQ? QinQ是一种网络技术,全称为"Quantum Insertion",也被称为"Q-in-Q"、"Double Tagging"或"VLAN stacking"。它是一种在现有的VLAN(Virtual Local Area Network&#xff0…

利用SCF文件构建网络渗透

SMB是一种广泛用于企业组织中文件共享目的的网络协议。在内部的渗透测试中,发现包含明文密码和数据库连接字符串等敏感信息的共享文件并不罕见。但是,即使一个文件共享不包含任何可用于连接到其他系统的数据,但是未经身份验证的用户配置拥有该…

陀螺仪BMI323驱动开发测试(基于HAL库SPI通信)

参考资料 编写代码 读取芯片ID void BMI160_Init(void) {uint16_t chipID BMI323_read(BMI160_REG_CHIP_ID);debug("BMI323芯片ID为0x%x;", chipID);if (chipID ! 0x43){debug("未检测到BMI323;");}elsedebug("检测到陀螺仪BMI323;");u8 buf_…

基于vue框架的的流浪宠物救助系统25128(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:用户,宠物类别,领养中心,领养申请,云投喂,申请入驻,义工入驻 开题报告内容 基于Vue框架的流浪宠物救助系统开题报告 一、项目背景 近年来,随着城市化进程的加速,流浪动物问题日益凸显。它们面临着食物短缺、疾…