java面向对象(九)

文章目录

  • 一、abstract的应用举例
  • 二、接口的使用
    • 1.概念
    • 2.代码案例
  • 三、try-catch-finally使用步骤
    • 1.注意点
    • 2.finally注意点
  • 四、异常处理的方式二:throws + 异常类型
    • 1.如图所示:
    • 2.代码如下:


提示:以下是本篇文章正文内容,下面案例可供参考

一、abstract的应用举例

public abstract class Vehicle{public abstract double calaFuelEfficiency();  //计算燃料效率的抽象方法public abstract double clacTripDistance();  //计算行驶距离的抽象方法
}
public class Truck extends Vehicle{public double calaFuelEfficiency(){//写出计算卡车的燃料效率的具体方法}public double clacTripDistance(){//写出计算卡车行驶距离的具体方法}
}public class RiverBarge extends Vehicle{public double calaFuelEfficiency(){//写出计算卡车的燃料效率的具体方法}public double clacTripDistance(){//写出计算卡车行驶距离的具体方法}
}

二、接口的使用

1.概念

1.接口使用上也满足多态性
2.接口,实际上就是定义了一种规范
3.开发中,体会面向接口编程!

2.代码案例

public clas USBTest{main(){Computer com = new Computer();//1.创建了接口的非匿名实现类的非匿名对象Flash flash = new Flash();com.transferData(falsh);//2.创建了接口的非匿名实现类的匿名对象com.transferData(new Printer());//3.创建了接口的匿名实现类的非匿名对象USB phone = new USB(){public void start(){sysout("手机开始工作");}public void stop(){sysout("手机结束工作");}};com.transferData(phone);//4.创建了接口的匿名实现类的匿名对象com.transferData(new USB(){public void start(){sysout("mp3开始工作");}public void stop(){sysout("mp3结束工作");}});}
}class Computer{public void transferData(USB usb) { //USB usb = new Flash();usb.start();sysout("具体传输数据的细节");usb.stop();}
}
interface USB{//常量,定义了长、宽、最大最小的传输速度等。void start();void stop();
}
class Flash implements USB{public void start(){sysout("U盘开启工作");}@Overridepublic void stop() {System.out.println("U盘结束工作");}
}class Printer implements USB{public void start(){sysout("打印机开启工作");}@Overridepublic void stop() {System.out.println("打印机结束工作");}}

三、try-catch-finally使用步骤

1.注意点

  1. finally是可选的。
  2. 使用try将可能出现异常代码包装起来,在执行过程中,一旦出现异常,就会生成一个对应异常类的对象,根据此对象的类型,去catch中进行匹配
  3. 一旦try中的异常对象匹配到某一个catch时,就进入catch中进行异常的处理。一旦处理完成,就跳出当前的try-catch结构 (在没有写finally的情况),继读执行其后的代码。
  4. catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下无所谓。catch中的异常类型如果满足子父类关系,则要求子类一定声明在父类的上面。否则,报错。
  5. 常用的异常对象处理的方式: @ String getMessage() printStackTrace()
  6. 在try结构中声明的变量,再出了try结构以后,就不能再被调用
    使用try-catch-finally处理编译时异常,使得程序在编译时就不再报错,但是运行时仍可能报错。
    相当于我们使用try-catch-finally将一个编译时可能出现的异常延迟到运行时出现。

2.finally注意点

1.finally是可选的
2.finally中声明的是一定会被执行的代码。即使catch中又出现异常了,try中有return语句,catch中有return语句等情况。
3.像数据库连接、输入输出流、网络编程Socket等资源JVM是不能自动的回收的,我们需要自己手动的进行资源的释放。此时的资源释放,就需要声明在finally中。

代码如下(示例):

public void test1() {try {int a = 10;int b = 0;System.out.println(a/b);}catch (ArithmeticException e) {//e.printStackTrace();int [] arr = new int[10];System.out.println(arr[10]);}catch(Exception e) {e.printStackTrace();}//System.out.println("我好美呀哈哈哈~~~");finally {System.out.println("我好美呀哈哈哈~~~");}}
public void test2() {FileInputStream fis  = null;try {File file = new File("hello.txt");fis = new FileInputStream(file);int data = fis.read();while(data != -1) {System.out.println((char)data);data = fis.read();}	}catch(FileNotFoundException e) {e.printStackTrace();}catch (IOException e) {e.printStackTrace();}finally {try {if(fis != null)fis.close();}catch(IOException e) {e.printStackTrace();}}}@Testpublic void testMethod() {int num = method();System.out.println(num);}public int method() {try {int [] arr = new int[10];System.out.println(arr[10]);return 1;}catch(ArrayIndexOutOfBoundsException e){e.printStackTrace();return 2;}finally {System.out.println("我一定会被执行");}}

四、异常处理的方式二:throws + 异常类型

1.如图所示:

在这里插入图片描述

2.代码如下:


/*** @author YML*  异常处理的方式二:throws  +  异常类型*  1. "throws +异常类型"*/
public class ExpectionTest2 {public static void main(String[] args) {try {method2();	}catch(FileNotFoundException e) {e.printStackTrace();}catch(IOException e) {e.printStackTrace();}}public static void method3() {try {method2();}catch(IOException e) {e.printStackTrace();}}public static void method2() throws FileNotFoundException,IOException{method1();}public static void method1() throws FileNotFoundException,IOException{File file = new File("hello.txt");FileInputStream fis = new FileInputStream(file);int data = fis.read();while(data != -1) {System.out.println((char)data);data = fis.read();}	fis.close();}
}

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

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

相关文章

2021年电工杯数学建模A题高铁牵引供电系统运行数据分析及等值建模求解全过程论文及程序

2021年电工杯数学建模 A题 高铁牵引供电系统运行数据分析及等值建模 原题再现: 我国是世界上电气化铁路运营里程最长、服役电力机车型号最多、运营最繁忙的国家。截至 2020 年底,我国铁路年消耗电量约 800 亿千瓦时,约占三峡年总发电量的 8…

软件的开发步骤,需求分析,开发环境搭建,接口文档 ---苍穹外卖1

目录 项目总览 开发准备 开发步骤 角色分工 软件环境 项目介绍 产品原型 技术选型 开发环境搭建 前端:默认已有 后端 使用Git版本控制 数据库环境搭建 前后端联调 ​登录功能完善 导入接口文档 使用swagger​ 和yapi的区别 常用注解 项目总览 开发准备 开发步骤…

工具篇 | Gradle入门与使用指南

介绍 1.1 什么是Gradle? Gradle是一个开源构建自动化工具,专为大型项目设计。它基于DSL(领域特定语言)编写,该语言是用Groovy编写的,使得构建脚本更加简洁和强大。Gradle不仅可以构建Java应用程序&#x…

【Redis】深入探索 Redis 的哨兵(Sentinel)机制原理,基于 Docker 模拟搭建 Redis 主从结构和哨兵分布式架构

文章目录 一、对 Redis Sentinel 的认识1.1 什么是 Redis Sentinel1.2 为什么要使用 Redis Sentinel1.2.1 主从复制问题1.2.2 人工恢复主节点故障 二、Redis Sentinel 原理剖析2.1 Redis Sentinel 架构2.2 Raft 算法和领袖节点2.3 哨兵节点2.4 故障检测2.5 故障切换2.6 监控和通…

利用大模型知识图谱技术,告别繁重文案,实现非结构化数据高效管理

我,作为一名产品经理,对文案工作可以说是又爱又恨,爱的是文档作为嘴替,可以事事展开揉碎讲清道明;恨的是只有一个脑子一双手,想一边澄清需求一边推广宣传一边发布版本一边申报认证实在是分身乏术&#xff0…

基于矩阵分解算法的智能Steam游戏AI推荐系统——深度学习算法应用(含python、ipynb工程源码)+数据集(三)

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 模型构建1)定义模型结构2)优化损失函数 3. 模型训练及保存1)模型训练2)模型保存 4. 模型应用1)制作页面2)模型导入及调用3&am…

