韩顺平java-枚举和注解异常包装类

news2025/1/13 13:25:44

文章目录

  • 11章 枚举和注解
    • 11.1枚举
    • 11.2注解
  • 12章 异常
    • 12.1 异常类型
    • 12.2异常处理
      • 1)try - catch - finally
      • 2)throws
    • 12.3 自定义异常
  • 13章 包装类wrapper
    • 13.1包装类
    • 13.2 String——不可变字符序列
    • 13.2 StringBuffer——可变字符序列
    • 13.3 StringBuilder
    • 13.4 Math
    • 13.5Arrays——管理或者操作数组
    • 13.6System
    • 13.7大数处理——BigInteger,BigDecimal
    • 13.8日期类Date
    • String练习题

11章 枚举和注解

11.1枚举

季节类——用户可以随意修改——但是季节类是有限且只读的——>枚举类(有限的 特定的对象)
用法示例

package com.hsp.test;

public class Season {
    public static void main(String[] args) {
        System.out.println(Season2.SPRING.getDisc());

    }
    enum Season2{
        SPRING("春天", "温暖"),
        WINTER("冬天", "寒冷"),
        AUTUMN("秋天", "凉爽"),
        SUMMER("夏天", "炎热"),
        What();
        // public static final Season SPRING = new Season("春天", "温")

        private String name;
        private String disc;

        Season2() {
        }
        Season2(String name, String disc) {
            this.name = name;
            this.disc = disc;
        }

        public String getName() {
            return name;
        }

        public String getDisc() {
            return disc;
        }

        @Override
        public String toString() {
            return "Season2{" +
                    "name='" + name + '\'' +
                    ", disc='" + disc + '\'' +
                    '}';
        }
    }

}



枚举需要写在第一行
常用方法:
1)toString:Enum 类已经重写过了,返回的是当前对象
名,子类可以重写该方法,用于返回对象的属性信息
2) name:返回当前对象名(常量名),子类中不能重写
3) ordinal:返回当前对象的位置号,默认从 0 开始
4) values:返回当前枚举类中所有的常量
5) valueOf:将字符串转换成枚举对象,要求字符串必须为已有的常量名,否则报异常!
6) compareTo

11.2注解

@Override只能修饰方法。其实起到一个检查的作用,看看是否真的重写了。
@Deprecated表示过时了,但不是不能用。可以作为版本升级的过渡使用。
@SupressWarinings抑制编译器警告。通常我们可以放置具体的语句, 方法,
四种元注解:修饰注解的注解

  1. Retention //指定注解的作用范围,三种 SOURCE,CLASS,RUNTIME
  2. Target // 指定注解可以在哪些地方使用
  3. Documented //指定该注解是否会在 javadoc 体现
  4. Inherited //子类会继承父类注解

12章 异常

12.1 异常类型

运行时异常不要求强制处理,编译时异常一定要进行处理
在这里插入图片描述
常见的运行时异常包括:

  1. NullPointerException 空指针异常
  2. ArithmeticException 数学运算异常
  3. ArrayIndexOutOfBoundsException 数组下标越界异常
  4. ClassCastException 类型转换异常
  5. NumberFormatException 数字格式不正确异常

12.2异常处理

1)try - catch - finally

程序员在代码中捕获异常,自行处理
细节
如果异常发生了,则在try中异常位置后面的代码不会执行
try finally 不管发生什么异常,都必须执行某个业务逻辑。但是没有捕获异常

2)throws

将异常抛出,交给调用者处理,最顶级的是jvm
编译异常必须处理,运行异常有默认处理机制,不一定要显式处理
子类重写父类的方法,子类抛出的异常要么和父类一致,要么为父类抛出类型的子类型

12.3 自定义异常

一般都是继承runtime exception,也就是运行时异常,这样可以使用默认处理机制。
throw 手动生成异常的关键字,在方法体中,后面跟的是异常对象
throws异常处理的一种方式,在方法声明处,后面跟的是异常类型。
https://www.jianshu.com/p/06755f52ba90

13章 包装类wrapper

13.1包装类

——基本数据类型用法的扩展
手动装箱和拆箱

		int a = 10;
        Integer b = Integer.valueOf(a);
        int aa = b.intValue();

        String str = b.toString();
        String str1 = b + "";
        String str2 = String.valueOf(b);

        Integer b2 = Integer.parseInt(str);
        Integer b3 = new Integer(str);

