Java 基础语法 Day10

一、异常

1.1异常的基本处理

1.抛出异常:throw

2.捕获异常:try-catch

1.2异常的作用

1.定位程序bug的关键信息

2.可以作为方法内部的一种特殊返回值,通知给上层调用,方便处理

//需求:将两个数的除返回
public class Demo1 {public static void main(String[] args) {try{System.out.println(div(5,0));System.out.println("程序运行成功");}catch(RuntimeException e){e.printStackTrace();System.out.println("底层方法运行失败");}}public static int div(int a , int b){if(b==0){ //当出现异常时,返回给上层调用者,还能告知上层调用,底层是否执行成功//注意,不能直接在这return,因为必须返回一个int值throw new RuntimeException("除数不能为0!"); //抛出运行异常//throw new Exception("除数不能为0!") 抛出编译式异常//注意,抛出了异常后,必须到上层调用的地方处理异常,使用try-catch语句};int res = a / b;return res;}
}

1.2 自定义异常

处理开发中自己的问题,需要自己来定义异常类,来代表某种问题。

可以继承RuntimeException或是直接继承Exception。

语法:

定义一个异常类继承Exception,重写构造器,通过throw new 异常类(XXX)来创建异常对象并抛出。

直接继承编译式异常,在编译阶段就报错,提醒比较激进。

//认识自定义异常
//需求:公司的系统中,接收到年龄大于150岁,就是一个异常
public class ExceptionDemo2 {public static void main(String[] args) {try{printAge(180);System.out.println("运行成功");}catch(Age_ILLegal_Exception e){e.printStackTrace();System.out.println("失败了");}}public static void printAge(int age) throws Age_ILLegal_Exception{if(age > 120){throw new Age_ILLegal_Exception("年龄不能高于120!!!");}else{System.out.println(age);}}
}

自定义运行时异常,语法跟上面无异,就是继承的RuntimeException即可。

小区别:编译时异常,必须显式的抛出(方法定义那throws)并处理,runtime不需要显式地抛出和处理。

事实上,继承RuntimeException更好。

1.3异常的处理方案

方案一:底层异常层层往上抛,最外层捕获异常,记录下异常信息,并响应适合用户观看的信息进行提示。推荐

方案二:最外层捕获异常,尝试重新修复,代码如下:

public class ExceptionDemo2 {public static void main(String[] args) {boolean flag = true;while(flag){try{printAge();System.out.println("运行成功");flag = false;}catch(Age_ILLegal_Exception e){e.printStackTrace();System.out.println("失败了,再来一遍");}}}

直到运行成功,才把flag设置为false,以避免异常影响。

二、泛型

泛型是:定义类,接口,方法时,同时声明了一个或多个类型变量 如: <E>.

称为泛型类,泛型接口,泛型方法,统称为泛型。

作用:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力!这样可以避免强制类型转换,及可能出现的异常。

泛型的本质:把具体的数据类型作为参数传递给类型变量E,以约束传递的数据类型。

1.1泛型类

使用了泛型的类型变量,就是泛型类,比如:修饰符 class 类名<类型变量,类型变量。。。。>{}

public class ArrayList<E,T,K,V> (一般用大写)

public class MyArrayList<E> {public boolean add(E e) {return true;}
}
//学会自定义泛型类
//需求:模拟ArrayList集合,自定义一个集合MyListpublic class demo2 {public static void main(String[] args) {MyArrayList<String> list = new MyArrayList<>();System.out.println(list.add("acssa"));}
}//true

1.2泛型接口

修饰符 interface 接口名<类型变量,类型变量。。。>{}

//这就是一个泛型接口,可以操作不同类型的变量:比如老师,学生。public interface Data <T>{void add(T t);void remove(T t);void update(T t);T query(int id);
}
public class StudentData implements Data<student>{@Overridepublic void add(student student) {}@Overridepublic void remove(student student) {}@Overridepublic void update(student student) {}@Overridepublic student query(int id) {return null;}
}

StudentData类,来管理学生数据,用它去实现接口即可,StudentData类里的所有方法都重写接口,传入的参数是student。同理,管理老师的数据,新建一个TeacherData类即可。

1.3泛型方法、通配符、上下限

泛型方法:

修饰符<类型变量,类型变量...> 返回值类型 方法名 (形参列表){ }

//目标:学会定义泛型方法,搞清楚作用
//需求:打印任意数组的内容
public class demo {public static void main(String[] args) {}// public static void printArray(int[] arr) {} 如果这样写,只能打印int类型的数组了,不能打印其他类型的数组public static <T> void printArray(T[] arr) {//使用泛型,自定义数组里的数据类型,}public static <T> T getMax(T[] arr) {return arr[0];}
}

通配符:

就是"?"(问号在java中叫做通配符),可以在使用泛型时,代表一切类型。E,T,K,V是在定义泛型的时候使用

泛型上限:

? extends Car : 代表?能接受的必须是Car及其子类

? super Car :代表 ? 能接受的必须是car及其父类

//理解通配符和上下限
//需求,开发一个极品飞车游戏,很多类型的车来比赛
public class demo2 {public static void main(String[] args) {ArrayList list = new ArrayList();go(list);}public static void go(ArrayList < ? extends Objects> list) {//这里是在使用泛型,代表ArrayList里接收的是一切继承Objects的对象}}

1.4泛型支持的类型、包装类

泛型不支持基本数据类型(int ,String,double... ),只能支持对象类型(引用数据类型).

由此引出了包装类,将基本数据类型包装成对象类型,使得泛型可以支持。

包装类:

                        

把基本类型包装成包装类对象:

1.手工包装:

Integer it = Integer.valueof(100);//推荐

2.自动装箱与自动拆箱

自动装箱:基本数据类型的数据可以直接变成包装对象的数据,不需要其他操作
Integer it = 100; 这里就等于 Integer it =  Integer.valueof();
自动拆箱:把包装类型的对象直接给基本类型的数据
Integer it2 = 133;
int it3 = it2;
把133赋值给it3
ArrayList<Integer> list = new ArrayList<>();指定arraylist中只能装整数
list.add(123);添加整数,实际上添加的是包装类对象

包装类本身也具有它的功能

比如:

1.将基本类型的数据转化成字符串类型

int j =23;
String rs = Integer.toString(j); 输出"23"

2.把字符串类型的数值,转换成数值本身对应的真实数据类型(常用)

public static int parseInt(String s)

public static Integer valueOf(String s)

这两个方法都可以

String s = 98;int res = Integer.parseInt(s);
int res = Integer.valueof(s);
把字符串转化成98整数

三、集合框架

集合是一种容器,它的大小可变,十分常用.

集合体系:

Collection:单列集合,每个元素只包含一个值

Map:双列集合,每个元素包含两个值(键值对)

Collection集合的常用功能:

先学Colletion集合的功能,因为它的子类会继承它的功能

3.1Colletion的三种遍历方式

1.迭代器遍历:迭代器是用来遍历集合的专属方式,在JAVA中,迭代器的代表是Iterator

Collection集合获取迭代器的方法:Iterator<E> iterator() 返回集合中的迭代器对象,该迭代器对象默认指向当前集合的第一个元素。

Iterator迭代器中的常用方法:

boolean hasNext() 访问当前位置是否有元素存在,若有,返回true
E next() 用于获取当前位置的元素
public class CollectionTraversal {public static void main(String[] args) {Collection<Integer> ls = new ArrayList<>();ls.add(1);ls.add(2);ls.add(123);System.out.println(ls);//1.得到迭代器对象Iterator<Integer> it = ls.iterator();while (it.hasNext()) {System.out.println(it.next());} //问当前元素是否存在!!!取出当前元素移动到下一位,初始默认指向第一个元素的位置// 不要以为hasNext是问的下一个元素

2.增强for循环

for (元素的数据类型 变量名 : 数组或者集合){}

3.Lambda表达式

需要结合Collection的forEach方法来完成

