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