zabbix监控多实例redis

Zabbix监控多实例Redis 软件名称软件版本Zabbix Server6.0.17Zabbix Agent5.4.1Redis6.2.10 Zabbix客户端配置 编辑自动发现脚本 vim /usr/local/zabbix/scripts/redis_discovery.sh #!/bin/bash #Fucation:redis low-level discovery #Script_name redis_discovery.sh red…

【操作系统】实验一 Linux初步

文章目录 Linux初步一、实验目的二、实验内容 Linux初步 一、实验目的 通过proc文件系统观察整个Linux内核和系统的一些重要特征,并编写一个程序,使用proc文件系统获得以及修改系统的各种配置参数。 本实验需要学生具有Linux的基本操作技能&#xff0c…

Rust常见编程概念

变量和可变性 rust使用let声明变量,变量默认是不可改变的。通过在let后面加上mut,可以声明可变变量。可以在变量名后加:和类型名,来显式声明变量类型,例如: let a:u32 1; 常量 常量使用const声明,变量名…

【Tricks】关于如何防止edge浏览器偷取chrome浏览器的账号

《关于如何防止edge浏览器偷取chrome浏览器的账号》 前段时间edge自动更新了,我并没有太在意界面的问题。但是由于我使用同一个网站平台时,例如b站,甚至是邮箱,edge的账号和chrome的账号会自动同步,这就导致我很难短时…

