java常用类详细介绍

常用类

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 类。

猜你喜欢

转载自blog.csdn.net/weixin_47063773/article/details/109141695