java基础·小白入门(四)

目录

  • 异常处理
    • 基本概念
    • 处理过程
  • Java泛型与容器类
    • 泛型
    • 容器类

异常处理

基本概念

  1. 异常(exception):是指在硬件和操作系统正常时,程序遇到的运行错误。如数组下标越界、除数为0、用户输入非法、打开一个不存在的文件、网络连接中断、正在加载的类文件丢失等都会引发异常。异常会导致程序非正常终止。
  2. Java中不同的异常用不同的异常类来表示。当程序运行过程中发生一个可识别的异常时,系统会产生一个相应的异常类对象,即产生一个异常。
  3. 在“异常”类层次上的最上层有一个单独的类叫做Throwable,它是java.lang包中的一个类。它派生了两个子类:Error类和Exception类。
    • Error类:定义了程序中不能恢复的严重错误。如内存溢出、类文件格式错误等。这一类错误由Java运行系统处理,不需要编程者处理。
    • Exception类:定义了程序中可能遇到的轻微错误。可以写代码来捕捉和处理这些异常。由它派生出很多子类,每个子类代表了一种运行错误。
  4. 自动捕获和处理异常:把可能产生异常的代码用try包起来,try之后,通过catch来捕捉异常并处理。

处理过程

  1. Java程序在执行过程中如出现异常,系统会自动生成一个异常类对象,该异常对象将被提交给Java系统,这个过程称为抛出(throw)异常。
  2. 当Java系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
  3. 如果Java系统找不到可以捕获异常的方法,则系统将自动做一些处理,并中止程序。
  4. 使用try-catch-finally语句捕获和处理异常:
