JAVASE常用的類及其方法總結

m0_50910671發表於2020-10-02

以下內容均為學習動力節點視訊過程中的總結:

陣列Arrays

常用靜態方法:
Arrays.sort() 對陣列進行升序排序,
Arrays.binarySearch(arr,key) 二分法查詢,返回index,沒找到返回負數(查詢的前提是排好序)

String類常用方法

方法解釋
charAt(int index)返回索引處的字元值
toCharArray()將一個字串轉換成char陣列
toLowerCase()轉換成小寫
toUpperCase()轉換成大寫
getBytes()得到位元組陣列 abcdef變為97 98 99 100
indexOf()判斷某個子字串在當前字串第一次出現處的索引
lastindexOf()判斷某個子字串在當前字串最後一次出現處的索引
repleac(“”,“”)替換當前字串中某個字串為另外一個字串,返回String
split()以某個字串拆分,返回String,(用Strirng陣列來接收)
trim()去除字串的前後空白,中間的不行
subString(int beginindex)擷取從索引出開始的子字串
subString(intbeginindex,endindex)擷取從起始索引到終止索引的子字串,前閉後開
compareTo()比較兩個字串大小,字元依次比,前面比後面大,返回1;小,返回-1,等於,返回0,比到不一樣的就結束,剩下的不比了。按照英文字母順序比較
equals()是否相等,比較的是值,返回true/false;看不出誰大誰小
equalsIgnoreCase是否相等,忽略大小寫
contaings()是否包含後面的字串,返回true/false
endsWith()是否以某個字串結尾,返回true/false
startsWith()是否以某個字串開始,返回true/false
isEmpty()是否為空字串,底層呼叫的是length()方法,返回true/false;和null不一樣(空指標異常)

String中只有一個靜態方法,不需要new物件的:
valueOf():將非字串轉換成字串,底層呼叫toString方法,直接用類呼叫String.valueOf(隨便寫個啥),若傳進去一個引用,該引用沒有重寫toString的話,輸出的是引用的地址。
System.out.println(引用)時,為什麼會調toString方法?
println呼叫valueOf,valuesOf呼叫的又是toString。本質上:sout這個方法輸出任何資料時都實現轉換成字串再輸出。

String比較容易出錯的地方:

String a = "Hello";
String b = "Hello";
a==b  ?//true,字串變數同一個,地址也是同一個,“==”任何情況下比較的都是地址。


String a=new String("Hello");
String b=new String("Hello");
a==b  ?//false,a和b存放不同的引用物件的地址。

1. StringBuffer

String是不可變的,底層是final byte【】不可變,被final修飾,陣列一旦建立藏毒不可變,並且被final修飾的引用一旦指向某個物件之後,不能再指向其他物件。每一次拼接都會產生新的字串,在方法區中建立了大量的物件,造成記憶體空間的浪費
建議使用lang包下的StringBuffer或者StringBuilder。

StringBuffer父類為AbstractStingBuffer
底層實際上是一個byte【】陣列(字串緩衝區物件),(沒有final修飾),將字串放到陣列中,初始容量為16,當存滿之後,會用append()方法來擴容,底層進行追加呼叫arraycopy()方法,所以StringBuffer適用於字串的拼接。

優化:建立StringBuffer時預估計一下,給一個大點的容量。減少擴容次數。也不能太大,合適最好,提高程式執行效率。

2. StringBuilder

StringBuilder 也可以用來拼接字串。

StringBuffer的方法都有synchronized修飾,表示在多執行緒環境下執行時安全的。StringBuilder沒有,不安全。

3.基本八大類

java中8種基本資料型別對應8種包裝類屬於引用資料型別,父類是Number-Object,Character、Boolean父類是Object。
為什麼要用包裝類?
呼叫某些方法時傳入引數若為Object,不能直接傳入基本資料。

基本資料型別包裝類
shortShort
intInteger
longLong
doubleDouble
floatFloat
booleanBoolean
charCharacter
byteByte

基本資料型別轉化為引用資料型別,裝箱
引用轉化為基本,拆箱
自動裝箱:Integer a = 100;
自動拆箱:int i = a; JAVA 5以後都支援這個了。在加減乘除等運算時會自動拆箱,雙等號不會。

獲取常量,最大:Integer.MAX_VALUE,即為0xffffff;最小0x8000000;

4.Number

Number中常用的方法:用來拆箱。比如byteValue();但是有自動裝箱和拆箱,就沒必要用這個了。

(1.)java中為了提高程式的執行效率,將【-128到127】的所有的包裝物件提前建立好,存放在方法區中的整數型常量池中(cache快取),目的是隻要在這個區間的資料就不需要new了,直接從裡面取來用。

Integer a =100;
Integer b =100

a= =b?結果為true,換成1000就是false。

(2.)數字格式化:

/*# 任意數字
, 千分位
. 小數點
0  代表不夠時補0
*/
import java.text.DecimalFormat;
DecimalFormat some = new DecimalFormat("###,###.00");//小數部分不能既有#又有0
String dou = some.format(124583);
System.out.println(dou);

5.Integer的方法