Centos7部署gitlab

建议服务器配置不低于2C8G 1、安装必要的依赖 sudo yum install -y curl policycoreutils-python openssh-server perl2、配置极狐GitLab 软件源镜像 curl -fsSL https://packages.gitlab.cn/repository/raw/scripts/setup.sh | /bin/bash sudo yum install gitlab-jh -y3、…

安防视频/视频汇聚平台EasyCVR使用onvif探测添加设备通道详细步骤来啦!

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、…

uniapp打包安卓后在安卓屏上实现开机自启动

实现开机自启动(使用插件) 打开插件地址安卓开机自启动 Fvv-AutoStart - DCloud 插件市场 使用方法 选择你要开启自启动的项目 在项目的manifest.json中app-plus下写入以下代码 注意需要替换 android_package_name 为自己的,不然无法进行安卓apk打包 "nativePlugins&q…

【计算机网络】IP协议第一讲(协议格式介绍)

IP协议 1.协议头格式1.1 概念介绍1.2补充说明1.2.1 8位生存时间---TTL1.2.2 16位首部检验和 首先明确一个概念:TCP/IP协议是配合使用的,TCP负责可靠传输策略,IP则是负责传输,TCP协议是位于传输层提供的是策略解决可靠性问题&#…

pytest一些常见的插件

Pytest拥有丰富的插件架构,超过800个以上的外部插件和活跃的社区,在PyPI项目中以“ pytest- *”为标识。 本篇将列举github标星超过两百的一些插件进行实战演示。 插件库地址:http://plugincompat.herokuapp.com/ 1、pytest-html&#xff1…

【操作系统】聊聊什么是CPU上下文切换

对于linux来说,本身就是一个多任务运行的操作系统,运行远大于CPU核心数的程序,从用户视角来看是并发执行,而在CPU视角看其实是将不同的CPU时间片进行分割,每个程序执行一下,就切换到别的程序执行。那么这个…

EasyExcel看完肯定行

EasyExcel看完肯定行 1.随便创建一个Excel表格 2.引入依赖 <dependencies><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency><!-- 方便操作…

【Redis】Redis 的学习教程(十一)之使用 Redis 实现分布式锁

1. 分布式锁概念 在多线程环境下&#xff0c;为了保证数据的线程安全&#xff0c;锁保证同一时刻&#xff0c;只有一个可以访问和更新共享数据。在单机系统我们可以使用 synchronized 锁、Lock 锁保证线程安全。 synchronized 锁是 Java 提供的一种内置锁&#xff0c;在单个 …

jenkins自动化脚本集成时钉钉消息未发送

在进行jenkins自动化脚本集成时&#xff0c;需要配置钉钉发送消息。钉钉的配置正确&#xff0c;测试钉钉消息发送成功&#xff0c;但是当构建项目时&#xff0c;却没有收到钉钉消息&#xff0c;报错如下&#xff1a; [钉钉插件]发送消息时报错: java.lang.NullPointerExceptio…

大转盘抽奖活动制作流程,让你轻松打造火爆营销活动

抽奖活动一直是商家吸引顾客、推广产品的利器之一。而如何让抽奖活动更加顺利、高效地进行呢&#xff1f;今天我们就要介绍的就是乔拓云平台&#xff0c;通过它&#xff0c;商家可以轻松地制作、发布抽奖活动&#xff0c;让您的营销更加便捷、迅速&#xff01;以下是具体操作步…