首页 > 编程语言 >Java初学者笔记-04、异常与泛型

Java初学者笔记-04、异常与泛型

时间:2025-01-18 10:22:53浏览次数:1  
标签:Java 04 编译 包装 数据类型 类型 泛型 异常

异常

异常代表程序出现的问题。
Error错误和Exception异常。
RuntimeException运行时异常。
编译时异常,提醒程序员这里的程序很容易出错。

异常的基础处理

  1. 抛出给上层调用者。
  2. 使用try-catch处理。

异常的处理方案

  1. 底层异常抛出,最外层捕获异常记录异常并响应合适信息。
  2. (少见)最外层捕获异常,并尝试重新修复。

异常的作用

  1. 异常是用来定位程序bug的关键信息。
  2. 可以作为方法内部的一种特殊返回值,以便通知上层调用者,方法的执行问题。

自定义异常

分为自定义运行时异常和自定义编译时异常。
自定义编译时异常提醒比较激进,编译时就报错,需要抛出。
自定义运行时异常提醒不激进。
开发中使用哪个异常:如果担心问题很容易出现,就定义成编译时异常;不想干扰别人,就定义成运行时异常。
现在的规范就是禁止大家使用编译时异常,尽量使用运行时异常

泛型

定义类、接口、方法时,同时声明了一个或多个类型变量。如<E>
泛型类、泛型接口、泛型方法,统称为泛型。

泛型的常用类型变量

一般用大写的ETKVE一般是元素类型,T是返回值类型,KV是键值类型。

泛型的作用

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

泛型类和泛型接口

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

泛型方法

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

泛型的一些注意事项

  1. 自己通过<E>定义的才是泛型方法。使用E的不叫做泛型方法。
  2. 虽然Xiaomi和BYD是Car的子类,但是ArrayList<xiaomi>ArrayList<BYD>ArrayList<Car>没有半毛钱关系!

泛型的上下限

  1. 通配符是?,可以在使用泛型的时候代表一切类型。
  2. 泛型上限:? extends Car?能接收的必须是Car或者其子类。
  3. 泛型下限:? super Car?能接收的必须是Car或者其父类。

泛型支持的类型以及包装类

泛型不支持基本数据类型,只能支持对象类型(引用数据类型)。因为牵扯到泛型擦除。
泛型擦除:泛型工作在编译阶段,等编译后泛型就没用了,所以泛型在编译后都会被擦除。所有类型都会被恢复成Object类型。如果是Object o = 12; 很明显是不对的。

包装类

使用包装类,把基本数据类型包装成对象的类型。

基本数据类型 对应的包装类
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean

包装类如何包装基本数据类型

  1. 过时方法:public Integer(int value)
  2. 现有方法:public static Integer valueOf(int i)
  3. 推荐方法:自动装箱。

自动装箱,自动拆箱

基本数据类型可以直接转换为包装类型;包装类型可以自动转换为基本数据类型。

Integer it = 100;
int i = it;

包装类的其他功能

  1. 可以把基本类型的数据转换成字符串类型。
public static String toString(double d)
public String toString)

同样的功能可以通过用+拼接空字符串实现。

  1. 可以把字符串类型的数值转换成数值本身对应的真实数据类型(有用)
public static int parseInt(String s)
public static Integer valueOf(String s)
int i = Integer.valueOf("456");// 转换和自动拆箱

标签:Java,04,编译,包装,数据类型,类型,泛型,异常
From: https://www.cnblogs.com/subeipo/p/18678091/java-chu-xue-zhe-bi-ji04-yi-chang-yu-fan-xing

相关文章

  • leetcode——接雨水(java)
    给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例1:输入:height=[0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下,可以接6个单位的雨水(蓝色部分表示雨水)。示例......
  • 【2024年华为OD机试】 (A卷,200分)- 硬件产品销售方案(Java & JS & Python&C/C++)
    一、问题描述题目描述某公司目前推出了AI开发者套件,AI加速卡,AI加速模块,AI服务器,智能边缘多种硬件产品,每种产品包含若干个型号。现某合作厂商要采购金额为amount元的硬件产品搭建自己的AI基座。例如当前库存有N种产品,每种产品的库存量充足,给定每种产品的价格,记为price(不......
  • 【2024年华为OD机试】 (B卷,100分)- 流水线(Java & JS & Python&C/C++)
    一、问题描述题目描述一个工厂有m条流水线,来并行完成n个独立的作业,该工厂设置了一个调度系统,在安排作业时,总是优先执行处理时间最短的作业。现给定流水线个数m,需要完成的作业数n,每个作业的处理时间分别为t1,t2,...,tn。请你编程计算处理完所有作业的耗时为多......
  • 股票API接口使用python、JAVA等多种语言实例代码演示免费获取实时数据、历史数据、CDM
    ​最新整理的股票API接口,下方所有接口链接均可直接点击验证,查看返回的数据。沪深两市股票列表股票API接口链接(可点击验证):https://api.mairui.club/hslt/list/LICENCE-66D8-9F96-0C7F0FBCD073【实时数据接口】沪深两市实时交易数据接口股票API接口链接(可点击验证):https:......
  • leetcode——令牌放置(java)
    你的初始能量为power,初始分数为0,只有一包令牌以整数数组tokens给出。其中tokens[i]是第i个令牌的值(下标从0开始)。你的目标是通过有策略地使用这些令牌以最大化总分数。在一次行动中,你可以用两种方式中的一种来使用一个未被使用的令牌(但不是对同一个令牌使......
  • Cesium+Vue3教程(004):基于Vue3的Cesium添加地形和自定义地形
    文章目录03-添加地形与自定义地形添加地形添加水纹和光照效果加载自定义地形03-添加地形与自定义地形添加地形实现代码:constviewer=newCesium.Viewer("cesiumContainer",{terrainProvider:Cesium.createWorldTerrain(......
  • java集合
    集合想一下,目前为止,我们学过哪些可以存储元素的容器:1、数组,查询快,增删慢。既可以存储基本数据类型的元素,又可以存储引用数据类型的元素对于同一个数组而言,元素类型都是一样长度一旦创建旧固定了,不能改变长度。2、StringBuffer长度可以随着添加的字符个数而改变StringBuffe......
  • java常用类
    java常用类Api概述API(ApplicationProgrammingInterface)应用程序编程接口编写一个机器人程序去控制机器人踢足球,程序就需要向机器人发出向前跑、向后跑、射门、抢球等各种命令,没有编过程序的人很难想象这样的程序如何编写。但是对于有经验的开发人员来说,知道机器人厂商一......
  • 【GMTSAR】虚拟机Ubuntu22.04使用GMTSAR进行D-InSAR和SBAS-InSAR处理
    近期学习了一下GMTSAR,记录一下使用过程电脑为处理器为i7-13700K,给虚拟机分配了32G内存。大致的处理流程命令如下(因为懒得截图以及复制起来简单直接写在了txt文本里)虚拟机挂载共享文件夹虚拟机的安装教程CSDN有很多,可以看最新的教程,去官网下载新版(但是要创建账号填写相关......
  • Java基础学习(八)
    Java基础学习(八):字符串目录Java基础学习(八):字符串概述字符串的创建字符串内存分析String类常用方法StringBuilder类StringJoiner类字符串相关类底层原理本文为个人学习记录,内容学习自黑马程序员概述java.lang包是Java的核心包,其下的类都是无需手动导入即可使用的java.......