靜態方法static int parseInt(String s),把字串轉換為int型別。
int a = Integer.parseInt(“1230”);類似,double,float等有一樣的靜態方法,將字串轉換為基本資料型別,注意不要超過範圍或者用中文。
靜態方法:
toBinaryString(int i):轉換成二進位制字串;
toOctalString(int i):轉換成十進位制字串;
toHexString(int i):轉換成十六進位制字串;
(聯絡toString方法原始碼)

String、Integer、int型別互相轉換:
在這裡插入圖片描述
String->int:

Integer.parseInt(Strign s);

int->String:

String.valueOf(int i);
i = 100 ;String s = i+"";

int->Integer:裝箱

Integer a = 100;
Integer.valueOf(100);

Integer->int:拆箱

int b = a;
intValue();

String->Integer:

Integer.valueOf(String a);

Integer->String:

String.valueOf(Integer物件);

6.日期

(1)匯入包:import java.util.Date;

Date nowtime = new Date()//系統當前時間顯示,Date的無參構造方法
Date nowtime2 = new Date(1);//Date的有參構造,傳入的引數是Long型,為系統從1970.1.1 00:00:00經過的毫秒數。

Fri Oct 02 15:27:49 CST 2020//執行結果

日期格式化:設定自己喜歡的格式,(將Date型別轉化為String型別)。匯入java.text.SimpleDateFormat;
yyyy 年
MM 月
dd 日
HH 時
mm 分
ss 秒
SSS毫秒(毫秒三位,最高999),這些字元不能瞎寫,但是空格,-,:,按照自己喜好加。

Date a = new Date();
System.out.println(a);
SimpleDateFormat daytime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
System.out.println(daytime.format(a));//若要獲取昨天的此時的時間,用當前的毫秒數減去一天的毫秒數(1000*60*60*24)

(2)反過來,將String型別轉化為Date型別輸出:

String time = "2014-09-01 15:26:56 456";
SimpleDateFormat ste = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");//這裡的格式要和上述字串一樣,不然會有異常
Date nowtime = ste.parse(time);
System.out.println(nowtime);

(3)獲取系統從1970.1.1 00:00:00(北京時間是八點)到當前時間的總毫秒數,可以用來統計方法執行時長:system.currentTimeMillis();

 Long begin = System.currentTimeMillis();
//中間是你想做的操作
Long end = System.currentTimeMillis();
System.out.println(begin-end);//耗費的時間可以得到

7.System類

System.out out是System裡的一個靜態變數
System.out.println() println是PrintStream的方法
System.gc() 建議啟動垃圾回收機制
System.currentTimeMillis() 系統從1970.1.1到當前時間的總毫秒數
System.exit(0) 退出JVM

8.BigDecimal類

import java.math.BigDecimal;
BigDecimal large = new BigDecimal(100);
BigDecimal large1 = new BigDecimal(200);
BigDecimal large3 =large.add(large1);//呼叫方法加減乘除
System.out.println(large);

math包下,大資料,精度極高,屬於Java物件(引用資料型別),專門在財務軟體當中.

9.隨機數Random類

import java.util.Random;
Random ran = new Random();
int abcs = ran.nextInt(101);//下一個數是101,不包括101,範圍[0,101)。
int abcd = ran.nextInt();//範圍 32個位元組

小試牛刀:隨機產生五個不重複的隨機數(1-100)
感受一下,寫寫虛擬碼?!

import java.util.Random;

public class RandomTest01{
    public static void main(String[] args) {
        /**
         * 隨機數放在陣列裡,判斷該隨機數是否與陣列裡的數重複,不重複的話賦值。
         * 陣列的初始值?由於隨機數範圍為[0,101),避免混淆初始0和隨機數0,給定一個初始值-1。
         */
        //建立一個長度為5的陣列,給定初始值。
        int []arr = new int[5];
        for(int i = 0; i<arr.length;i++){
            arr[i]=-1;
        }
         //隨機數產生
        Random random = new Random();
        for (int i = 0;i<arr.length;){
            int num = random.nextInt(200);
            if(!contains(arr,num)){
                arr[i]=num;
                i++;//i++不能寫在迴圈結束後,因為i++的前提是該隨機數不在陣列裡且被賦值了以後。
            //這裡也可以用while。
            }//判斷隨機數在不在陣列裡?無法寫成簡單的表示式,考慮單獨寫成一個方法。
            //方法的返回值?方法的形參?
        }
        //列印輸出隨機數
        for (int i = 0;i<arr.length;i++){
            System.out.println(arr[i]);
        }
    }
    public static boolean contains(int [] array,int key){
        for(int i = 0;i<array.length;i++) {
            if(array[i] == key) {
                return true;
            }
        }//該迴圈結束表示key不在陣列裡。這裡如果改成只迴圈到當前所有賦值的數,減少迴圈次數,就更好了。加入一個引數index。
        return false;
    }
}

10.列舉型別

enum為關鍵字,不能作為包名。列舉是一種引用資料型別。只有兩種情況用boolean,大於兩種情況用列舉。

/*enum 列舉型別名{
       列舉值1,列舉值2
}
*/
    public static Result divide(int a,int b){
        try{
            int c= a/b;
            return Result.SUCCESS;
        } catch(Exception d){
            return Result.Fail;
        }
    }
    enum Result{
        SUCCESS,Fail
    }

相關文章