JAVA复习(CharSequence接口、RunTime类、System类、object类中的finalize())
1 CharSequence
?
描述字符串結構的接口,通過發現它的繼承結構,其下面有多個子類:
?
1String
?
2 StringBuilder
?
3 StringBuffer
?
只要是字符串都可以為 CharSequence實例化
范例:代碼實現
| // hello 是String類的匿名對象? String類型?? 是charSequence子類 ????????? ????????? // 通過 對象自動向上轉型 為charSequence 進行實例化 ????????? CharSequence str="hello"; ????????? ????????? System.out.println(str); |
?
?
該接口也定義了一些方法:
?
1public int?length() 取得字符串長度
?
2 char?charAt(int?index);給定索引返回指定索引的字符
?
3 CharSequence?subSequence(int?start, int?end); 截取部分字符串
?
?
范例: 實現截取字符串
| CharSequence str="hello";???? ????????? System.out.println(str.subSequence(0, 2)); |
?
該接口藐視的就是一個字符串? (了解)
?
?
?
RunTime類
?
RunTime類主要描述的是運行時的狀態,也就是說在java中RunTime類是唯一一個與JVM有關的類,并且該類使用的是單例設計模式,提供了一個默認實例獲得方法
public static?Runtime?getRuntime();
在每一個JVM進程里面都只能存在一個Runtime?
?
?
范例: 取得RumTime類的實例
| Runtime runtime=Runtime.getRuntime();// 取得對象實例 |
?
該類與JVM相關,所以JVM的一些基本信息都可以通過該類取得
1 public?int?availableProcessors(); JVM CPU的內核數
| System.out.println(runtime.availableProcessors()); |
?
除了可以獲得CPU的內核數量之外還可以獲得JVM的內存空間
?
1 最大的可用內存空間 public?long?maxMemory();
?
2 可用內存空間? public?long?totalMemory()
?
3 空閑內存空間 public?long?freeMemory()
?
4 手工GC的內存處理 public?void?gc()
?
| package org.runtime; ? public class RunTimeTest { ???? public static void main(String[] args) { ????????? ????????? Runtime runtime=Runtime.getRuntime();// 取得對象實例 ????????? ????????? System.out.println("CPU:"+runtime.availableProcessors()); ????????? ????????? System.out.println("最大可用內存"+runtime.maxMemory()); ????????? ????????? System.out.println("可用內存空間"+runtime.totalMemory()); ????????? ????????? System.out.println("空閑內存"+runtime.freeMemory()); ????????? String str=""; ????????? ????????? for(int i=0;i<50000;i++) { ?????????????? ?????????????? str+="hello";? //產量大量的垃圾 ????????? } ????????? System.out.println("**********************************"); ????????? ????????? System.out.println("CPU:"+runtime.availableProcessors()); ????????? ????????? System.out.println("最大可用內存"+runtime.maxMemory()); ????????? ????????? System.out.println("可用內存空間"+runtime.totalMemory()); ????????? ????????? System.out.println("空閑內存"+runtime.freeMemory()); ????????? ????????? ????????? System.gc(); ????????? ????????? ????????? System.out.println("***************************"); ????????? System.out.println("CPU:"+runtime.availableProcessors()); ????????? ????????? System.out.println("最大可用內存"+runtime.maxMemory()); ???? ???? ????????? System.out.println("可用內存空間"+runtime.totalMemory()); ????????? ????????? System.out.println("空閑內存"+runtime.freeMemory()); ????????? ???? } } ? |
?
?
System類
?
System類一直在接觸,而這個類本身提供了一些系統支持操作
?
觀察該類的定義:
| public final class System extends Object |
?
對于該類存在三個常量:
?
1 public static final?PrintStream err; 錯誤的輸出
?
2 public static final?InputStream in :系統輸入 例如鍵盤中輸入內容到程序中
?
3 public static final?PrintStream out :控制臺打印
?
普通方法:
?
1 public static?void?arraycopy(Object?src, int?srcPos, Object?dest, int?destPos, int?length) 數組拷貝
該方法的參數如下:
?
1 src? 源數組
?
2 srcPos 源數組的起始位置
?
3 dest 目標數組
?
4 destPos 目標數字起始位置
?
5 length 目標數組的長度
?
范例:實現一個數組拷貝
| ? ???? public static void main(String[] args) { ????????? // 定義兩個數組 ????????? ????????? int[] A=new int[]{1,2,3,4,5}; ????????? ????????? int[]B=new int[10]; ????????? ????????? ????????? System.arraycopy(A, 0, B, 0, A.length); ????????? ????????? System.out.println(Arrays.toString(B)); ???? } |
通過以上方法可以實現數組之間的拷貝功能,主要作用就是解決數組長度不可改變的缺陷,為數組擴容
?
?
2 public static?long?currentTimeMillis(): 獲得當前的日期時間,以long類型返回
| ? ???? public static void main(String[] args) { ????????? long time=System.currentTimeMillis(); //獲得當前的時間 ????????? Date date=new Date(time); ????????? SimpleDateFormat smd=new SimpleDateFormat("yyyy-MM-dd:HH:mm:ss"); ????????? ????????? String mytime=smd.format(date); ????????? ????????? System.out.println(mytime); ???? } |
?
練習: 統計一次操作花費的時間,并最終把時間格式化輸出:
| public static void main(String[] args) { ????????? ????????? long start=System.currentTimeMillis(); //開始時間 ????????? ????????? String str=""; ????????? ????????? for(int i=0;i<30000;i++) { ?????????????? ?????????????? str+="hello"; ????????? } ????????? ????????? long end=System.currentTimeMillis();//結束時間 ???? ???? ????????? long total=end-start; ????????? ????????? String time=new SimpleDateFormat("mm:ss").format(new Date(total)); ????????? ????????? System.out.println(time); ???? } |
?
?
?
System類中同樣也存在一個方法:
?
public static?void?gc() 在這個該類中也存在GC方法, 在C++存在析構函數,在java不存在析構函數 finlize實現和析構函數同樣的功能:
?
?
?
?
在對象創建的時候有初始化操作, 構造方法 在構造方法中賦值內容
?
小林: 出生的時候 地動山搖 ,滿天烏云, 空氣都是臭的 妖孽出生了
?
protected?void?finalize() throws Throwable; 該方法定義在Object類中說明所有的類都可以覆寫該方法
| package org.system; ? public class Person { ???? @Override ???? protected void finalize() throws Throwable { ????????? // TODO Auto-generated method stub ????????? System.out.println("小林道:如果還有下輩子,在也不搶小孩棒棒糖了"); ???? } ? ? ???? public Person() { ????????? ????????? System.out.println("小林: 出生的時候 地動山搖 ,滿天烏云, 空氣都是臭的 妖孽出生了"); ???? } ???? ???? public static void main(String[] args) { ????????? ????????? Person per=new Person(); //在對象創建的時候可以執行構造方法 ????????? ????????? per=null; ????????? ????????? System.gc(); ???? } } ? |
?
?面試題: final? finally? finlize? 三個關鍵字的區別?
?
1 final : 終結器 定義的類不能被繼承,定義的屬性不可被修改 為常量, 定義的方法不能被覆寫
?
2 finally: 永遠都會執行的代碼塊 資源處理 關閉資源
?
3 finlize : 在垃圾回收機制中, 對象回收之前的操作
?
?
總結
以上是生活随笔為你收集整理的JAVA复习(CharSequence接口、RunTime类、System类、object类中的finalize())的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 银行卡活期利息多久结算一次,每个季度结算
- 下一篇: 税务实名认证在手机上如何操作,有以下十一