常用类
String类的构造方法和方法在API帮助文档进行学习
关于StringBuffer
如果进行字符串的频繁拼接,会占用大量方法区内存造成内存空间的浪费,因为java中字符串不可变,每一次拼接都会产生新的字符串
StringBuffer底层实际是一个byte数组,往StringBuffer中放字符串实际是放到byte数组中了
StringBuffer初始容量为16
append方法底层在进行追加的时候数组容量不够会自动扩容
StringBuffer s1 = new StringBuffer();
s1.append("a");//可以放基本数据类型的数据和引用数据类型的数据
如何优化StringBuffer的性能
在创建StringBuffer的时候尽可能给定一个合适的初始化容量,减少底层数组的扩容次数
StringBuffer s2 = new StringBuffer(100);
StringBuilder和StringBuffer
StringBuilder的初始化容量也是16
StringBuilder s1 = new StringBuilder(100);
StringBuilder的append方法用起来和StringBuffer一样
区别:
StringBuffer中的方法都有synchronized关键字修饰,在多线程环境下运行是安全的
StringBuilder没有这个关键字修饰
包装类
java为8种基本数据类型准备了8种对应的包装类型,8种包装类属于引用数据类型,父类是Object
为什么要提供包装类
因为8种基本类型不够用,所以又提供了对应的8种包装类
当一个方法的参数类型是Object时,要传一个基本数据类型的数据时怎么办
可以传一个对应的包装类进去
可以将这个基本数据类型的数据经过构造方法包装成一个对象进去
public class Integertest{
public static void main(String[] args){
Myint mi = new Myint(100);
dosome(mi);
}
public static void dosome(Object obj){
System.out.println(obj);
}
}
class Myint{
int value;
public Myint(){
}
public Myint(int value){
this.value =value;
}
public String toString()
{
return String.valueOf(value);
}
}
String中valueOf的方法:将非字符串,转化为字符串。
如果valueOf里填的是类,那么返回的就是类的toString方法。
以上的包装类是我们自己写的,而java中已经提供了8种基本类型的包装类
8种基本类型的包装类对应的包装类型名
基本数据类型 包装类型
byte java.lang.Byte
short java.lang.Short
int java.lang.Integer
long java.lang.Long
float java.lang.Float
double java.lang.Double
boolean java.lang.Boolean
char java.lang.Character
详讲java.lang.Integer
public class Integertest{
public static void main(String[] args){
Integer i = new Integer(100);
dosome(i);
}
public static void dosome(Object obj){
System.out.println(obj);
}
}
装箱与拆箱
将基本数据类型转化为引用数据类型就叫装箱
Integer i = new Integer(100);
System.out.println(i);//包装类的toString()方法已经重写了,可以直接用
将引用数据类型转换为基本数据类型就叫拆箱
int i = i.intValue();//这是Number类下的方法,byte等都有类似的方法
Integer的构造方法有俩个
Integer(int)
Integer(String)//注意这个String必须是数字比如"111","中文"这样没法转化成数字的,运行时会报错NumberFormatException(数字格式化异常)
通过包装类获取基本数据类型的最大值与最小值
Integer.MAX_VALUE
Integer.MAX_VALUE
自动拆箱与自动装箱
Integer i = 100;//自动装箱
int y = x;//自动拆箱
进行基本运算时也会进行自动拆箱
System.out.println(i+1);//101
自动装箱与自动拆箱的好处
方便编程
但是Integer i = 100依然保存的是对象地址
所以Integer y = 100;
System.out.println(i==y);//false
==不会触发自动拆箱机制,==永远判断的是两个对象的内存地址
Integer.parseInt(String)方法是将String类型的数字转换为int型,他的返回值类型是int
Integer.valueOf(String)方法是将String类型的数字转为Integer型,返回值类型是Integer,类似于Integer(String)的改进方法,由于Integer(String)性能差所以被弃用,建议使用valueOf(String)
日期类
Date a = new Date();//并且Date的toString方法已经重写
如何将日期格式化
SimpleDateFormat类负责日期格式化
yyyy 年
MM月
dd 日
HH 时
mm 分
ss 秒
SSS 毫秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");//想要什么格式就自己写例如yyyy/MM/dd
和Date套用,Date转String
String nowtime = sdf.format(a);//将Date类的a转换成sdf的格式
System.out.println(nowtime);
String转Date
String time = "1949-10-01"'
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-mm-dd");//这个格式要和String对应
Date time2 = sdf2.parse(time);
System.out.println(time2);
获取毫秒数
System.currentTimeMillis();获取自1970年1月1日到当前时间的总毫秒数
获取方法耗时的毫秒数就可以
long begin = System.currentTimeMillis();
方法();
long end = System.currentTimeMillis();
long a = end - begin;
数字格式化
DecimalFormat df = new DecimalFormat("格式");
#数字
, 千分位
. 小数点
0 不够补零
DecimalFormat df = new DecimalFormat("###,###.##");
String s = df.format(1234.111);
System.out.println(s);//1,234.11
DecimalFormat df = new DecimalFormat("###,###.0000");//表示保留四位小数,不够补零,1,234.1110
BigDecimal//大数据,精度高,属于引用数据类型
Random//随机数
Random random = new Random();
int num = random.nextInt();
random.nextInt(101);//表示从0-100间随机取数,不包括101
枚举类型
一枚一枚可以列举出来的才建议使用枚举
枚举编译之后也是生成class文件
枚举也是引用数据类型
枚举中的每一个值都可以看做常量
枚举类型语法:
enum 枚举类型名{
枚举值1,枚举值2
}
结果只有两种类型的建议使用布尔类型,超过两种建议枚举类型
//四季枚举
public enmu season{
SPRING,SUMMER,AUTUMN,WINTER
}
//switch语句支持枚举
switch(season.SPRING)
{
case SPRING:
System.out.println("春天");
break;
case SUMMER:
System.out.println("夏天");
break;
case AUTUMN:
System.out.println("秋天");
break;
case WINTER:
System.out.println("冬天");
break;
}