常用类
分类:
基本数据类型的包装类
字符串相关类(不可变字符序列String;可变字符序列StringBuffer,StringBuilder)
时间处理类(Date,DateFormat and SimpleDateFormat,Calender)
Math类
File类
枚举类:JDK1.5后
一:包装类
概念:将基本数据类型封装到一个类中,包含属性和方法,方便对类操作(包装类位于java.lang中)
why:他们的出现为了解决基本类型不能直接与面对对象开发,让基本类型以对象的形式存在
int-------------Integer
char-----------Character
double--------Double
short----------Short
float----------Float
byte----------Byte
long----------Long
boolean------Boolean
1:int Integer和String之间的相互转换
int装换为Integer
int a=123;
Integer i1=new Integer(a); //通过构造方法转换
Integer i2=Integer.valueOf(a);//通过Integer提供的静态方法转换
Integer转换为int
Integer integer1=new Integer(1);
int i=integer1.intValue();
int转换为String
int i=20;
String s=i+""; //通过字符串拼接转换
String转换为int(字符串里存在数字才可以,否则会报错:java.lang.NumberFormatExcepation数据格式转换异常)
String ss="456";
int i3=Integer.parselnt(ss); //通过Integer里的parseInt的方法转换
String转换Integer(字符串是不是一定要有数字)-------------和int一样,构造方法和静态方法
String ss="123";
Integer integer1=new Integer(ss);
Integer integer2=Integer.valueOf(ss);
Integer转换为String
Integer integer=new Integer("123");-------------------为什么要传入字符串参数(toString不用传入参数)
String ss=integer.toString(); //Integer的toString的方法
String ss=integer+'""; //字符串拼接
2:自动装箱和拆箱与内存复用
自动装箱:基本数据类型自动封装到与它相同的包装类中
Integer var=数值(int装箱为Integer)如果var指向的对象在-128到127范围内赋值,生成的实例化对象由IntegerCache.cache()
方法产生,会复用已有的对象,和String的串池一样,cache()方法会将该范围产生的Integer对象入池,下次使用直接从缓冲区拿,就不会再次创建
PS所有数值型的包装类都会涉及到上面问题,-------------(手动装箱不会出现内存复用现象new每次都会在堆里开辟新空间)
PS自动装箱是通过valueOf()方法实现
Integer i1=100;
Integer i2=100;
Integer i3=200;
Integer i4=200;
System.out.println(i1==i2);//true
System.out.println(i3==i4);//false
自动拆箱:包装对象自动转化基本数据类型
Integer i=10;//自动装箱
int a =i; //自动拆箱int a=i.intValue
System.out.println(a==i);//在运算时候都会自动拆箱
PS:本质是调用了valueOf()或者intValue()方法
二:String相关类(c语言存储字符串是字符数组)(位于java.lang包,具有很多丰富的方法:计算字符串,连接字符串,提取字符串)
1使用String存储字符串
String s ="HelloWorld";
String s =new String("HelloWorld");
2常用字符串方法
String str="abc";
str.charAt(0);------------------字符串第0的位置的字母
str.indexOf("a");---------------a元素的下标
str.concat("cde");-------------连接字符串
str1.equals(str)----------------比较两个字符串是不是值相等
str1.equalsgnoreCase(str)----是忽略大小写的比较是不是值相等
str.length();--------------------字符串长度
str.replace(str,str1)------------str1替换str
str.startsWith(prefix)--------------------如果字符串是以prefix开头就是返回true
str.endsWith(predix)--------------------如果字符串是以prefix结尾就是放回true
str.substring(beginIndex,endIndex);--返回该字符串一部分,下标由参数决定
str.toLowerCase();----------------------返回原来字符串所有大写字母改成小写字母
str.toUpperCase()----------------------返回原来字符串所有小写字母改成大写字母
str.trim()--------------------------------返回原来字符串头部和尾部 的空格被delete
PS:
String a="abc";
String b="abc"; //它会自动在常量池里找到abc所以地址是一样的
System.out.println(a==b);----------返回true
String a="abc";
String b=new String("abc");//它会创建一块新的空间地址不一样
System.out.println(a==b);---------返回false
String a="abc";
String b=new String("abc");
b=b.intern();//新空间里会去常量池里找abc
System.out.println(a==b);---------返回true
String a="abc";
String b="cde";
String c="abcdef";
String d=a+b;
String e="abc"+"cde";
System.out.println(c==d);//false----c是一块新空间,用intern可以去常量池里找
System.out.println(c==e);//true-----直接在常量池里找
2字符串的本质
字符串的本质是字符数组或者叫字符序列
String类是final修饰的,不可以被继承
使用equals比较的是字符数组每个位置的值
immutable (不可变的):String是一个不可变对象String s="ABC"; s.toLowerCase();该方法没有改变ABC的值,是创建了一个新String类abc,然后指向s
PS:String里的Spilt();可以拆分字符串;
3 StringBuffer类和StringBuilder类
StringBuffer:String的增强版,它中文名字叫字符缓冲区,它是一个容器
StringBuffer的声名:
StringBuffer sb=new StringBuffer();//创建空StringBuffer对象
StringBuffer sb=new StringBuffer("aaa");创建变量储存字符串aaa
sb.toString();//装换为String类型
sb.append("----");//追加字符串
PS:StringBuffer的方法StringBuffer.length()//字符串实际长度
StringBuffer.capacity();//容器的能力就是容器的大小这里是16;
PSPSPSPPSPSPS:
总结:
String是不可变字符序列
StringBuilder可变字符序列,效率高,线程不安全
StringBuffer可变字符序列,效率低,线程安全
三:时间处理类
1Date类
Date: System.out.println(date);//打印日期
date.getTime(); System.out.println(date.getTime());//打印1970年一月一日距离现在的毫秒数
date.parse(2021/03/16);//打印1970/01/01午夜距离参数日期的毫秒数
2DateFormat(位于java.text包)(是一个抽象类也是SimpleDateFormat的一个父类)
作用:格式化date
格式化风格
DateFormat.SHORT:完全数字,如12.13.52或者3:30pm
DateFormat.MEDIUM:如Jan 12 ,1952
DateFormat.LONG:如January 12,1952或者3:30:32pm
DateFormat.FULL完全指定 如Tuesday.April.1952AD或者3:30:42pm PST
用法:
将date格式化为字符串
创建date对象
创建format(多态创建)(创建的时候可以指定格式"y-M-d H:m:s"没有指定格式默认年月日用 / 时间用 :)
String s=format对象的format(date)
将字符串转换为日期类
Date d1=dateFormat.parse("2021-10-23 20:20:20");
3Calender类(protected修饰不能new,提供getinstance()方法)
获取系统时间
Calender calendar=Calendar.getInstance()
设置指定时间
Date d1=dateFormat.parse("2021-10-23 20:20:2
calendar.setTime(d1);
System.out.println(calendar);//改变系统时间而已
打印年月日时分秒,月是从0开始算的
System.out.println(canlendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH));
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(calendar.get(Calendar.HOURS_OF_DAY));
System.out.println(calendar.get(Calendar.MINUTE));
System.out.println(calendar.get(Calendar.SECOND));
4:LocalDate/LocalTime/LocalDateTime
四:Math类
random();生成0到1左闭右开的区间
使用 int a=(int)(10*Math.random());生成0到10的整数
int b =20+(int)(10*Math.random());生成20到30的整数
五: 枚举类enum
jdk5开始的新的数据类型,是一种特殊类,就是固定多个常量对象的集合
定义:
『修饰符』enum 名称{
常量a,常量b,常量c;
}
enum自动继承java.util.Enum类所以不能继承其他类(可以实现接口)
注意:
构造器:只能private修饰,保证构造函数只可以内部使用
枚举项:必须写在枚举类最前面用 , 隔开 如果最后一项没有其他内容可以不写分号
枚举对象:数量是一定的,他们默认public static final ,外部不能创建对象
使用:
枚举对象是全局静态变量,可以直接类名调用
强烈建议定义一组常量的时候使用枚举类型