內(nèi)部類
內(nèi)部類概念
-
在一個類內(nèi)部再定義一個完整的類
特點
-
編譯之后可生成獨立的字節(jié)碼文件
-
內(nèi)部類可直接訪問外部類的私有成員,而不破壞封裝
-
可以為外部類提供必要的內(nèi)部功能組件
分類
-
成員內(nèi)部類
-
在類的內(nèi)部定義,與實例變量、實例方法同級別的類
-
外部類的一個實例部分,創(chuàng)建內(nèi)部類對象時,必須依賴外部類對象、
Outer out = new Outer();
Inner in = out.new Inner(); -
當(dāng)外部類、內(nèi)部類存在重名屬性時,會優(yōu)先訪問內(nèi)部類屬性
//內(nèi)部類屬性和外部類屬性相同,用 外部類名字.this.屬性
//如 Outer.this.name -
成員內(nèi)部類不能定義靜態(tài)成員
-
-
靜態(tài)內(nèi)部類(static 只有靜態(tài)內(nèi)部類才可以用)
-
不依賴外部類對象,可直接創(chuàng)建或通過類名訪問,可聲明靜態(tài)成員
-
靜態(tài)內(nèi)部類:和外部類相同
-
調(diào)用外部類的屬性
-
先創(chuàng)建外部類對象
-
再調(diào)用外部類對象的屬性
-
-
-
局部內(nèi)部類
-
定義在外部類的方法中,作用范圍和創(chuàng)建對象范圍僅限于當(dāng)前方法
-
局部內(nèi)部類訪問外部類當(dāng)前方法中的局部變量時,因無法保障變量生命周期與自身相同,變量必須修飾為final
-
限制類的使用范圍
-
-
匿名內(nèi)部類
-
沒有類名的局部內(nèi)部類(特征與內(nèi)部類相同)
-
必須繼承一個父類或者實現(xiàn)一個接口
-
定義類、實現(xiàn)類、創(chuàng)建類對象的語法合并,只能創(chuàng)建一個該類的對象
-
優(yōu)點:減少代碼量
-
缺點:可讀性差
-
Object類
-
超類、基類,所有類的直接或間接父類,位于繼承樹類的最頂層
-
任何類,如沒有書寫extends顯示繼承某個類,都默認直接繼承Object類,否則為間接繼承
-
Object類中所定義的方法,是所有對象都具備的方法
-
Object類型可以存儲任何對象
-
作為參數(shù),可以接受任何對象
-
作為返回值,可以返回任何對象
-
Object類常用方法
-
getClass()-
public final Class<?> getClass(){} -
返回引用中存儲的實際對象類型
-
應(yīng)用: 通常用于判斷兩個引用中實際存儲對象類型是否一致
-
-
hashCode()方法-
public int hashCode(){} -
返回該對象的哈希碼值
-
哈希值根據(jù)對象的地址或字符串或數(shù)字使用hash算法計算出來的int類型的數(shù)值
-
一般情況下相同對象返回相同哈希碼
-
-
toStrig()方法-
public String toString(){} -
返回該對象的字符串表示(表現(xiàn)形式)
-
可以根據(jù)程序需求覆蓋該方法 如:展示對象各個屬性值
-
-
equals()方法-
public boolean equals(Object obj){} -
默認時限為
(this == obj),比較兩個對象地址是否相同 -
可以進行覆蓋,比較兩個對象的內(nèi)容是否相同
-
-
finalize()方法 -
當(dāng)對象被判定為垃圾對象時,由JVM自動調(diào)用此方法,以標記垃圾對象靜茹回收隊列
-
垃圾對象:沒有有效引用指向此對象時,為垃圾對象
-
垃圾回收 :由GC銷毀垃圾對象,釋放數(shù)據(jù)存儲空間
-
自動回收機制:JVM的內(nèi)存耗盡,一次性回收所有垃圾對象
-
手動回收機制:使用
System.gc();通知JVM執(zhí)行垃圾回收
包裝類
定義
-
基本數(shù)據(jù)類型所對應(yīng)的引用數(shù)據(jù)類型
-
包裝類對應(yīng)
-
byte --- Byte -
short --- Short -
int --- Integer -
long --- Long -
float --- Float -
double --- Double -
boolean --- Boolean -
char --- Character
-
類型轉(zhuǎn)換與裝箱、拆箱
裝箱
-
類型轉(zhuǎn)換: 裝箱,基本類型轉(zhuǎn)換成引用類型的過程
int num = 10;
Integer integer = new Integer.valueOf(num);
//JDK1.5后可以自動,實質(zhì)是一樣的
Integer integer = num;
拆箱
-
類型轉(zhuǎn)換:拆箱,引用類型轉(zhuǎn)換成基本類
Integer integer = new Integer(10);
int num = integer.intValue();
//自動拆箱
int num = integer
基本類型和字符串之間轉(zhuǎn)換
-
基本類型轉(zhuǎn)換成字符串
-
使用+號
int num = 16;
String s1 = num + "";
-
-
使用
Integer中的toString()方法int num = 16;
String s2 = Integer.toString(num);
-
-
字符類型轉(zhuǎn)換成基本類型
-
使用
Integer.parseIntXXX();String str = "150";
int num = Integer.parseInt(str);
-
-
boolean字符串類型轉(zhuǎn)換成基本類型,”true“---->true 非”true“---->false-
使用
Boolean.parseBoolean();String str = "true";
booolean b1 = Boolean.parseBoolean(str);
-
整數(shù)緩沖區(qū)
-
Java預(yù)先創(chuàng)建了256個常用的整數(shù)包裝類型對象
-
在實際應(yīng)用當(dāng)中,對已創(chuàng)建的對象進行復(fù)用
Integer integer1 = new Integer(100);
Integer integer2 = new Integer(100);
//integer1 與 integer2不相等
//因為new的對象地址不一樣
Integer integer3 = 100;
Integer integer4 = 100;
//integer3 與 integer4相等
//在-128~127區(qū)間內(nèi)在堆空間里由一個數(shù)組保存了他們的對象
Integer integer5 = 200;
Integer integer6 = 200;
//integer5 與 integer6不相等
//因為堆空間中沒有它們的對象,要重新創(chuàng)建,地址不同
String類
概述
-
字符串是常量,創(chuàng)建之后不可改變
-
字符串字面值存儲在字符串池中,可以共享
-
String s ="hello";產(chǎn)生一個對象,字符串池中存儲 -
String s = new String("Hello");//產(chǎn)生兩個對象,堆、池各存儲一個
常用方法
-
public int length():返回字符串長度 -
public char charAt(int index):根據(jù)下標獲取字符 -
public boolean contains(String str):判斷當(dāng)前字符串中是否包含str -
public char[] toCharArray():將字符串轉(zhuǎn)換成數(shù)組 -
public int indexOf(String str):查找str首次出現(xiàn)的下標,存在,則返回該下標;不存在,則返回-1 -
public int lastIndexOf(String str):查找字符串在當(dāng)前字符串中最后一次出現(xiàn)的下標索引 -
public String trim():去掉字符串前后的空格 -
public String toUpperCase():將小寫轉(zhuǎn)換大寫 -
public String toLowerCase():將大寫轉(zhuǎn)換成小寫 -
public boolean startsWith(String str):判斷字符串是否以str開頭 -
public boolean endsWith(String str):判斷字符串是否以str結(jié)尾 -
public String replace(char oldChar,char newChar):將舊字符串替換成新字符串 -
public String[] spilt(String str)根據(jù)str做拆分String str = "java is the best programing ,language";
String array = str.spilt(" ");
for(String string : array){
System.out.println(string);
}//輸出空格分離的數(shù)組
//換成
String array = str.spilt("[ ,]");
//輸出空客或逗號分離的數(shù)組
//換成
String array = str.spilt("[ ,]+");
//輸出多個空格或括號分離的數(shù)組 -
equals()比較是否相等equalsIgnoreCase()忽略大小寫的比較 -
compareTo()比較(在字檢表里的順序)String s1 = "abc";//a 97
String s2 = "xyz";//x 120
System.out.println(s1.compareTo(s2));
//輸出-23
//先比第一個,如果相等比第二個,有結(jié)果停止
//像"abc" "abcxyz" 則比長度
String s1 = "abc";
String s2 = "abcxyz";
System.out.println(s1.compareTo(s2));
//輸出-3
//兩個一樣0
可變字符串
-
StringBUffer:可變長字符串,JDK1.0提供,運行效率滿、線程安全 -
StringBuilder:可變長字符串,JDK5.0提供,運行效率快、線程不安全 -
和
String的區(qū)別: 比String效率高,比String節(jié)省內(nèi)存 -
方法
StringBuffer s = new StringBuffer();
StringBuilder s = new StringBuilder();-
append()追加s.append(字符串);
-
insert()添加s.insert(位置,字符串)
-
replace()替換s.replace(開始位置,結(jié)束位置,替換字符串)
-
delete()刪除s.delete(開始位置,結(jié)束位置)
-
清空 用
delete()
-
BigDecimal類
-
位置:
java.math包中 -
作用:精確計算浮點數(shù)
-
創(chuàng)建方式:
BigDecimal bd = new BigDecimal(1.0); -
方法:
-
BigDecimal add(BigDecimal bd)加 -
BigDecimal subtract(BigDecimal bd)減 -
BigDecimal multiply(BigDecimal bd)乘 -
BigDecimal divide(BigDecimal bd)除-
除法
devide(BigDecimal bd,int scal,RoundingMode mode) -
參數(shù)
scal:指定精確到小數(shù)點后幾位 -
參數(shù)
mode:-
指定小數(shù)部分的取舍模式,通常采用四舍五入的模式
-
取值為
BigDecimal.ROUND_HALF_UP
-
-
-
Date類
-
Data表示特定的瞬間,精確到毫秒。Date類中的大部分方法都已經(jīng)被Calendar類中的方法取代
-
時間單位
-
1秒 =1000毫秒
-
1毫秒 = 1000微秒
-
1微妙 = 1000納秒
-
-
//創(chuàng)建對象
Date date = new Date();
//方法befoore after
boolean b = date1.before(date2);
boolean b = date2.after(date2);
//比較compareTo()
date1.compareTo(date2);
//是否相等equals()
boolean b = date1.equals(date2);
Calendar類
-
Calendar提供了獲取或設(shè)置各種日歷字段的方法 -
構(gòu)造方法
-
protected Calendar():由于修飾符是protected,所以無法直接創(chuàng)建該對象
-
-
其他方法
-
使用默認時區(qū)和區(qū)域獲取日歷
static Calendar getInstance()
-
設(shè)置日歷的年、月、日、時、分、秒
void set (int year,int month,int date,int hourofday,int minute,int second)
-
返回給定日歷字段的值。字段比如年、月、日等
int get(int field)
-
用給定的Date設(shè)置此日歷的時間。Date-Calendar
void setTime(Date date)
-
返回一個Date表示此日歷的時間。Calendar-Date
Date getTime()
-
按照日歷的規(guī)則,給指定字段添加或減少時間量
void add(int field,int amount)
-
毫秒為單位返回該日歷的時間值
long getTimeMillies()
-
SimpleDateFormat類
-
SimpleDateFormat是一個以與語言環(huán)境有關(guān)的方式來格式化和解析日期的具體類 -
進行格式化(日期---->文本)、解析(文本---->日期)
-
常用的時間模式字母
-
y------年
-
M------年中的月份
-
d------月中的天數(shù)
-
H------一天中的小時(0~23)
-
m------分鐘
-
s------秒
-
S------毫秒
-
-
創(chuàng)建
SimpleDateFormat對象 y 年 M 月SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH-mm-ss");
//創(chuàng)建Date
Date date = new Date();
//格式化date 把日期轉(zhuǎn)換為字符串
String str = stf.format(date);
System.out.println(str);
//輸出 2022/10/08 20-08-28
//解析 把字符串轉(zhuǎn)換為日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date date2 = sdf.parse("1990/05/01");
System.out.println(date2);
//輸出 Tue May 01 00:00:00 CDT 1990
System類
-
System系統(tǒng)類,主要用于獲取系統(tǒng)的屬性數(shù)據(jù)和其它操作,構(gòu)造方法私有的
-
方法:
-
復(fù)制數(shù)組
static void arraycopy(src,srcPos,dest,destPos,leng);
//src:源數(shù)組
//srcPos:從哪個位置開始復(fù)制
//dest:目標數(shù)組
//destPos:目標數(shù)組的位置
//length:復(fù)制的長度
/ -
獲取當(dāng)前系統(tǒng)時間,返回的是毫秒值
static long currentTimeMillis(); -
建議JVM趕快啟動垃圾回收器回收垃圾
static void gc(); -
退出jvm,如果參數(shù)是0表示正常退出jvm,非0表示異常退出jvm
static void exit(int status); -
-
浙公網(wǎng)安備 33010602011771號