java常用类
1.基本数据类型的包装类
2.字符串相关类
3.时间处理相关类
4.枚举类
5.Math类
6.File类
为什么需要 包装类?
JAVA并不是纯面向对象的语言。Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的。
但是我们在实际使用中经常需要将基本数据转化成对象,便于操作。
比如:集合的操作中。 这时,我们就需要将基本类型数据转化成对象!
包装类均位于java.lang包,包装类和基本数据类型的对应关系:
包装类的作用:
所有的包装类(Wrapper Class)都有类似的方法,掌握一个其他都类似!以Integer为例!
包装类型
MAX_VALUE :返回当前类型的最大值
MIN_VALUE :返回当前类型的最小值
TYPE :返回当前包装类型对应的基本类型
ParseInt() :将一个字符串转为对应的类型
Equals() :比较两个对象是否相等
自动装箱和自动拆箱
自动装箱
基本类型就自动地封装到与它相同类型的包装中,如: Integer i = 100; 本质上是,编译器编译时为我们添加了: Integer i = new Integer(100);
自动拆箱
包装类对象自动转换成基本类型数据。如: int a = new Integer(100); 本质上,编译器编译时为我们添加了: int a = new Integer(100).intValue();
九大基本类型
字符型(char)
布尔型(Boolean)
Void(void)
数值类型(byte、short、int、long、float、double)
String(不可变字符序列)
Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的。
Java允许使用符号"+"把两个字符串连接起来。
String类的常用方法:
字符串相等的判断:
equals判断字符串值相等,==判断字符串对象引用相等!
一般使用equals方法
public class StringTest3 {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s1==s2); //true
System.out.println(s1==s3); //false
System.out.println(s3==s4); //false
}
}
字符串的创建
字符串拼接
其实在字符串拼接过程实际调用了StringBuffer对象进行拼接,每次都会生成一个新的对象。
拼接结束之后直接抛弃该对象。
所以在字符串拼接过程造成了较大的资源浪费,同时也降低了字符串的拼接效率(所以在对字符串对象进行大量拼接操作时建议使用StringBuffer或StringBuilder)。
StringBuffer
StringBuffer将产生一个线程安全(代码内部包含了Synchronized关键字)的对象以实现对字符串的操作。
在进行字符串拼接过程StringBuffer操作的是同一个字符串对象,这操作可以避免产生过多的字符串常量。
常用方法
优点
StringBuilder
一个非线程安全的字符串对象,作用于StringBuffer相似。
StringBuilder中也提供了一系列用于字符串拼接的方法。这操作可以避免产生过多的字符串常量。
常用方法同StringBuffer
StringBuffer与StringBuilder的区别
StringBuffer在多线程环境的情况下使用具有一定的线程安全型,因为在方法上都是用了线程锁——Synchronized。
相反,StringBuilder没有使用线程锁,所以对于单线程情况下更适合。
使用场景
String :存储字符串常量时使用
StringBuilder :单线程下字符串拼接使用
StringBuffer :多线程下字符串拼接使用
效率
StringBuilder > StringBuffer > String
在标准Java类库中包含一个Date类。它的对象表示一个特定的瞬间,精确到毫秒。
Java中时间的表示说白了也是数字,是从:标准纪元1970.1.1 0点开始到某个时刻的毫秒数,类型是long
包含了常见的数学运算函数。
random() : 生成[0,1)之间的随机浮点数
生成:0-10之间的任意整数: int a = (int)(10*Math.random());
生成:20-30之间的任意整数: int b = 20 + (int)(10*Math.random());
递归:“自己调用自己”,一个使用递归技术的方法将会直接或者间接的调用自己
递归的缺陷: “简单”是递归的优点之一。
但是递归调用会占用大量的系统堆栈,内存耗用多,在递归调用层次多时速度要比循环慢的多。所以再使用时要慎重。
任何可用递归解决的问题也能使用迭代解决。
当递归方法可以更加自然地反映问题,并且易于理解和调试,并且不强调效率问题时,可以采用递归;
java.io.File类:文件和目录路径名的抽象表示形式
通过File对象可以访问文件的属性。
public boolean canRead()
public boolean canWrite()
public boolean exists()
public boolean isDirectory()
public boolean isFile()
public boolean isHidden()
public long lastModified()
public long length()
public String getName()
public String getPath()
通过File对象创建空文件或目录(在该对象所指的文件或目录不存在的情况下)。
public boolean createNewFile()throws IOException
public boolean delete()
public boolean mkdir(), mkdirs() 注意两个的区别!
枚举类型:
尽量不要使用枚举的高级特性,事实上高级特性都可以使用普通类来实现,没有必要引入复杂性!
枚举其实就是一组常量值,通过枚举可以有效的规范变量的赋值。枚举是一种引用类型。其实枚举类型也是一个类。
定义形式:
[修饰符] enum 枚举名{
常量值集合
}
扩展枚举
在枚举类型的内部可以定义静态和非静态方法。
在枚举的内部可以定义构造函数(个数不限),但不能使用public访问修饰符,否则会出现错误。
在枚举的内部可以定义抽象方法,然后由常值进行实现。
----------------------------------------------------------
--------------------------------------------------