StringBuilder
Java标准库里提供了StringBuilder,它是一个可变对象,可以预先分配缓存区,往StringBuilder中新增字符的时候,不会创建新的临时对象。
StringBuilder sb=new StringBuilder(1024);
for(int i=0;i<100;i++){
sb.append("i");
sb.append("o");
}
String s=sb.toString();
还可以进行链式操作,里面定义的append()方法会返回this,这样,就可以不断的调用自身的其他方法。
一个不断增加的计算器。
public class Main {
public static void main(String[] args) {
Adder adder = new Adder();
adder.add(3)
.add(5)
.inc()
.add(10);
System.out.println(adder.value());
}
}
class Adder {
private int sum = 0;
public Adder add(int n) {
sum += n;
return this;
}
public Adder inc() {
sum ++;
return this;
}
public int value() {
return sum;
}
}
StringBuffer是早期StringBuilder的一个线程安全版本,它通过同步来保证多个线程操作StringBuffer也是安全的,但是同步会带来执行速度的下降。
包装类
基本数据类型:byte,short,int,long,double,float,char,boolean
基本数据类型不能赋值为null。
包装类将基本数据类型包装为引用类型,可以赋值为null
直接把int变为Integer的赋值写法,称为自动装箱(Auto Boxing),反过来,把Integer变为int的赋值写法,称为自动拆箱(Auto Unboxing)。
JavaBean
JavaBean主要用来传输数据,即把一组数据组合成一个JavaBean便于传输,通过ide可以快速的生成get/set方法。
public class Person {
private String name;
private int age;
public String getName() { return this.name; }
public void setName(String name) { this.name = name; }
public int getAge() { return this.age; }
public void setAge(int age) { this.age = age; }
public boolean isChild() {
return age <= 6;
}
}
enum 枚举
enum weekday{
SUN,MON,TUE,WED,THU,FRI,SAT;
}
和int定义的常量相比,使用enum定义枚举有以下好处,
1,enum常量本身带有类型信息,即weekday.SUN类型是weekd类型,
int day=1;
if(day=weekday.sun){}
这里会报编译错误,因为weekday.sun是weekday类型,
2,不可能引用到非枚举的值,
3,不同类型的枚举不能相互比较或者赋值,因为类型不符。例如,不能给一个Weekday枚举类型的变量赋值为Color枚举类型的值:
#switch
枚举可以应用在switch中,因为枚举天生具有类型信息和有限个枚举常量,
public static void main(String[] args) {
Weekday day = Weekday.SUN;
switch(day) {
case MON:
case TUE:
case WED:
case THU:
case FRI:
System.out.println("Today is " + day + ". Work at office!");
break;
case SAT:
case SUN:
System.out.println("Today is " + day + ". Work at home!");
break;
default:
throw new RuntimeException("cannot process " + day);
}
}
}
enum Weekday {
MON, TUE, WED, THU, FRI, SAT, SUN;
}
常用工具类
Math:Math类就是用来进行数学计算的
Random:Random用来创建伪随机数