重溫Java基礎(六)

1.常用類

1.1.scanner,鍵盤錄入,

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String strs=sc.next();
        System.out.println(strs);
    }

1.2.數組的拷貝

public static void main(String[] args) {
        int[] a = {1, 2, 3, 4, 5, 6};
        int[] b = Arrays.copyOf(a, 10);
        int[] c = new int[10];
        System.out.println(Arrays.toString(b));
        System.arraycopy(a, 2, c, 0, 4);
        System.out.println(Arrays.toString(c));
    }

1.3.程序執行的時間

public static void main(String[] args) {
        //1970開始到現在的毫秒數
        long beginTime = System.currentTimeMillis();
        for (int i = 0; i < 10000000; i++) {
            i = i + 1;
        }
        long endTime = System.currentTimeMillis();
        long excuteTime = endTime - beginTime;
        System.out.println(excuteTime);
    }

1.4.垃圾回收

public class TestGc {
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        System.out.println("我被垃圾回收了");
    }

    public static void main(String[] args) {
        new TestGc();
        System.gc();
    }
}

1.5.Math函數

public static void main(String[] args) {
        //返回[0,1)之間的隨機小數
        System.out.println(Math.random());
        System.out.println(Math.PI);
    }

1.6.精度準確的計算

    public static void main(String[] args) {
        //float 和double精度不是很準,String類型的構造器是非常準確的
        BigDecimal a = new BigDecimal("0.01");
        BigDecimal b = new BigDecimal("0.09");
        System.out.println(a.add(b));
    }

2.字符串,字符串的本質是char數組實現了CharSequence接口

  • 不可變字符串,String (內存地址不可變),變了之後會指向新的地址。
  • 可變字符串,StringBuffer,StringBuilder

2.1.String的創建方式

  • 直接賦值  String str = "ab,cd,ef"; 字符串常量,指向方法區(常量池)的值。要麼創建一個對象要麼不創建。
  • String str = new String("abc");  引用方法區常量池的值,沒有的話就自己創建。至少創建一個對象。(堆和方法區)

2.2.字符串爲空

  • 表示引用爲空 String aa=null; 還沒有初始化,沒有分配內存空間。
  • 表示空字符串 String bb=""; 已經創建了對象,分配了內存空間。

2.3.字符串比較相等

  • == 比較內存地址是否相等
  • equals,它在object中和==一樣的,建議子類重寫。
  • String類重寫了equals方法,先比較地址是否相等,不相等則比較對象是否相等,然後判斷字符是否相等。

2.4.字符串的編譯優化,凡是“”引用起來,都是直接量。在編譯的時候已經確定了。String a="a"+"b" 

2.5.String類的常用方法

  • 去掉字符串所有空格,replace
  • str.toCharArray()轉成char類型的數組(去重打印,結合set)
  • str.charAt(0),返回對應位置上面的字母(倒敘輸出)

2.6.可變字符串的性能高一些。

  • 三者在執行速度方面的比較:StringBuilder >  StringBuffer  > String
  • StringBuilder:線程非安全的,StringBuffer:線程安全的
  • StringBuilder初始容易16,char類型的數組,自動擴容2n+2

 2.7.對於三者使用的總結: 

  • 1.    如果要操作少量的數據用 = String
  • 2.    單線程操作字符串緩衝區 下操作大量數據 = StringBuilder
  • 3.    多線程操作字符串緩衝區 下操作大量數據 = StringBuffer

3.random類

public static void main(String[] args) {
        Random random = new Random();
        System.out.println(random.nextInt());
        //可以指定生成的範圍[0,145)
        System.out.println(random.nextInt(145));
    }

3.1.UUID:通用唯一識別符,結合當前的時間和網卡生成一段字符。String str = UUID.randomUUID().toString();(16進制)

4.Date類

    public static void main(String[] args) {
        //自1970年以來的毫秒值
        long millis = System.currentTimeMillis();
        //轉成Date
        Date date = new Date(millis);
        System.out.println(date);
        //
        System.out.println(date.toLocaleString());
    }

5.生成5位驗證碼

    public static void main(String[] args) {
        String str = "ABCDEFGHIGKLMNOPQRSTUVWXYZ";
        str += str.toLowerCase();
        str += "1234567890";
        System.out.println(str);
        //取字符串,StringBuilder接收
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 5; i++) {
            char c = str.charAt(new Random().nextInt(str.length()));
            sb.append(c);
        }
        System.out.println(sb);
    }
}

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章