Java基礎之常用基類
本文主要介紹幾種Java中常用類的應用。
一、System類
從API當中我們可以看出,public final class System exends Object。System類包含一些有用的欄位和方法。這些欄位和類都被static修飾了,說明他們都不能被例項化。
在System類提供的設施中,有標準輸入、標準輸出和錯誤輸出流;對外部定義的屬性和環境變數的訪問;載入檔案和庫的方法;還有快速複製陣列的一部分的使用方法。
欄位摘要 | |
static PrintStream | err ”標準“輸入錯誤流 |
static InputStream | in ”標準“輸入流 |
static PrintStream | out ”標準“輸出流 |
這裡僅介紹幾個常用的:
--static long currentTimeMillis() // 返回以毫秒為單位的當前時間。 1970 年 1 月 1 --arraycopy(Object src, int srcPos, Object dest, int destPos, int length) --exit(int status) //終止當前正在執行的 Java 虛擬機器,非 0 的狀態碼錶示異常終止。 --gc(); //喚起垃圾回收器 --static Map<String,String> getenv()
程式碼例項:
public class Test6 { public static void main(String[] args) { long startTime = System.currentTimeMillis();// 取得計算開始時的時間 @SuppressWarnings("unused") int sum = 0;// 宣告變數並初始化 for (int i = 0; i < 1000000000; i++) { // 進行累加 sum+=i; } long endTime = System.currentTimeMillis();// 取得計算結束時間 // 計算所花費的時間 System.out.println("累加所花費的時間" + (endTime - startTime) + "毫秒"); } }
除此之外還有很多有用的方法,應用程式碼如下:
import java.util.Properties; import java.util.Set; public class Test1 { public static void main(String[] args) { Properties p = System.getProperties();//列出系統全部屬性 Set<Object> set = p.keySet(); for (Object key : set) { //利用增強for遍歷 System.out.println(key + ":" + p.get(key)); } System.out.println("=====分割線1====="); String p2 = System.getProperty("os.name");//查詢 System.out.println(p2); System.out.println("=====分割線2====="); System.setProperty("Mykey", "zhouzhou的系統");//自定義系統名稱屬性 System.out.println("Mykey"); } }
列印結果: java.runtime.name:Java(TM) SE Runtime Environment sun.boot.library.path:C:\Program Files\Java\jdk1.7.0_75\jre\bin java.vm.version:24.75-b04 java.vm.vendor:Oracle Corporation java.vendor.url:http://java.oracle.com/ path.separator:; java.vm.name:Java HotSpot(TM) Client VM file.encoding.pkg:sun.io user.country:CN user.script: sun.java.launcher:SUN_STANDARD sun.os.patch.level: java.vm.specification.name:Java Virtual Machine Specification user.dir:E:\ClassC java.runtime.version:1.7.0_75-b13 java.awt.graphicsenv:sun.awt.Win32GraphicsEnvironment java.endorsed.dirs:C:\Program Files\Java\jdk1.7.0_75\jre\lib\endorsed os.arch:x86 java.io.tmpdir:C:\Users\win7\AppData\Local\Temp\ line.separator: java.vm.specification.vendor:Oracle Corporation user.variant: os.name:Windows 7 sun.jnu.encoding:GBK java.library.path:C:\Program Files\Java\jdk1.7.0_75\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jdk1.7.0_75/bin/../jre/bin/client;C:/Program Files/Java/jdk1.7.0_75/bin/../jre/bin;C:/Program Files/Java/jdk1.7.0_75/bin/../jre/lib/i386;C:\Program Files\Java\jdk1.7.0_75\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files\NVIDIA Corporation\PhysX\Common;C:\Program Files\IDM Computer Solutions\UltraEdit\;E:\eclipse;;. java.specification.name:Java Platform API Specification java.class.version:51.0 sun.management.compiler:HotSpot Client Compiler os.version:6.1 user.home:C:\Users\win7 user.timezone: java.awt.printerjob:sun.awt.windows.WPrinterJob file.encoding:GBK java.specification.version:1.7 java.class.path:E:\ClassC\bin user.name:win7 java.vm.specification.version:1.7 sun.java.command:Test1 java.home:C:\Program Files\Java\jdk1.7.0_75\jre sun.arch.data.model:32 user.language:zh java.specification.vendor:Oracle Corporation awt.toolkit:sun.awt.windows.WToolkit java.vm.info:mixed mode, sharing java.version:1.7.0_75 java.ext.dirs:C:\Program Files\Java\jdk1.7.0_75\jre\lib\ext;C:\Windows\Sun\Java\lib\ext sun.boot.class.path:C:\Program Files\Java\jdk1.7.0_75\jre\lib\resources.jar;C:\Program Files\Java\jdk1.7.0_75\jre\lib\rt.jar;C:\Program Files\Java\jdk1.7.0_75\jre\lib\sunrsasign.jar;C:\Program Files\Java\jdk1.7.0_75\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.7.0_75\jre\lib\jce.jar;C:\Program Files\Java\jdk1.7.0_75\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.7.0_75\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.7.0_75\jre\classes java.vendor:Oracle Corporation file.separator:\ java.vendor.url.bug:http://bugreport.sun.com/bugreport/ sun.io.unicode.encoding:UnicodeLittle sun.cpu.endian:little sun.desktop:windows sun.cpu.isalist:pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86 =====分割線1===== Windows 7 =====分割線2===== Mykey
可以看出,System類本身提供的靜態屬性都是與IO操作有關。比如,gc();
程式碼例項:
public class Test7 { private String name; private int age; public Test7(String name, int age) { this.age = age; this.name = name; } public String toString() { return "姓名:" + this.name + " 年齡:" + this.age; } public void finalize() throws Throwable { // 釋放空間 System.out.println("物件被釋放==" + this); } }
測試類及結果:
二、Runtime類
每個Java應用程式都有一個Runtime類的例項,使應用程式能夠與其執行環境相連線。不能new,可以通過getRuntime方法獲取當前執行時。應用程式不能自己建立自己的Runtime類例項。
可以說,Runtime 封裝了Java虛擬機器程序。
程式碼演示:
import java.io.IOException; public class Test8 { public static void main(String[] args) throws IOException, InterruptedException { // Runtime r=new Runtime();計劃這樣得到本類例項是錯誤的 Runtime r = Runtime.getRuntime();// 要這樣得到本類例項 /* * Process的栗子Process p = r.exec("notepad.exe c:/Add.java");// * Process代表一個被虛擬機器啟動的程序p.destroy(); */ r.exec("calc");// 開啟計算器,沒有p.destroy(); r.exec("mspaint");// 開啟畫板,沒有p.destroy(); Thread.sleep(5000);// 程式暫停執行5秒 } }
三、Date類和SimpleDateFormat
Data類,位於java.util 包下(不同於Java.sql.Date,有時當你按快捷鍵輸入導包時會遇到這個選項)
Data類中有好多方法被廢棄了。SimpleDateFormat是java.text包下的。
程式碼應用例子:
import java.text.SimpleDateFormat; import java.util.Date; public class Test2 { public static void main(String[] args) { Date d = new Date();// 得到當前日期所對應的Date物件 SimpleDateFormat o = new SimpleDateFormat("yyyy-MM-dd E hh:mm:ss"); // 上面括號裡的“-”,你可以換成你想要的,比如"yyyy/MM/dd E hh:mm:ss"。這些日期輸出也可以刪除 //還有很多好玩的方法,去看JDK哈~~ String str = o.format(d); System.out.println(str);// 2017-07-02 星期日 07:04:06 } }
附加:
//例子 Date d=new Date(); //以當前時間構造 Date 物件 System.out.println(d); //例子, Date中有一些方法廢棄了,不要用 new Date(1999,2,28); //廢棄 new Date("1990"); //廢棄 //使用 SimpleDateFormat 進行日期格式化 public static void main(String[] args) throws IOException, InterruptedException { Date d=new Date(); //以當前時間構造 Date 物件 System.out.println(d); //SimpleDateFormat df=new SimpleDateFormat("yyyy/MM/dd hh:mm:ss"); //構造了一個SimpleDateFormat物件 //SimpleDateFormat df=new SimpleDateFormat("hh:mm:ss"); //SimpleDateFormat df=new SimpleDateFormat("yyyy"); //SimpleDateFormat df=new SimpleDateFormat("yyyy/MM/dd E hh:mm:ss"); SimpleDateFormat df=new SimpleDateFormat("yyyy年MM月dd日 E hh:mm:ss"); String str= df.format(d); //用format方法格式化一個日期,得到一個String型別 System.out.println(str); }
重點介紹,如何把字串轉換成日期
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class Test9 { public static void main(String[]args) throws ParseException{ test2(); } static void test2() throws ParseException { String str = "2017-7-7"; SimpleDateFormat o = new SimpleDateFormat("yyyy-MM-dd"); Date d = o.parse(str);//接收一個String型別,轉成一個Date型別 System.out.println(d);//Fri Jul 07 00:00:00 CST 2017 } }
四、Calendar類
Calendar類本身是一個抽象的基類。與其他語言環境敏感類一樣,Calendar提供了一個類方法 getInstance,以獲得此型別的一個通用的物件。Calendar的getInstance方法返回一個Calendar物件,其日曆欄位已由當前日期和時間初始化。
Calendar c=Calendar.getInstance(); //這這樣得到它的例項物件 -- void set(int field, int value) -- set(int year, int month, int date) -- void set(int year, int month, int date, int hourOfDay, int minute)
程式碼例子:
import java.util.Calendar; public class Test3 { public static void main(String[] args) { calendarDemo();// 經常忘記呼叫 } static void calendarDemo() { Calendar o = Calendar.getInstance(); // 計算距當前日期250天之後的日期 // o.add(Calendar.DAY_OF_YEAR, 250); /* * 也可以自己設定時間, 下面這個列印結果是2015換行0換行2o.set(2015, 0, 12);// 注意0月指的是1月 */ // o.set(Calendar.DAY_OF_YEAR,2);//列印:2017換行0換行2 o.set(2015, 1, 10000);// 列印:2042換行5換行169 (可以幫你向前推)。 // 比如,當你不知道2月的天數的時候,只知道日子的累加,你就不用再去計算了。 System.out.println(o.get(Calendar.YEAR)); System.out.println(o.get(Calendar.MONTH)); System.out.println(o.get(Calendar.DAY_OF_YEAR)); } }
列印結果:
五、Math類
Math類是我至今接觸到的類當中,覺得最好玩的一個類。雖然有些數學計算上的應用暫時用不上,但是聽說如果開發遊戲會用上他們。突然覺得蠻有趣。
Math類包含用於執行基本數學運算的方法,比如指數、對數、平方根、三角函式等。
--PI //常量 --E //常量 --random() //生成一個double型的隨機數 大於等於 0.0 且小於 1.0 --abs(基本資料型別) //求絕對值
程式碼示例:
public class Test4 { public static void main(String[] args) { // 此方法輸出0-1之間的隨機小數,偽隨機數,用的時候可以忽略不計。不包含0和1. // double o=Math.random(); // System.out.println(o); // Double o=Math.random()*10; //第一次計劃把double型預設輸出格式X.0.想把.0去掉,沒成功 System.out.println((float)(Math.floor(Math.random() * 10))); //第二次計劃把double型預設輸出格式X.0.想把.0去掉,成功 System.out.println((int)(Math.floor(Math.random() * 10))); System.out.println(Math.ceil(88.99));// 89.0 返回大於指定數的最小整數 System.out.println(Math.ceil(88.39));// 89.0 接上,沒有四捨五入 System.out.println((int)(Math.ceil(88.39)));// 去掉.0 System.out.println(Math.floor(9.65));// 9.0 返回小於指定數的最大整數 System.out.println(Math.floor(9.25));// 9.0 接上,沒有四捨五入 System.out.println((int)(Math.floor(9.25)));// 去掉.0 System.out.println(Math.round(9988.01));// 9988 四捨五入 } }
呃,上面是我看著API興奮的折騰一會兒,後來發現有一些方法,可以直接實現我上面的操作,用nextInt();,下面介紹Random類時會應用到。
六、Random類
public class Random extands Object implements Serializable。Random類的例項用於生成隨機數流。後面的API介紹,有些難理解:
程式碼應用例子:
例一:
import java.util.Random; //用Java.util.Random類返回20個指定範圍(1-10)內的隨機整數 //用這個類要構造Random物件 //Random r=new Random(System.currentTimeMillis());設定此隨機數生成器的樣子 public class Test5 { public static void main(String[] args) { Random o = new Random(); for (int i = 0; i < 20; i++) { // System.out.println(o.nextInt(10)); 豎著列印隨 // System.out.print(o.nextInt(10)+"\t"); 打算讓它橫著列印,並且還要好看,需要空格 // 需求升級,生成90到100之間的數 // System.out.println(o.nextInt(10)+90); System.out.print(o.nextInt(10) + 90 + "\t");// 好看,橫著列印,有空格 } } }
例二:
import java.util.HashSet; import java.util.Random; import java.util.Set; //從100到題中隨機抽取90道 public class Test10 { public static void main(String[] args) { Set<Integer> list = demo(); System.out.println(list.size() + "====="); for (Integer i : list) { System.out.println(i); } } static Set<Integer> demo() { Set<Integer> set = new HashSet<Integer>(); while (set.size() < 90) { set.add(new Random().nextInt(100)); } return set; } }
例三:
import java.util.ArrayList; //import java.util.Collection; import java.util.Collections; import java.util.List; //隨機生成1-100之間的100個數,排序無序 public class Test11 { public static void main(String[] args) { List<Integer> list = new ArrayList<Integer>(); for (int i = 0; i < 100; i++) { list.add(i); } Collections.shuffle(list);// 之前Collections沒有寫s,導包也導錯了 for (Integer i : list) { System.out.print(i + "\t"); } } }
結果: