1. 程式人生 > >Java基礎之常用基類

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");

        }
    }
}

複製程式碼

結果: