Date类 Format calendar类 System 类 StringBuilder 类 包装类 基本类型和字符串的转换
Date类
long time = System.currentTimeMillis() 返回1970 1-1 00:00:00(英国格林威治) 到当前的毫秒数 中国+8 所以是1970 1-1 08:00:00
2. Date date = new Date(); 获取一个英文时间 Thu Sep 05 09:38:14 CST 2019
3. date.getime(); 把时间转换为毫秒 与System.currentTimeMillis() 一样
4.Date 有参构造方法 Date date = new Date(0L) 把毫秒转换为时间 ---> 中国是 Thu Jan 01 08:00:00 CST 1970
Format
Format抽象类 --> 子类 DateFormat , MessageFormat , NumberFormat 都是抽象方法 DateFormat 子类 SimpleDateFormat
SimpleDateFormat 中的 format 和 parse 成员方法 parse 方法必须指出 ParseException 异常
Date date = new Date();
SimpleDateFormat sdf= new SimpleDateFormat("yyyy年-MM月-dd日 HH时:mm分:ss秒"); String类型
String time = sdf.format(date); 2019年-09月-05日 09时:57分:42秒
System.out.println(time);
Date date1 = sdf.parse("2018年-08月-08日 16时:05分:11秒"); Date类型
System.out.println(date1); Wed Aug 08 16:05:11 CST 2018
calendar类
一个抽象类 但是有一个静态方法
Calendar calendar = Calendar.getInstance();
// System.out.println(calendar); java.util.GregorianCalendar[time=1567653246124,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=29,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2019,MONTH=8,WEEK_OF_YEAR=36,WEEK_OF_MONTH=1,DAY_OF_MONTH=5,DAY_OF_YEAR=248,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=14,SECOND=6,MILLISECOND=124,ZONE_OFFSET=28800000,DST_OFFSET=0]
calendar.set(Calendar.YEAR,2020);
calendar.set(Calendar.MONTH,2);
calendar.set(Calendar.DATE,6);
int year = calendar.get(Calendar.YEAR); 2020
int month = calendar.get(Calendar.MONTH); 2 西方的月份
int i = calendar.get(Calendar.DATE); 6 日
Date date = calendar.getTime(); 1567653246124 毫秒数
calendar.set(2018,8,6); 也可以同时设置 年月日
System 类
int[] src = {1,2,3,4};
int[] dest = {5,6,7,8};
System.out.println("复制前: "+ Arrays.toString(dest));
System.arraycopy(src,0,dest,0,2); 源数组 起始位置 目标数组 起始位置 复制个数
System.out.println("复制后: "+Arrays.toString(dest)); 复制后: [1, 2, 7, 8]
StringBuilder 类
字符串是常量,它的值再创建后不能更改. 字符串的底层是一个被final修饰 的数组,不能改变,是一个常量
private final byte[ ]; 字符串的效率低下, String str = " a" +"b " +"c "; --->首先创建三个内存 --> "ab" 又创建一个--->"abc"又 创建一个. 最后五个内存,所以浪费内存.
所以使用 StringBuilder 字符缓冲区,可以提高字符串的操作效率(长度可变的字符串) 底层 byte[ ] value = new byte[16]
StringBuilder在内存中始终是一个数组,占用空间少,效率高,如果超出了StringBuilder 的容量,会自动的扩容.
构造方法: 1.StringBuilder( ) 构造一个不带任何字符串生成器,其初始容量为16个字符,
2. StringBuilder() 构造一个生成器,并初始化为指定的字符串内容.
StringBuilder bu1= new StringBuilder();
StringBuilder bu3 = bu1.append("2"); bu1==bu3 true append返回的是this 把bu1的地址给了bu3
StringBuilder bu2 = new StringBuilder("wyc");
bu2.append("dgha").append('中');.append(true).append(8.8).append(5); wycdgha中true8.85 链式操作可append任意数据
StrinBuilder 可以和 String 任意转换
1. String ---> StringBuilder 直接往StringBuilder 构造方法中放String 对象 StringBuilder strb = new StringBuilder("dhasdh");
2.StringBuilder ---> String 调用StringBuilder 对象的成员方法 toString()
StringBuilder bu2 = new StringBuilder("wyc");
bu2.append("dgha").append(true).append(8.8).append(5).append('中');
String str = bu2.toString(); wycdghatrue8.85中
包装类
基本数据类型无法使用成员方法 操作 , 把基本数据类型 放进一个箱子包装为一个类 称为包装 ,然后可以使用类中的方法
1. 以 整数为例 包装 int --> integer
1.构造方法 Integer integer = new Integer(1); Integer integer2 = new Integer("1"); 过时的方法
2.静态方法 Integer integer3= Integer.valueOf(1); Integer integer4= Integer.valueOf("1");
2.拆箱 integer ---> int
Integer integer = new Integer(1); int anInt = integer.intValue();
3.注意java 的包装 和拆箱是自动的 包装 Integer in = 1 ; 相当于 Integer in = Integer.valueOf(1);
拆箱 int = in +1 ; 相当于 int in = in.intValue(); 再加1
基本类型和字符串的转换
int anInt = 5;
String str = anInt+""; //自动转换
String str2 = Integer.toString(anInt); //Integer 的方法
String str3 = String.valueOf(anInt); //String 的方法 是一个重载方法
// 字符串 --> int
int a = Integer.parseInt("15"); //"a" 报错