重温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);
    }
}

 

 

 

 

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