新聞中心
- 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——管理或者操作數(shù)組
- 13.6System
- 13.7大數(shù)處理——BigInteger,BigDecimal
- 13.8日期類Date
- String練習(xí)題
季節(jié)類——用戶可以隨意修改——但是季節(jié)類是有限且只讀的——>枚舉類(有限的 特定的對象)
用法示例
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 類已經(jīng)重寫過了,返回的是當(dāng)前對象
名,子類可以重寫該方法,用于返回對象的屬性信息
2) name:返回當(dāng)前對象名(常量名),子類中不能重寫
3) ordinal:返回當(dāng)前對象的位置號,默認(rèn)從 0 開始
4) values:返回當(dāng)前枚舉類中所有的常量
5) valueOf:將字符串轉(zhuǎn)換成枚舉對象,要求字符串必須為已有的常量名,否則報異常!
6) compareTo
@Override只能修飾方法。其實起到一個檢查的作用,看看是否真的重寫了。
@Deprecated表示過時了,但不是不能用??梢宰鳛榘姹旧壍倪^渡使用。
@SupressWarinings抑制編譯器警告。通常我們可以放置具體的語句, 方法,
四種元注解:修飾注解的注解
- Retention //指定注解的作用范圍,三種 SOURCE,CLASS,RUNTIME
- Target // 指定注解可以在哪些地方使用
- Documented //指定該注解是否會在 javadoc 體現(xiàn)
- Inherited //子類會繼承父類注解
運行時異常不要求強制處理,編譯時異常一定要進行處理
常見的運行時異常包括:
- NullPointerException 空指針異常
- ArithmeticException 數(shù)學(xué)運算異常
- ArrayIndexOutOfBoundsException 數(shù)組下標(biāo)越界異常
- ClassCastException 類型轉(zhuǎn)換異常
- NumberFormatException 數(shù)字格式不正確異常
程序員在代碼中捕獲異常,自行處理
細節(jié)
如果異常發(fā)生了,則在try中異常位置后面的代碼不會執(zhí)行
try finally 不管發(fā)生什么異常,都必須執(zhí)行某個業(yè)務(wù)邏輯。但是沒有捕獲異常
將異常拋出,交給調(diào)用者處理,最頂級的是jvm
編譯異常必須處理,運行異常有默認(rèn)處理機制,不一定要顯式處理
子類重寫父類的方法,子類拋出的異常要么和父類一致,要么為父類拋出類型的子類型
一般都是繼承runtime exception,也就是運行時異常,這樣可以使用默認(rèn)處理機制。
throw 手動生成異常的關(guān)鍵字,在方法體中,后面跟的是異常對象
throws異常處理的一種方式,在方法聲明處,后面跟的是異常類型。
https://www.jianshu.com/p/06755f52ba90
——基本數(shù)據(jù)類型用法的擴展
手動裝箱和拆箱
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對象緩存
只要有基本數(shù)據(jù)類型,== 判斷的就是值是否相等
復(fù)用率高,效率低。
Unicode編碼,一個漢字或者字母都是占兩個字節(jié)
串行化——可以在網(wǎng)絡(luò)上傳輸;可以相互比較大小
String是final類型,不能被其他類繼承
private final char value[] 不可以修改(地址不可以修改,單個字符的內(nèi)容可以變化)
String str1 = "java";//指向常量池
String str2 = new String("java");//指向堆中的對象,堆中的對象再指向常量池
常量相加,看的是常量池,變量相加,看的是堆
常用方法:
如果需要對字符串做大量的修改
——對于String的增強
不需要每次都更改地址
append
delete(start,end)
replace(start,end,string)
indexOf insert length
StringBuffer 父類——AbstractStringBuilder
不是線程安全的——單線程使用
String 類設(shè)計成不可變的原因及好處?
其實好處就是原因,String 設(shè)計成不可變,主要是從性能和安全兩方面考慮。
1、常量池的需要
這個方面很好理解,Java 中的字符串常量池的存在就是為了性能優(yōu)化。
字符串常量池(String pool)是 Java 堆內(nèi)存中一個特殊的存儲區(qū)域,當(dāng)創(chuàng)建一個 String 對象時,假如此字符串已經(jīng)存在于常量池中,則不會創(chuàng)建新的對象,而是直接引用已經(jīng)存在的對象。這樣做能夠減少 JVM 的內(nèi)存開銷,提高效率。
所以,如果字符串是可變的,那么常量池就沒有存在的意義了。
2、hashcode 緩存的需要
因為字符串不可變,所以在它創(chuàng)建的時候 hashcode 就被緩存了,不需要重新計算。這就使得字符串很適合作為 HashMap 中的 key,效率大大提高。
3、多線程安全
多線程中,可變對象的值很可能被其他線程改變,造成不可預(yù)期的結(jié)果。而不可變的 String 可以自由在多個線程之間共享,不需要同步處理。
abs絕對值 pow求冪 ceil向上取整 floor向下取整
round四舍五入 sqrt開方 random [0 , 1)之間的隨機小數(shù)
System.out.println((int)(2 + Math.random() * (7 - 2 + 1)
toString
sort——可以直接使用,也可以自己定制排序
實現(xiàn)comparator接口的匿名內(nèi)部類
binarySearch——二叉查找,要求必須排序好,返回下標(biāo)。如果不存在返回應(yīng)該在的位置取負值
copyOf數(shù)組復(fù)制 可以選擇拷貝多少個數(shù)值
fill數(shù)組填充Arrays.fill(num,99);
equals比較兩個數(shù)組的元素是否相同
asList將數(shù)據(jù)轉(zhuǎn)成List集合返回
exit(0)
arraycopy(src,0,dest,0,length)
currentTimeMillens 距離1970-1-1毫秒數(shù)
gc
整數(shù) bigInteger.add() subtract() multiply() divide()
小數(shù) 調(diào)用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
抽象類,構(gòu)造器私有,可以通過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 對象來進行格式化
// 創(chuàng)建 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練習(xí)題字符串反轉(zhuǎn)
String str = "123456";
char[] ch = str.toCharArray();
new String(ch);
str.indexOf('')
判斷是否是數(shù)字
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);
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
本文名稱:韓順平j(luò)ava-枚舉和注解&異常&包裝類-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://fisionsoft.com.cn/article/cepdgi.html