韩顺平java-枚举和注解&异常&包装类-创新互联
- 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练习题
季节类——用户可以随意修改——但是季节类是有限且只读的——>枚举类(有限的 特定的对象)
用法示例
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
@Override只能修饰方法。其实起到一个检查的作用,看看是否真的重写了。
@Deprecated表示过时了,但不是不能用。可以作为版本升级的过渡使用。
@SupressWarinings抑制编译器警告。通常我们可以放置具体的语句, 方法,
四种元注解:修饰注解的注解
- Retention //指定注解的作用范围,三种 SOURCE,CLASS,RUNTIME
- Target // 指定注解可以在哪些地方使用
- Documented //指定该注解是否会在 javadoc 体现
- Inherited //子类会继承父类注解
运行时异常不要求强制处理,编译时异常一定要进行处理
常见的运行时异常包括:
- NullPointerException 空指针异常
- ArithmeticException 数学运算异常
- ArrayIndexOutOfBoundsException 数组下标越界异常
- ClassCastException 类型转换异常
- NumberFormatException 数字格式不正确异常
程序员在代码中捕获异常,自行处理
细节
如果异常发生了,则在try中异常位置后面的代码不会执行
try finally 不管发生什么异常,都必须执行某个业务逻辑。但是没有捕获异常
将异常抛出,交给调用者处理,最顶级的是jvm
编译异常必须处理,运行异常有默认处理机制,不一定要显式处理
子类重写父类的方法,子类抛出的异常要么和父类一致,要么为父类抛出类型的子类型
一般都是继承runtime exception,也就是运行时异常,这样可以使用默认处理机制。
throw 手动生成异常的关键字,在方法体中,后面跟的是异常对象
throws异常处理的一种方式,在方法声明处,后面跟的是异常类型。
https://www.jianshu.com/p/06755f52ba90
——基本数据类型用法的扩展
手动装箱和拆箱
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对象缓存
只要有基本数据类型,== 判断的就是值是否相等
复用率高,效率低。
Unicode编码,一个汉字或者字母都是占两个字节
串行化——可以在网络上传输;可以相互比较大小
String是final类型,不能被其他类继承
private final char value[] 不可以修改(地址不可以修改,单个字符的内容可以变化)
String str1 = "java";//指向常量池
String str2 = new String("java");//指向堆中的对象,堆中的对象再指向常量池
常量相加,看的是常量池,变量相加,看的是堆
常用方法:
如果需要对字符串做大量的修改
——对于String的增强
不需要每次都更改地址
append
delete(start,end)
replace(start,end,string)
indexOf insert length
StringBuffer 父类——AbstractStringBuilder
不是线程安全的——单线程使用
String 类设计成不可变的原因及好处?
其实好处就是原因,String 设计成不可变,主要是从性能和安全两方面考虑。
1、常量池的需要
这个方面很好理解,Java 中的字符串常量池的存在就是为了性能优化。
字符串常量池(String pool)是 Java 堆内存中一个特殊的存储区域,当创建一个 String 对象时,假如此字符串已经存在于常量池中,则不会创建新的对象,而是直接引用已经存在的对象。这样做能够减少 JVM 的内存开销,提高效率。
所以,如果字符串是可变的,那么常量池就没有存在的意义了。
2、hashcode 缓存的需要
因为字符串不可变,所以在它创建的时候 hashcode 就被缓存了,不需要重新计算。这就使得字符串很适合作为 HashMap 中的 key,效率大大提高。
3、多线程安全
多线程中,可变对象的值很可能被其他线程改变,造成不可预期的结果。而不可变的 String 可以自由在多个线程之间共享,不需要同步处理。
abs绝对值 pow求幂 ceil向上取整 floor向下取整
round四舍五入 sqrt开方 random [0 , 1)之间的随机小数
System.out.println((int)(2 + Math.random() * (7 - 2 + 1)
toString
sort——可以直接使用,也可以自己定制排序
实现comparator接口的匿名内部类
binarySearch——二叉查找,要求必须排序好,返回下标。如果不存在返回应该在的位置取负值
copyOf数组复制 可以选择拷贝多少个数值
fill数组填充Arrays.fill(num,99);
equals比较两个数组的元素是否相同
asList将数据转成List集合返回
exit(0)
arraycopy(src,0,dest,0,length)
currentTimeMillens 距离1970-1-1毫秒数
gc
整数 bigInteger.add() subtract() multiply() divide()
小数 调用divide方法的时候指定精度BigDecimal.ROUND_CEILING保留分子的精度
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);
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章标题:韩顺平java-枚举和注解&异常&包装类-创新互联
标题链接:http://myzitong.com/article/cepdgi.html