        //2.使用forEach方法遍历ls.forEach(s -> System.out.println(s));

三种遍历方式的区别:

认识并发修改异常问题:遍历集合的同时,若又存在增删集合元素的行为时可能会出业务异常,这种现象称为并发修改异常问题。

//目标:认识并发修改异常问题,搞清楚每种遍历的区别
public class demo2 {public static void main(String[] args) {ArrayList<String> ls = new ArrayList<>();ls.add("JAVA入门");ls.add("宁夏枸杞");ls.add("黑枸杞");ls.add("高等数学");ls.add("特级枸杞");//需求:把所有枸杞都删了/*      for(int i = 0 ;i < ls.size() ; i ++){String name = ls.get(i);if(name.contains("枸杞")){ls.remove(name);}}System.out.println(ls); //发现并没有删干净![JAVA入门, 黑枸杞, 高等数学]原因:每删除一个元素,后一个元素会补上来,导致漏删。解决方法:倒着遍历,或者正着遍历,每遍历一个元素,i--*///方案2:对于没有索引的集合,使用迭代器遍历并删除,也存在并发修改异常问题//解决方案:使用迭代器自己的方法来删除,不要用集合的方法来删Iterator<String> it = ls.iterator();while (it.hasNext()) {String name = it.next();if(name.contains("枸杞")){it.remove();}}System.out.println(ls);//观点:若集合没有索引,想同时遍历并删除,只能使用迭代器;有索引,可以用for遍历并删除//增强for循环,只能用来遍历

3.2 List集合

1.List的特点、特有功能

特点:有序,可重复,有索引。

ArrayList和LinkedList他们都有序,可重复,有索引,但他们的底层实现不同,适合的场景不同

2.ArrayList的底层实现

基于数组存储数据。

数组特点:根据索引查询数据快,查询数据通过地址值和索引定位,但是查询任意数据耗时是相同的。

增删数据的效率低:数组的长度是固定的,而ArrayList长度可变,这就导致增数据需要扩容;删数据要一个一个的把删除数据之后的元素前移。

3.LinkedList的底层实现

基于双向链表存储数据

特点:查询慢,无论查询哪个数都要从头开始找

链表的增删相对快,试想LeetCode做过的那些题。

LinkedList常见的应用场景:

实现队列:先进先出

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

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

相关文章

音视频入门基础:FLV专题(9)——Script Tag简介

一、SCRIPTDATA 根据《video_file_format_spec_v10_1.pdf》第75页到76页&#xff0c;如果某个Tag的Tag header中的TagType值为18&#xff0c;表示该Tag为Script Tag&#xff08;脚本Tag&#xff0c;又称Data Tag、SCRIPTDATA tag&#xff09;。这时如果Filter的值不为1表示未加…

UG NX二次开发(C++)-建模-采用NXOpen获取拉伸特征的信息

文章目录 1、前言2、创建一个特征3 采用NXOpen来实现拉伸特征信息的获取1、前言 UG NX二次开发过程中,大部分初学者喜欢用UFun函数来实现UG NX二次开发的功能,因为相较于NXOpen,UFun函数简单易懂;但是有时UFun函数如果初始值设置不好,出现的错误也比较难排查。比如对于拉…

Spark SQL分析层优化

导读&#xff1a;本期是《深入浅出Apache Spark》系列分享的第四期分享&#xff0c;第一期分享了Spark core的概念、原理和架构&#xff0c;第二期分享了Spark SQL的概念和原理&#xff0c;第三期则为Spark SQL解析层的原理和优化案例。本次分享内容主要是Spark SQL分析层的原理…

Redis篇(Redis原理 - 数据结构)(持续更新迭代)

目录 一、动态字符串 二、intset 三、Dict 1. 简介 2. Dict的扩容 3. Dict的rehash 4. 知识小结 四、ZipList 1. 简介 2. ZipListEntry 3. Encoding编码 五、ZipList的连锁更新问题 六、QuickList 七、SkipList 八、RedisObject 1. 什么是 redisObject 2. Redi…

用 API 实现 AI 视频摘要:动手制作属于你的 AI 视频小助手

AI 视频摘要想必你一定不陌生&#xff0c;在各大视频平台&#xff0c;比如 B 站&#xff0c;评论区的 AI 视频小助手就如雨后春笋般遍地都是。 今天&#xff0c;让我们来填了这“护城河”&#xff0c;站到墙上看一看它的全貌。 简而言之&#xff0c;AI 视频摘要的工作流程如下&…

基于Spring Boot+Unipp的中考体测训练小程序(协同过滤算法、图形化分析)【原创】

&#x1f388;系统亮点&#xff1a;协同过滤算法、图形化分析&#xff1b; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17 前端&#xff1a; 技术&#xff1a;框…

研究生如何利用ChatGPT帮助开展日常科研工作?

小白可做&#xff01;全自动AI影视解说一键成片剪辑工具https://docs.qq.com/doc/DYnl6d0FLdHp0V2ll 作为当代研究生&#xff0c;科研工作三部曲----读文献、开组会、数据分析。无论哪一个&#xff0c;都令研究生们倍感头疼&#xff0c;简直就是梦魇。每当看到导师发来的消息&a…

AI面试指南:AI工具总结评测,助力求职季

AI面试指南&#xff1a;AI工具总结评测&#xff0c;助力求职季 摘要&#xff1a; 在竞争激烈的AI领域秋招季&#xff0c;准备充分并借助高效工具是提升面试通过率的关键。本文主要介绍一些针对秋招的AI面试工具和学习资源&#xff0c;分为简历优化、面试助手、手撕代码练习三个…

HarmonyOS/OpenHarmony 如何将rawfile中文件复制到沙箱中

关键词&#xff1a;h5离线加载、HarmonyOS、OpenHarmony、文件操作、复制、解压 当下有一个场景&#xff0c;需要离线加载 h5离线资源zip包&#xff0c;并实现资源包的动态更新&#xff0c;那么仅靠 $rawfile并不能实现该功能&#xff0c;那么我们该如何实现&#xff1f; 我们…

YOLO11改进|注意力机制篇|引入MLCA轻量级注意力机制

目录 一、MLCA注意力机制1.1MLCA注意力介绍1.2MLCA核心代码 五、添加MLCA注意力机制5.1STEP15.2STEP25.3STEP35.4STEP4 六、yaml文件与运行6.1yaml文件6.2运行成功截图 一、MLCA注意力机制 1.1MLCA注意力介绍 MLCA&#xff08;Multi-Level Channel Attention&#xff0c;多级通…

【前端安全】js逆向之微信公众号登录密码

❤️博客主页&#xff1a; iknow181 &#x1f525;系列专栏&#xff1a; 网络安全、 Python、JavaSE、JavaWeb、CCNP &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 随着发展&#xff0c;越来越多的登录页面添加了密码加密的措施&#xff0c;使得暴力破解变得不在简单&a…

SpringBoot教程(安装篇) | Docker Desktop的安装(Windows下的Docker环境)

SpringBoot教程&#xff08;安装篇&#xff09; | Docker Desktop的安装&#xff08;Windows下的Docker环境&#xff09; 前言如何安装Docker Desktop资源下载安装启动&#xff08;重点&#xff09;1. 检查 bcdedit的hypervisorlaunchtype是否为Auto2. 检查CPU是否开启虚拟化3.…

c#增删改查 (数据操作的基础)

//数据操作无非4种 //增删改查 是数据操作的基础 int[] ints { 110, 120, 119 }; //1. 查 在这里就是获取数组中的数据 int num ints[1]; //将数组中的某个元素取出来 Console.WriteLine(num); //2. 改 将数据从…

[大语言模型-论文精读] 利用多样性进行大型语言模型预训练中重要数据的选择

[大语言模型-论文精读] 利用多样性进行大型语言模型预训练中重要数据的选择 论文信息&#xff1a; Harnessing Diversity for Important Data Selection in Pretraining Large Language Models Authors: Chi Zhang, Huaping Zhong, Kuan Zhang, Chengliang Chai, Rui Wang, X…

python之认识变量

1、变量 1.1、定义 字面意思来看&#xff0c;会发生改变的量称为变量。 相反的&#xff0c;如果有一个不会发生改变的量&#xff0c;它应该称为不变量&#xff0c;即常量。 1.2、引入变量的原因 主要是为了方便程序员动态的管理、操控数据。 1.3、变量的三要素 名称 类型…

【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL64

时钟切换 描述 题目描述&#xff1a; 存在两个同步的倍频时钟clk0 clk1,已知clk0是clk1的二倍频&#xff0c;现在要设计一个切换电路&#xff0c;sel选择时候进行切换&#xff0c;要求没有毛刺。 信号示意图&#xff1a; 波形示意图&#xff1a; 输入描述&#xff1a; …

Oracle bbed编译安装及配置

1. 什么是bbed &#xff1f; Oracle Block Brower and EDitor Tool,是一个可以对oracle data block进行查看&#xff0c;编辑修改的内置工具。对于bbed&#xff0c;oracle本身是不提供支持的。 2. 如何编译bbed环境&#xff1f; 10g版本&#xff1a; 1) 编译bbed cd $ORACL…

物联网智能项目全面解析

目录 引言 一、物联网概述 1.1 什么是物联网 1.2 物联网的历史与发展 二、物联网智能项目分类 三、关键组件与技术 3.1 传感器和执行器 3.2 连接技术 3.3 数据处理与分析 3.4 用户界面 四、物联网智能项目案例分析 4.1 智能家居 4.2 智慧城市 4.3 工业物联网 4.4…

Python编码系列—Python状态模式:轻松管理对象状态的变化

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

SSM环卫人员管理平台—计算机毕业设计源码36412

目 录 摘要 1 绪论 1.1背景及意义 1.2国内外研究概况 1.3研究内容 1.4 ssm框架介绍 1.5论文结构与章节安排 2 环卫人员管理平台系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.2.2数据修改流程 2.2.3数据删除流程 2.3 系统功能分析 2.3.1 功能性…