// 语法格式
try 
{要检查的语句序列  ;//可能产生异常的代码
}
catch (异常类名 形参对象名)
{异常发生时的处理语句序列;//捕获到某种异常对象时进行处理的代码
}
finally
{一定会运行的语句序列
}// 捕获异常示例
public static void main (String args[]){int i=0;String greetings []={"Hello world!","No,I mean it!","HELLO WORLD!!"};while (i<4){try {System.out.println(greetings[i]);  //可能出现数组越界出现异常的代码}catch(ArrayIndexOutOfBoundsException e){System.out.println("Re-setting Index Value");  //出现数组越界异常的处理}finally{System.out.println(This is always printed”);  //始终在循环过程中}i++;
}
  1. 异常处理有两种方法
    • 如果知道如何处理异常,则用try-catch语句捕获异常并处理它。
    • 如果在一个方法中,有的异常不知如何处理或不想处理,可将异常抛出到其上一级,即调用它的方法。上一级的方法必须处理:捕获或继续抛出到更上一级。一直可追溯到main()方法。最后抛给系统,由系统处理。
  2. 抛出异常的两种方式
    • 系统自动抛出的异常:所有RuntimeException由系统自动地抛出。
    • throw语句抛出的异常:除了RuntimeException外的其他异常,以及用户自定义的异常,不可能依靠系统自动抛出,必须用throw语句明确地抛出一个异常。
  3. 异常抛出
    • 使用throws关键字抛出异常:throws关键字通常被应用在声明方法时,用来指定方法可能抛出的异常。多个异常可使用逗号分开
    • 使用throw关键字抛出异常:throw关键字通过用于方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即终止,它后面的语句都不执行。
// 1. 使用throws关键字抛出异常
void MyMethod() throws Exception1,Exception2,Exception3  //可能抛出这三个异常
{        // 方法体
}
// 或者
void MyMethod() throws Super_Exception  //可能抛出这三个异常的父类
{// 方法体
}
// 2. 使用throw关键字抛出异常。用户自定义异常必须用throw来抛出。
public static void main(String[] args) {try {throw new MyException("This is a custom exception");  // throw用在方法体中} catch (MyException e) {System.out.println(e.getMessage());}
}
  1. 自定义异常类:因为所有的异常类均继承自Exception类,所以自定义类通常继承这个类。用户自定义异常必须用throw来抛出。
class 自定义异常类名 extends Exception
{ 类体
}

Java泛型与容器类

泛型

  1. 实质就是将数据的类型参数化(即数据的类型可变),通过为类、接口及方法设置类型参数来定义泛型。
    • 泛型类的定义:[修饰符] class 类名<T>
    • 泛型接口的定义:[public] interface 接口名<T>
    • 泛型方法的定义:[public] [static] <T> 返回值类型 方法名(T 参数)
  2. 要实例化泛型类对象,也使用new运算符,但在类名后面需加上要传递的具体类型。泛型类生成对象时,实际类型必须是引用类型(StringIntegerDouble等),不能是int、double、char等基本类型。
  3. 当我们定义一个方法,希望它能遍历各种类型的ArrayList(泛型类)集合。我们不知道ArrayList集合使用什么数据类型,此时可以使用泛型通配符"?" 来接收各种不同的数据类型。
  4. 限制泛型的可用类型:
    • 上界用extends指定,例如: List<? extends Number>
    • 下界用super指定,例如:List<? super Integer>
public class Node<T> {private T data;                    // 泛型成员public  Node(){}                  // 默认构造方法public  Node(T data){         // 带参数构造方法this.data = data;}public T getData() {             // 访问方法定义return data;} public void setData(T data) {     // 修改方法定义this.data = data;}public void showType(){   // 显示类型名System.out.println("T的类型是:"+ data.getClass().getName());}
}// 实例化泛型类对象
var intNode = new Node<Integer>();// 带两个类型参数
public interface Entry<K, V> {public K getKey();     public V getValue();
}public class Pair<K, V> implements Entry<K, V>{private K key;private V value;public Pair(K key, V value) {    // 构造方法this.key = key;this.value = value;}public void setKey(K key) { this.key = key; }public K getKey() { return key; }public void setValue(V value) { this.value = value; }public V getValue() { return value; }
}
// 实例化
var p1 = new Pair<Integer, String>(20, “twenty”);
var p2 = new Pair<String, String>(“china”,Beijing);// 泛型方法
public static <T> void swap(T[] array,int i, int j){T temp = array[i];array[i] = array[j];array[j] = temp;
}// 通配符举例
public static void printList(ArrayList<?> list)
{System.out.println(list);
}ArrayList<String> list1 = new ArrayList();
list1.add("123");
list1.add("abc");ArrayList<Integer> list2 = new ArrayList();
list2.add(123);
list2.add(456);printList(list1);
printList(list2);

容器类

  1. 容器类是Java以类库的形式 提供给用户开发程序时可直接使用的各种数据结构
  2. Java提供了一个容器框架,也叫集合框架(Collections Framework),其中包含了一组接口和类,可以很方便地对一组对象进行操作。
  3. 常用的类型参数名有:E表示元素;K表示键;N表示数字;T表示类型;V表示值等。
  4. 容器框架由两种类型构成:
    • Collection,用于存放一组对象。包含有List、Set、Queue。Set:不能包含重复的元素。SortedSet是一个按照升序排列元素的Set。List:是一个有序的集合,可以包含重复的元素。提供了按索引访问的方式。
    • Map ,用于存放一组“关键字/值 对”的对象。包含了key-value对。Map不能包含重复的key。SortedMap是一个按照升序排列key的Map。
  5. ArrayList:即顺序表。我们可以将其看作是能够自动增长容量的数组。利用ArrayList的toArray()返回一个数组,利用Arrays.asList()返回一个列表。常用方法:
    • void add(int index, E element)
    • E get(int index)
    • E set(int index, E element)
    • E remove(int index)
    • size()
  6. java.util.Iterator接口(迭代器)的功能:对集合进行遍历。主要有以下三个方法:
    • boolean hasNext():判断是否有下一个元素
    • E next():返回下一个元素
    • void remove():删除最近一个next()所返回的元素
  7. Collection接口中有一个iterator()方法,该方法返回的就是迭代器的实现类对象。
  8. 迭代器的使用步骤:
    • 调用集合对象的iterator()方法获取Iterator对象,即迭代器的实现类对象,使用Iterator接口接收(多态)。
    • 使用Iterator接口中的hasNext()方法判断还有没有下一个元素。
    • 使用Iterator接口中的next()方法取出集合中的下一个元素。
  9. Collections类:java.util .Collections类是工具类,该类中的所有方法都是static的。Collections.sort()的实现方法:
    • 实现Comparable接口中的compareTo()方法。按compareTo()方法进行的排序叫自然排序。
    • 实现比较器(Comparator)接口,把比较器跟某个类相关联。
  10. Comparable接口
    • 如果一个类实现了Comparable接口(需要重写compareTo方法),则该类支持排序。
    • 如果一个List或者一个数组中的对象是实现了Comparable接口的类,则可以通过Collections.sort()或者Arrays.sort()来对该列表或数组进行排序。
  11. ArrayList和LinkedList(链表类)的比较:LinkedList是采用双向循环链表实现的。
    • ArrayList底层采用数组完成,而LinkedList则是以一般的双向链表(double-linked list)完成,其内每个对象除了数据本身外,还有两个 引用,分别指向前一个元素和后一个元素。
    • 如果我们经常在List的开始处增加元素,或者在List中进行插入和删除操作,我们应该使用LinkedList,否则的话,使用ArrayList将更加快速。
  12. Set接口及实现类:
    • Set接口实现类的对象类似于数学上的集合概念,其中不允许有重复的元素。
    • Set接口没有定义新的方法,只包含从Collection接口继承的方法。
    • Set接口的常用实现类有:HashSet类、TreeSet类。
  13. 散列存储的基本思想:把线性表中每个元素的关键字值与存放该元素的地址(数组下标值)之间建立起一个函数关系h。
  14. 散列表又称为哈希表。散列表算法的基本思想是:以结点的关键字为自变量,通过一定的函数关系(散列函数)计算出对应的函数值,以这个值作为该结点存储在散列表中的地址。
  15. HashSet类用散列方法存储元素,具有最好的存取性能,但元素没有顺序。TreeSet实现一种树集合,它使用红-黑树算法为元素排序。添加到TreeSet中的元素必须是可比较的,即元素的类必须实现Comparable<T>接口。
  16. Map接口及实现类:
    • Map是用来存储“键/值”对的对象,也称为“映射”。
    • 在Map中存储的关键字和值都必须是对象,并要求关键字是唯一的,而值可以重复。
    • HashMap类以散列方法存放“键/值”对,TreeMap类保证Map中的“键/值”对按关键字(key)升序排序。

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

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

相关文章

Java中的数据结构与算法优化攻略

Java中的数据结构与算法优化攻略 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 在Java应用开发中&#xff0c;数据结构与算法的选择和优化对于提高程序的性能…

【杂记-浅谈Time To Live/TTL】

文章目录 一、TTL概述二、TTL在IP数据包中的应用三、TTL在DNS系统中的应用四、TTL的其他应用 一、TTL概述 Time To Live&#xff0c;TTL&#xff0c;主要有两个含义&#xff1a;一个是作为IP数据包中的一个字段&#xff0c;另一个是与DNS记录相关的存活时间。 1、在IP数据包中…

java分别使用 iText 7 库和iText 5 库 将excel转成PDF导出,以及如何对excel转PDF合并单元格

第一种 package com.junfun.pms.report.util;import com.itextpdf.kernel.font.PdfFontFactory; import com.itextpdf.layout.Document; import com.itextpdf.layout.element.Paragraph; import com.itextpdf.layout.property.TextAlignment; import com.itextpdf.layout.prop…

kafka学习笔记07

Kafka高可用集群搭建节点需求规划 开放端口。 Kafka高可用集群之zookeeper集群搭建环境准备 删除之前的kafka和zookeeper。 重新进行环境部署&#xff1a; 我们解压我们的zookeeper: 编辑第一个zookeeper的配置文件: 我们重复类似的操作&#xff0c;创建三个zookeeper节点: 记…

SM4 国密——加密,解密

SM4 国密的使用 前言——引用管理包SM4解密——ECB模式SM4加密——ECB模式SM4解密——CBC模式SM4加密——CBC模式SM4工具类SM4主体类SM4实体类 前言——引用管理包 引用NuGet管理包BouncyCastle.Crypto SM4解密——ECB模式 public string CiphertextParsing(string json) {tr…

【数学建模】解析几何与方程模型

文章目录 解析几何与方程模型1.几何建模思想2.Numpy在线性代数中的使用3.国赛求解3.1题目3.2 问题1求解建立模型代码求解 3.3 问题2求解 4.问题答疑Q1:什么是行列式&#xff0c;其使用场景是什么行列式的定义行列式的性质行列式的使用场景 Q2:2023B题问题一用相似三角形求解覆盖…

使用rkhunter Rootkit猎手检查Rootkit:全面指南

在网络安全领域&#xff0c;Rootkit是一种隐蔽性极强的恶意软件&#xff0c;它能够隐藏攻击者的痕迹和未授权访问路径。Linux系统因其开放性和复杂性&#xff0c;容易受到Rootkit的攻击。rkhunter&#xff0c;即Rootkit Hunter&#xff0c;是一款专门设计来检测Linux系统中Root…

centos查找文件 及 操作写入的进程

du -sh * 查看目录空间占用、发现大文件&#xff0c;确定进程&#xff0c;结束 yum install lsof 安装lsof 查看文件写入的 进程 2. lsof /root/.influxdbv2/engine/data/bab49411e5f7cbce/autogen/1/000000036-000000002.tsm COMMAND PID USER FD TYPE …

sql server 非sa账号配置发布订阅

如果有些源端环境&#xff0c;sa账号被禁用&#xff0c;或者有其他问题&#xff0c;那可以按以下步骤操作。 使用高权限账户登录&#xff0c;另外需要拥有源端windows用户管理员的账号和密码 表发布订阅成功的前提&#xff1a;发布的表必须有主键。 创建一个专门用于发布订阅的…

国际导师上海面授大规模敏捷LeSS认证2024年8月22-24日开班 | 报名享特大福利

课堂互动练习 学员反馈 • “LeSS课我正经听过的有3次&#xff1b;两次Bas Vodde主讲&#xff0c;一次吕毅老师主讲。第一次应该是2015年&#xff0c;这门课中体现的对组织运作和产品开发底层逻辑的洞见令我折服。后来又陆续听了两次&#xff0c;每次都有更多体会。 我试着从一…

【递归、搜索与回溯】综合练习四

综合练习四 1.单词搜索2.黄金矿工3.不同路径 III 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.单词搜索 题目链接&#xff1a;79. 单词搜…

杨辉三角的快速求法

一、杨辉三角形 杨辉三角形&#xff0c;又称贾宪三角形&#xff0c;帕斯卡三角形&#xff0c;是二项式系数在三角形中的一种几何排列&#xff0c;是二项式系数在三角形中的一种几何排列&#xff0c;古称“开方作法本源图”。 杨辉三角的历史 北宋人贾宪约1050年首先使用“贾…

2024年,计算机相关专业依旧是热门选择吗?未来趋势大揭秘!

文章目录 引言一、行业竞争现状二、专业与个人的匹配度判断三、专业前景分析总结 引言 在科技日新月异的今天&#xff0c;计算机专业一直以其强大的实用性和广阔的就业前景吸引着无数学子的目光。然而&#xff0c;随着人工智能、大数据、云计算等领域的飞速发展&#xff0c;我…

第6天:表单处理与验证

第6天&#xff1a;表单处理与验证 目标 处理用户输入&#xff0c;实现数据验证。 任务概览 使用Django的表单类创建表单。学习表单验证和自定义验证方法。实现表单提交和数据处理。 详细步骤 1. 使用Django的表单类创建表单 Django提供了forms模块来处理表单&#xff0c…

下一个排列 - LeetCode 热题 99

大家好&#xff01;我是曾续缘&#x1f917; 今天是《LeetCode 热题 100》系列 发车第 99 天 技巧第 4 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 下一个排列 整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。 例如&#xff0c;arr [1,2,3] &a…

「51媒体」活动会议,展览展会,直播曝光的一种方法

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 我们在做活动会议&#xff0c;或者参加展览展会&#xff0c;需要进行直播的时候&#xff0c;可以通过一键同步多个媒体平台的方法&#xff0c;来扩大曝光&#xff0c;比如一场直播我们可…

FFmpeg开发笔记(三十九)给Visual Studio的C++工程集成FFmpeg

《FFmpeg开发实战&#xff1a;从零基础到短视频上线》一书的“第11章 FFmpeg的桌面开发”介绍了如何在Windows环境对Qt结合FFmpeg实现桌面程序&#xff0c;那么Windows系统通过Visual Studio开发桌面程序也是很常见的&#xff0c;下面就介绍如何在Visual Studio的C工程中集成F…

(转)请介绍一下Redis的数据淘汰策略

1. **NoEviction&#xff08;不淘汰&#xff09;**&#xff1a;当内存不足时&#xff0c;直接返回错误&#xff0c;不淘汰任何数据。该策略适用于禁止数据淘汰的场景&#xff0c;但需要保证内存足够。 2. **AllKeysLFU&#xff08;最少使用次数淘汰&#xff09;**&#xff1a;…

弃用Docker Desktop:在WSL2中玩转Docker之Docker Engine 部署与WSL入门

Docker技术概论 在WSL2中玩转Docker之Docker Engine部署 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://bl…

nginx精准禁止特定国家或者地区IP访问

1、安装依赖 dnf -y install gcc-c libtool gd-devel pcre pcre-devel openssl openssl-devel zlib zlib-devel libmaxminddb-devel pcre-devel zlib-devel gcc gcc-c make git2、获取NGINX安装包并安装 wget https://nginx.org/download/nginx-1.26.1.tar.gz git clone http…