三元运算符是一个整体,会提升精度
-128-127对象缓存
只要有基本数据类型,== 判断的就是值是否相等

13.2 String——不可变字符序列

复用率高,效率低。

Unicode编码,一个汉字或者字母都是占两个字节
串行化——可以在网络上传输;可以相互比较大小

String是final类型,不能被其他类继承
private final char value[] 不可以修改(地址不可以修改,单个字符的内容可以变化)

String str1 = "java";//指向常量池
String str2 = new String("java");//指向堆中的对象,堆中的对象再指向常量池

常量相加,看的是常量池,变量相加,看的是堆
在这里插入图片描述
常用方法:
在这里插入图片描述
在这里插入图片描述

13.2 StringBuffer——可变字符序列

如果需要对字符串做大量的修改

——对于String的增强
不需要每次都更改地址
append
delete(start,end)
replace(start,end,string)
indexOf insert length
StringBuffer 父类——AbstractStringBuilder

13.3 StringBuilder

不是线程安全的——单线程使用

String 类设计成不可变的原因及好处?
其实好处就是原因,String 设计成不可变,主要是从性能和安全两方面考虑。
1、常量池的需要
这个方面很好理解,Java 中的字符串常量池的存在就是为了性能优化。
字符串常量池(String pool)是 Java 堆内存中一个特殊的存储区域,当创建一个 String 对象时,假如此字符串已经存在于常量池中,则不会创建新的对象,而是直接引用已经存在的对象。这样做能够减少 JVM 的内存开销,提高效率。
所以,如果字符串是可变的,那么常量池就没有存在的意义了。
2、hashcode 缓存的需要
因为字符串不可变,所以在它创建的时候 hashcode 就被缓存了,不需要重新计算。这就使得字符串很适合作为 HashMap 中的 key,效率大大提高。
3、多线程安全
多线程中,可变对象的值很可能被其他线程改变,造成不可预期的结果。而不可变的 String 可以自由在多个线程之间共享,不需要同步处理。

13.4 Math

