常用类
java的使用中,我们会用代码去实现和解决一些问题。虽然问题又很多种,但是在解决问题是我们用到的一些重复使用的类以及它们的方法。我们将这些类归为常用类。下面我们将对这些常用类进行详细的介绍。我们将从类的构造器、继承关系、以及我们常用的一些类方法进行介绍。
Object类
在JDK中提供了一个Object类,它是类层次结构的根类。Object类是我们编写代码种经常会用到的一个类。这个类是十分重要的,因为每个类要么直接,或者间接的继承类这个类,实现了这个类的方法。这个类中的有着一些典型的方法,让我们去使用。
构造器
public Object();
继承关系
无父类。Java中每个类都直接或间接的继承该类。
常用的方法
getClass()
public final 类<?> getClass();
作用:获取对象的类。
返回值:调用该方法是返回对象的类。
hashCode()
public int hashCode()
作用:获取对象的哈希值。
返回值:返回一个整数,该整数表示对象在哈希表中的位置,即对象的哈希值。
注:对象的哈希值,是JVM(Java虚拟机)中存放对象的虚拟内存地址。相当于该对象在内存中的标识。
equals()
public boolean equals(Object obj);
作用:判断传递的参数对象是否相等。
参数:比较的对象。
返回值:若相等,返回true;若不相等,返回false。
注:该方法是通过比较两个引用是否指向同于一个对象。当对于比较他们的内存地址。
clone()
protected Object clone() throws CloneNotSupportedException;
作用:创建并返回一个对象副本。
返回值:返回创建的对象副本。
注:创建得到的对象副本在内存中是新的一个对象。而该克隆的对象中的属性的引用则是原来对象的引用。
Object的子类对象想要使用clone()方法时,都要实现Cloneable接口。
toString()
public String toString();
作用:返回对象的字符串形式。
返回值:返回对象的字符串表示形式。默认返回格式:对象的 class 名称 + @ + hashCode 的十六进制字符串。
notify
public final void notify()
作用:notify() 方法用于唤醒一个在此对象监视器上等待的线程。这个被唤醒的线程时该对象监听下所有线程的其中一个。这个唤醒的线程是随机的。
返回值:没有返回值。
注:一个线程要成为对象监视器的所有者,可以使用一下3种方法:
- 执行对象的同步实例方法
- 使用synchronized内置锁
- 对于class类型的对象,执行静态同步方法
如果一个线程不是该监视器的所有者,则会报IllegalMonitorStateException异常
notifyAll()
public final void notifyAll()
作用:notifyAll()方法用于唤醒所有在此对象监视器上等待的所有线程。
返回值:没有返回值。
注:和notify()的区别只在唤醒的个数。其他都和notify()一样。
wait()
public final void wait()
作用:wait() 方法让当前线程进入等待状态。直到其他线程调用此对象的 notify()和notifyAll()方法。
返回值:没有返回值。
注:当前线程必须是此对象的监视器所有者,否则还是会发生 IllegalMonitorStateException 异常。
如果当前线程在等待之前或在等待时被任何线程中断,则会抛出 InterruptedException 异常。
wait(long timeout)
public final void wait(long timeout)
作用:wait(long timeout) 方法让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 notify()方法或 notifyAll()方法,或者超过参数 timeout 设置的超时时间。
返回值:没有返回值。
注:如果 timeout 参数为 0,则不会超时,会一直进行等待,类似于wait()方法。
当前线程必须是此对象的监视器所有者,否则还是会发生 IllegalMonitorStateException 异常。
如果当前线程在等待之前或在等待时被任何线程中断,则会抛出 InterruptedException 异常。
如果传递的参数不合法,则会抛出 IllegalArgumentException 异常。
wait(long timeout, int nanos)
public final void wait(long timeout,int nanos)
作用:wait(long timeout) 方法让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的 notify()方法或 notifyAll()方法,或者超过参数 timeout 设置的超时时间。通过设置nanos参数使时间更加精细。nanos是纳秒。即时间位timeout + nanos。
返回值:没有返回值。
finalize()
protected void finalize()
作用:finalize() 方法用于实例被垃圾回收器回收的时触发的操作。
返回值:没有返回值。
Math类
Math类为数学工具类,该类包含了很多数学计算方法。我们可以用过该类进行一些运算。对于该类的运用,我们只在需要用到某些计算方法是去查阅所需的计算方法即可,这里不一一介绍该类下的方法。
Random类
File类
File类主要用于对文件的操作,包括文件的创建、文件的查看和文件的删除。我们也可以对文件描述信息进行获取。文件路径,文件大小等。下面我们将讲解重要的几个文件操作的代码实现。
文件创建
//创建文件
public boolean makeFile(String filename){
//根据filename创建文件类,调用mkdirs()创建文件
File f = new File(filename);
boolean flag = f.mkdirs();
return flag;
}
文件查看
//读取文件目录
public boolean readFileName(String filename){
File f = new File(filename);
//判断是否为目录
if(f.isDirectory()){
//为目录,获取目录列表文件
File[] fs = f.listFiles();
//判断目录列表文件是否为空
if(fs.length != 0){
//我是不是一个空空目录
System.out.println(f.getName() + "我不是一个空目录");
//遍历目录种的文件
for (File fx : fs) {
//判断文件是否为目录
if(fx.isDirectory()){
//文件为目录
System.out.println(fx.getName() + "我是一个目录");
}else{
//为文件
System.out.println(fx.getName() + "我是一个文件");
}
}
}else{
//我是一个空目录
System.out.println(f.getName() + "我是一个空目录");
}
}else{
//为文件
System.out.println(f.getName() + "我是一个文件");
}
return true;
}
文件删除
//删除文件
public boolean deleteFile(String filename){
//创建文件类
File f = new File(filename);
//判断是否为目录
if(f.isDirectory()){
//为目录,获取目录列表
File[] fs = f.listFiles();
//判断目录列表是否为空
if(fs.length != 0){
//不为空,遍历目录列表逐一删除
for (File fx : fs){
//判断是否为目录
if(fx.isDirectory()){
//删除目录
deleteFile(fx.getAbsolutePath());
}else{
//删除文件
fx.delete();
}
}
//当目录种的全部内容删除后,删除该目录
f.delete();
}else{
//为空,删除空目录
f.delete();
}
}else{
//删除文件
f.delete();
}
return true;
}
包装类
下面是八大基本类型的包装类。对于八大基本类型来说,我们无法对该类型进行操作,java考虑到这个。给我们提供了8大类型的包装类。
装箱:将基本类型转换为包装类被称为装箱。
拆箱:将包装类转换为基本类型为拆箱。
//装箱
int a = 10;
Integer integer = new Integer(a);
//拆箱
int b = integer.intValue();
System.out.println(b);
//自动装箱
Integer x = 5;
//自动拆箱
x = x + 10;
System.out.println(x);
注:这种由编译器特别支持的包装称为装箱,所以当内置数据类型被当作对象使用的时候,编译器会把内置类型装箱为包装类。相似的,编译器也可以把一个对象拆箱为内置类型。这些都由编译器自己完成。
这些包装类的方法,不在这里一一介绍,可以自己查阅官方文档。
Date类
Date类是对日期和时间封装,该类拥有两个构造函数。
//第一个构造函数使用当前日期和时间来初始化对象。
public Date();
//第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
public Date(long millisec)
下面是该类的方法:
String类
我在在编程中经常会遇到对字符串的操作,java给我们提供了一个操作字符串的类String类。String类是不可改变的,所以一旦创建了String对象,那么它的值就无法改变。这里对String类的方法我们就不进行讲解,大家可以查阅官方文档进行使用
StringBuffer类和StringBuilder类
当对字符串进行修改的时候,需要使用 StringBuffer 和 StringBuilder 类。
和 String 类不同的是,StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象。
StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的(不能同步访问)。
由于 StringBuilder 相较于 StringBuffer 有速度优势,所以多数情况下建议使用 StringBuilder 类。然而在应用程序要求线程安全的情况下,则必须使用 StringBuffer 类。