【2018-04-09】java中的System類及native方法

在讀源碼的過程中,發(fā)現了System的一些使用,現記錄一下System類源碼及其主要作用;
System類代表系統,系統級的很多屬性和控制方法都放置在該類的內部。該類位于java.lang包。

由于該類的構造方法是private的,所以無法創(chuàng)建該類的對象,也就是無法實例化該類。其內部的成員變量和成員方法都是static的,所以也可以很方便的進行調用。

1、成員變量

System類內部包含in、out和err三個成員變量,分別代表標準輸入流(鍵盤輸入),標準輸出流(顯示器)和標準錯誤輸出流(顯示器)。

               例如:

                        System.out.println(“Test”);

該行代碼的作用是將字符串”Test”輸出到系統的標準輸出設備上,也就是顯示在屏幕上。

后續(xù)在學習完IO相關的知識以后,可以使用System類中的成員方法改變標準輸入流等對應的設備,例如可以將標準輸出流輸出的信息輸出到文件內部,從而形成日志文件等。

2、成員方法

System類中提供了一些系統級的操作方法,這些方法實現的功能分別如下:

a、arraycopy方法

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

該方法的作用是數組拷貝,也就是將一個數組中的內容復制到另外一個數組中的指定位置,由于該方法是native方法,所以性能上比使用循環(huán)高效。

使用示例:

     int[] a = {1,2,3,4};

     int[] b = new int[5];

     System.arraycopy(a,1,b,3,2);

該代碼的作用是將數組a中,從下標為1開始,復制到數組b從下標3開始的位置,總共復制2個。也就是將a[1]復制給b[3],將a[2]復制給b[4],這樣經過復制以后數組a中的值不發(fā)生變化,而數組b中的值將變成{0,0,0,2,3}。

b、currentTimeMillis方法

                        public static long currentTimeMillis()

該方法的作用是返回當前的計算機時間,時間的表達格式為當前計算機時間和GMT時間(格林威治時間)1970年1月1號0時0分0秒所差的毫秒數。例如:

     long l = System. currentTimeMillis();

則獲得的將是一個長整型的數字,該數字就是以差值表達的當前時間。

使用該方法獲得的時間不夠直觀,但是卻很方便時間的計算。例如,計算程序運行需要的時間則可以使用如下的代碼:

     long start = System. currentTimeMillis();

     for(int i = 0;i < 100000000;i++){

               int a = 0;

     }

     long end = System. currentTimeMillis();

     long  time = end – start;

則這里變量time的值就代表該代碼中間的for循環(huán)執(zhí)行需要的毫秒數,使用這種方式可以測試不同算法的程序的執(zhí)行效率高低,也可以用于后期線程控制時的精確延時實現。

c、exit方法

                        public static void exit(int status)

該方法的作用是退出程序。其中status的值為0代表正常退出,非零代表異常退出。使用該方法可以在圖形界面編程中實現程序的退出功能等。

d、gc方法

                        public static void gc()

該方法的作用是請求系統進行垃圾回收。至于系統是否立刻回收,則取決于系統中垃圾回收算法的實現以及系統執(zhí)行時的情況。

e、getProperty方法

                        public static String getProperty(String key)

該方法的作用是獲得系統中屬性名為key的屬性對應的值。系統中常見的屬性名以及屬性的作用如下表所示。

屬性名列表

image.png

例如:

                                 String osName = System.getProperty(“os.name”);

                                 String user = System.getProperty(“user.name”);

                                 System.out.println(“當前操作系統是:” + osName);

                                 System.out.println(“當前用戶是:” + user);

使用該方法可以獲得很多系統級的參數以及對應的值。

【參考文檔】鏈接:https://blog.csdn.net/jiutianhe/article/details/39892609


2.關于java中native的用法
在System中看到有一些方法使用了native關鍵字,但并沒有具體實現,比如:

public static native void arraycopy(Object src,  int  srcPos,
                                    Object dest, int destPos,
                                    int length);

這個arraycopy的方法,就是一個native方法。

public static native long currentTimeMillis();
public static native long nanoTime();
public static native int identityHashCode(Object x);

native的作用:

  • native關鍵字說明其修飾的方法是一個原生態(tài)方法,方法對應的實現不是在當前文件,而是在用其他語言(如C和C++)實現的文件中。Java語言本身不能對操作系統底層進行訪問和操作,但是可以通過JNI接口調用其他語言來實現對底層的訪問。

如何使用參考鏈接:


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,638評論 18 399
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發(fā)現,斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,242評論 0 62
  • 很幸運,回到自己的家鄉(xiāng)出差,順便回家散散心 自從上了大學,每年的這個時候從沒有機會回家看看,六年了,老家的春天已經...
    王棟閱讀 205評論 0 0
  • 來到上海這個地方讀書,不知道到底是該歡喜還是該感到憋屈,總有一種上海人排外的說法,作為一個地道的外地人,爸媽...
    叫我大嫻閱讀 357評論 0 1

友情鏈接更多精彩內容