abs绝对值 pow求幂 ceil向上取整 floor向下取整
round四舍五入 sqrt开方 random [0 , 1)之间的随机小数
System.out.println((int)(2 + Math.random() * (7 - 2 + 1)

13.5Arrays——管理或者操作数组

toString
sort——可以直接使用,也可以自己定制排序
实现comparator接口的匿名内部类

binarySearch——二叉查找,要求必须排序好,返回下标。如果不存在返回应该在的位置取负值
copyOf数组复制 可以选择拷贝多少个数值
fill数组填充Arrays.fill(num,99);
equals比较两个数组的元素是否相同
asList将数据转成List集合返回

13.6System

exit(0)
arraycopy(src,0,dest,0,length)
currentTimeMillens 距离1970-1-1毫秒数
gc

13.7大数处理——BigInteger,BigDecimal

整数 bigInteger.add() subtract() multiply() divide()
小数 调用divide方法的时候指定精度BigDecimal.ROUND_CEILING保留分子的精度

13.8日期类Date

Date

		Date d1 = new Date();
        System.out.println(d1);
        //Thu Dec 22 08:43:07 CST 2022
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss E");
        System.out.println(sdf.format(d1));
        //2022年12月22日 08:43:07 星期四
        Date parse = sdf.parse(format);
        System.out.println(parse);

Calendar
抽象类,构造器私有,可以通过getInstance获取实例
需要自己进行格式化

System.out.println("月:" + (c.get(Calendar.MONTH) + 1))

JDK8
LocalDate年月日 LocalTime时分秒 LocalDateTime年月日时分秒

LocalDateTime ldt = LocalDateTime.now(); //LocalDate.now();//LocalTime.now()
System.out.println(ldt);
//2. 使用 DateTimeFormatter 对象来进行格式化
// 创建 DateTimeFormatter 对象
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String format = dateTimeFormatter.format(ldt);
System.out.println("格式化的日期=" + format);
System.out.println("年=" + ldt.getYear());

String练习题

字符串反转

		String str = "123456";
        char[] ch = str.toCharArray();
        new String(ch);
        
		str.indexOf('')

判断是否是数字

if (ch[i] < '0' || ch[i] > '9')

格式化

String str = "Han Sun Ping";
String[] name = str.split(" ");
String format1 = String.format("%s, %s .%c", name[0], name[2], name[1].toUpperCase().charAt(0));
System.out.println(format1);

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

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

相关文章

【深入浅出Spring原理及实战】「开发实战系列」SpringSecurity技术实战之通过注解表达式控制方法权限

Spring Security权限控制机制 Spring Security中可以通过表达式控制方法权限&#xff0c;其中有四个支持使用表达式的注解&#xff0c;分别是PreAuthorize、PostAuthorize、PreFilter和PostFilter。其中前两者可以用来在方法调用前或者调用后进行权限检查&#xff0c;后两者可…

蓝牙不正常因为 unmet condition check

蓝牙不正常因为 unmet condition check date: 2022-12-22lastmod: 2022-12-23 现象&#xff1a;蓝牙键盘鼠标均不工作&#xff0c;图标也不显示&#xff0c;KDE系统设置显示“无已配对设备”&#xff0c;但是配对设备的按钮没有显示&#xff0c;啥按钮也没有显示 事前&#x…

使用msf生成木马反弹shell(windows系统)

一、理论总结 使用msf进行木马攻击总共分为三步即可&#xff1a; 1、生成攻击木马 2、配置监控主机 3、上传木马使得靶机中招 1.1生成攻击木马 使用msf来生成木马是一个比较方便的事情&#xff0c;使用msfvenom即可&#xff0c;框架模版为&#xff1a; msfvenom -p wind…

我国户外广告行业现状 电梯广告触达率最高 传统户外媒体刊例花费下降

户外广告特指以具体形式展示广告或告示、宣传品的载体&#xff0c;主要包含LED显示屏、LED幕墙、门头招牌、广告字、户外(室内)灯箱、大型立牌&#xff0c;甚至喷绘印刷品等生产制作环节&#xff0c;以及发布公益公告、商业广告、标识标牌、指示导向等广告内容。户外广告是面向…

Python - Order in chaos 混乱中的秩序之随机点中值连线

一.引言 刷短视频刷到了一个有趣的图形变化&#xff0c;随机给定 N 个点&#xff0c;将 N 个点首尾连接生成一个多边形&#xff0c;随后将每个边的中点连接并得到新的多边形&#xff0c;如此多次循环&#xff0c;最终总会得到一个椭圆形。 A.初始化 N 个点并生成多边形 B.取多…

Transformer实现以及Pytorch源码解读(四)-Encoder层

Transformer结构图 先放一张原论文中的图。从inputs到Poitional Encoding在前三部分中已经分析清楚&#xff0c;接下来往后分析。 Pytorch中对Transformer的调用 Pytorch将图1中左半部分的神经网络层用一个TransformerEncdoer(encoder_layer,num_layers)类进行封装&#xf…

【Kotlin 协程】Flow 异步流 ⑥ ( 调用 Flow#launchIn 函数指定流收集协程 | 通过取消流收集所在的协程取消流 )

文章目录一、调用 Flow#launchIn 函数指定流收集协程1、指定流收集协程2、Flow#launchIn 函数原型3、代码示例二、通过取消流收集所在的协程取消流一、调用 Flow#launchIn 函数指定流收集协程 1、指定流收集协程 响应式编程 , 是 基于事件驱动 的 , 在 Flow 流中会产生源源不断…

MySQL的数据类型和存储引擎介绍

一. MySQL数据类型 1. 整数类型 注&#xff1a;MySQL可以为整数类型指定宽度&#xff0c;比如 int(3)、int(5)&#xff0c;这个限制不是限制value的合法范围&#xff0c;所以对绝大数应用没有任何意义&#xff0c;对于存储而言&#xff0c;int(3) 和 int(5) 是相同的&#xff…

机器学习中的数学原理——随机梯度下降法

这个专栏主要是用来分享一下我在机器学习中的学习笔记及一些感悟&#xff0c;也希望对你的学习有帮助哦&#xff01;感兴趣的小伙伴欢迎私信或者评论区留言&#xff01;这一篇就更新一下《白话机器学习中的数学——随机梯度下降法》&#xff01; 一、什么是随机梯度下降法 随机…

NVM安装

注意事项&#xff1a; 1、不能安装任何node版本&#xff08;如存在请删除后安装nvm&#xff09;; 安装步骤&#xff1a; 1、下载nvm ![在这里插入图片描述](https://img-blog.csdnimg.cn/c9dcc27383aa41888347080438c0914e.png 解压后点击exe文件进行安装&#xff1a; &#x…

负载均衡简介

一、什么是负载均衡&#xff1f; 互联网早期&#xff0c;业务流量比较小并且业务逻辑比较简单&#xff0c;单台服务器便可以满足基本的需求&#xff1b;但随着互联网的发展&#xff0c;业务流量越来越大并且业务逻辑也越来越复杂&#xff0c;单台机器的性能问题以及单点问题凸显…

SMMP:一种基于稳定成员资格的多峰聚类算法(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

伦茨LENZE GDC操作指南

1、GDC软件综述 GDC程序可以“在线模式”和“离线模式”使用&#xff1a; 离线模式 可以在没有与目标系统&#xff08;控制器&#xff09;相连接条件下使用。该功能允许离线设定参数、编程等工作。 在线模式 通过PC的串口、并口或系统总线实现GDC与目标系统&#xff08;控制器…

376. 机器任务——最小点覆盖+匈牙利算法

有两台机器 A&#xff0c;B 以及 K 个任务。 机器 A 有 N 种不同的模式&#xff08;模式 0∼N−1&#xff09;&#xff0c;机器 B 有 M 种不同的模式&#xff08;模式 0∼M−1&#xff09;。 两台机器最开始都处于模式 0。 每个任务既可以在 A 上执行&#xff0c;也可以在 B…

艾美捷游离巯基检测试剂盒基本参数和特点说明

游离硫醇&#xff08;即蛋白质上的游离半胱氨酸、谷胱甘肽和半胱氨酸残基&#xff09;的检测和测量是研究许多生物系统中的生物过程和事件的基本任务之一。 艾美捷游离巯基检测试剂盒提供了一种简单、可重复和灵敏的工具&#xff0c;用于测定样品&#xff08;即血浆、血清、组织…

3D格式转换工具HOOPS Exchange助力3D 打印软件实现质的飞跃

HOOPS SDK是用于3D工业软件开发的工具包&#xff0c;其中包括4款工具&#xff0c;分别是用于读取和写入30多种CAD文件格式的HOOPS Exchange、专注于Web端工程图形渲染的HOOPS Communicator、用于移动端和PC端工程图形渲染的HOOPS Visualize、支持将3D数据以原生3D PDF、HTML和标…

解决电脑C盘空间不足,发现微信和qq文件占用了大量内存

项目场景&#xff1a; 电脑C盘空间不足&#xff0c;需要隔一段时间清理垃圾&#xff0c;分析占用空间的文件&#xff0c;将C盘文件迁移到E盘。 问题描述 C盘提示空间不足 原因分析&#xff1a; 通过扫描磁盘发现微信和qq文件占用了几十G的内存&#xff0c;由于微信和qq的一…

C++成员函数当作参数调用的两种方式

平时编程时&#xff0c;多用来将数据进行传参&#xff0c;在考虑回调场景下我们会将函数单做参数传给被调用函数&#xff0c;让被调用函数在时机成熟时进行调用。在某些场景下&#xff0c;需要将类的成员函数当作参数进行回调&#xff0c;此时定义成员函数形参的方式通常有两种…

我的python学习经历及资源整理

对于小白来说&#xff0c;有个人引导会比自学要高效的多&#xff0c;尤其容易坚持不下去的小伙伴。可以试试下面这个入门课程&#xff0c;不用本地安装Python环境&#xff0c;能直接在网页上敲代码&#xff0c;还有大牛老师带着入门&#xff0c;能少走很多弯路&#xff01;只要…

直播弹幕系统(五)- 整合Stomp替换原生WebSocket方案探究

直播弹幕系统&#xff08;五&#xff09;- 整合Stomp替换原生WebSocket方案探究前言一. STOMP 协议简单介绍1.1 客户端编码基础1.2 服务端编码基础1.2.1 SimpMessagingTemplate1.2.2 SendTo 和 MessageMapping二. SpringBoot整合STOMP并实现聊天室2.1 基础配置和依赖2.2 WebSoc…