十年網(wǎng)站開(kāi)發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶(hù) + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專(zhuān)業(yè)推廣+無(wú)憂(yōu)售后,網(wǎng)站問(wèn)題一站解決
季節(jié)類(lèi)——用戶(hù)可以隨意修改——但是季節(jié)類(lèi)是有限且只讀的——>枚舉類(lèi)(有限的 特定的對(duì)象)
用法示例
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 + '\'' +
'}';
}
}
}
枚舉需要寫(xiě)在第一行
常用方法:
1)toString:Enum 類(lèi)已經(jīng)重寫(xiě)過(guò)了,返回的是當(dāng)前對(duì)象
名,子類(lèi)可以重寫(xiě)該方法,用于返回對(duì)象的屬性信息
2) name:返回當(dāng)前對(duì)象名(常量名),子類(lèi)中不能重寫(xiě)
3) ordinal:返回當(dāng)前對(duì)象的位置號(hào),默認(rèn)從 0 開(kāi)始
4) values:返回當(dāng)前枚舉類(lèi)中所有的常量
5) valueOf:將字符串轉(zhuǎn)換成枚舉對(duì)象,要求字符串必須為已有的常量名,否則報(bào)異常!
6) compareTo
@Override只能修飾方法。其實(shí)起到一個(gè)檢查的作用,看看是否真的重寫(xiě)了。
@Deprecated表示過(guò)時(shí)了,但不是不能用??梢宰鳛榘姹旧?jí)的過(guò)渡使用。
@SupressWarinings抑制編譯器警告。通常我們可以放置具體的語(yǔ)句, 方法,
四種元注解:修飾注解的注解
運(yùn)行時(shí)異常不要求強(qiáng)制處理,編譯時(shí)異常一定要進(jìn)行處理
常見(jiàn)的運(yùn)行時(shí)異常包括:
程序員在代碼中捕獲異常,自行處理
細(xì)節(jié)
如果異常發(fā)生了,則在try中異常位置后面的代碼不會(huì)執(zhí)行
try finally 不管發(fā)生什么異常,都必須執(zhí)行某個(gè)業(yè)務(wù)邏輯。但是沒(méi)有捕獲異常
將異常拋出,交給調(diào)用者處理,最頂級(jí)的是jvm
編譯異常必須處理,運(yùn)行異常有默認(rèn)處理機(jī)制,不一定要顯式處理
子類(lèi)重寫(xiě)父類(lèi)的方法,子類(lèi)拋出的異常要么和父類(lèi)一致,要么為父類(lèi)拋出類(lèi)型的子類(lèi)型
一般都是繼承runtime exception,也就是運(yùn)行時(shí)異常,這樣可以使用默認(rèn)處理機(jī)制。
throw 手動(dòng)生成異常的關(guān)鍵字,在方法體中,后面跟的是異常對(duì)象
throws異常處理的一種方式,在方法聲明處,后面跟的是異常類(lèi)型。
https://www.jianshu.com/p/06755f52ba90
——基本數(shù)據(jù)類(lèi)型用法的擴(kuò)展
手動(dòng)裝箱和拆箱
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);
三元運(yùn)算符是一個(gè)整體,會(huì)提升精度
-128-127對(duì)象緩存
只要有基本數(shù)據(jù)類(lèi)型,== 判斷的就是值是否相等
復(fù)用率高,效率低。
Unicode編碼,一個(gè)漢字或者字母都是占兩個(gè)字節(jié)
串行化——可以在網(wǎng)絡(luò)上傳輸;可以相互比較大小
String是final類(lèi)型,不能被其他類(lèi)繼承
private final char value[] 不可以修改(地址不可以修改,單個(gè)字符的內(nèi)容可以變化)
String str1 = "java";//指向常量池
String str2 = new String("java");//指向堆中的對(duì)象,堆中的對(duì)象再指向常量池
常量相加,看的是常量池,變量相加,看的是堆
常用方法:
如果需要對(duì)字符串做大量的修改
——對(duì)于String的增強(qiáng)
不需要每次都更改地址
append
delete(start,end)
replace(start,end,string)
indexOf insert length
StringBuffer 父類(lèi)——AbstractStringBuilder
不是線(xiàn)程安全的——單線(xiàn)程使用
String 類(lèi)設(shè)計(jì)成不可變的原因及好處?
其實(shí)好處就是原因,String 設(shè)計(jì)成不可變,主要是從性能和安全兩方面考慮。
1、常量池的需要
這個(gè)方面很好理解,Java 中的字符串常量池的存在就是為了性能優(yōu)化。
字符串常量池(String pool)是 Java 堆內(nèi)存中一個(gè)特殊的存儲(chǔ)區(qū)域,當(dāng)創(chuàng)建一個(gè) String 對(duì)象時(shí),假如此字符串已經(jīng)存在于常量池中,則不會(huì)創(chuàng)建新的對(duì)象,而是直接引用已經(jīng)存在的對(duì)象。這樣做能夠減少 JVM 的內(nèi)存開(kāi)銷(xiāo),提高效率。
所以,如果字符串是可變的,那么常量池就沒(méi)有存在的意義了。
2、hashcode 緩存的需要
因?yàn)樽址豢勺?,所以在它?chuàng)建的時(shí)候 hashcode 就被緩存了,不需要重新計(jì)算。這就使得字符串很適合作為 HashMap 中的 key,效率大大提高。
3、多線(xiàn)程安全
多線(xiàn)程中,可變對(duì)象的值很可能被其他線(xiàn)程改變,造成不可預(yù)期的結(jié)果。而不可變的 String 可以自由在多個(gè)線(xiàn)程之間共享,不需要同步處理。
abs絕對(duì)值 pow求冪 ceil向上取整 floor向下取整
round四舍五入 sqrt開(kāi)方 random [0 , 1)之間的隨機(jī)小數(shù)
System.out.println((int)(2 + Math.random() * (7 - 2 + 1)
toString
sort——可以直接使用,也可以自己定制排序
實(shí)現(xiàn)comparator接口的匿名內(nèi)部類(lèi)
binarySearch——二叉查找,要求必須排序好,返回下標(biāo)。如果不存在返回應(yīng)該在的位置取負(fù)值
copyOf數(shù)組復(fù)制 可以選擇拷貝多少個(gè)數(shù)值
fill數(shù)組填充Arrays.fill(num,99);
equals比較兩個(gè)數(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方法的時(shí)候指定精度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
抽象類(lèi),構(gòu)造器私有,可以通過(guò)getInstance獲取實(shí)例
需要自己進(jìn)行格式化
System.out.println("月:" + (c.get(Calendar.MONTH) + 1))
JDK8
LocalDate年月日 LocalTime時(shí)分秒 LocalDateTime年月日時(shí)分秒
LocalDateTime ldt = LocalDateTime.now(); //LocalDate.now();//LocalTime.now()
System.out.println(ldt);
//2. 使用 DateTimeFormatter 對(duì)象來(lái)進(jìn)行格式化
// 創(chuàng)建 DateTimeFormatter 對(duì)象
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海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