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

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);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值