Java中常用的类,你都清楚吗?

    技术2023-10-20  71

    Java中常用的类,你都清楚吗?

    一、Object类

    这个类可以说是最基础的一个类,这可是所有类的祖宗啊,看API文档的介绍:

    public class Object Class Object是类Object结构的根。 每个班都有Object作为超类。 所有对象(包括数组)都实现了这个类的方法。

    下面是它所有的方法了:

    Modifier and TypeMethod and Descriptionprotected Objectclone() 创建并返回此对象的副本。booleanequals(Object obj) 指示一些其他对象是否等于此。protected voidfinalize() 当垃圾收集确定不再有对该对象的引用时,垃圾收集器在对象上调用该对象。类getClass() 返回此 Object的运行时类。inthashCode() 返回对象的哈希码值。voidnotify() 唤醒正在等待对象监视器的单个线程。voidnotifyAll() 唤醒正在等待对象监视器的所有线程。StringtoString() 返回对象的字符串表示形式。voidwait() 导致当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法。voidwait(long timeout) 导致当前线程等待,直到另一个线程调用 notify()方法或该对象的 notifyAll()方法,或者指定的时间已过。voidwait(long timeout, int nanos) 导致当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法,或者某些其他线程中断当前线程,或一定量的实时时间。

    这里简单的我就说了,就说几个用的很多的方法:

    equals()方法

    指示一些其他对象是否等于此,这是官方的解释。关于具体使用我就不多讲了,因为实在没什么讲的,下面讲一个面试常问的题关于equals和==的区别,话不多说,先上一段代码:

    public class EqualTest { public static void main(String[] args) { int a = 3; int b = 3; System.out.println(a == b);//true Student s1 = new Student(); Student s2 = new Student(); System.out.println(s1 == s2);//false System.out.println(s1.equals(s2));//false } }

    看着上面的代码是不是很困惑,感觉==和equals()方法差不多啊,来看equals()方法的源码:

    public boolean equals(Object obj) { return (this == obj); }

    这是Object类中的,可以看到默认的就是引用地址的比较,如果单纯的用Object中的equals方法和==没什么太大的区别,那equals方法存在有何意义?下面介绍一下,其实啊,我们可以用来进行对象内容的比较,不过需要重写这个方法

    public class Student { String name; @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; return Objects.equals(name, student.name); } @Override public int hashCode() { return Objects.hash(name); } }

    这里不需要我们自己手写,用IDEA中的快捷键就可以,我们会发现又把hashCode()方法重写了,这是因为

    覆盖hashCode方法,以便维护hashCode方法的通用合同,该方法规定相等的对象必须具有相等的哈希码。

    hashCode方法

    public int hashCode() 返回对象的哈希码值。 支持这种方法是为了散列表,如HashMap提供的那样 。

    其实还有toString()方法用的比较多,还有另外几个和线程有关的,现在就不多展开,以后的博客我会持续分享,希望大家关注!!!

    二、Date类

    public class DateTest { public static void main(String[] args) { Date date = new Date(); long time = date.getTime(); System.out.println(date);//Fri Jul 03 15:25:59 CST 2020 System.out.println(time);//1593761159315 } }

    这个类非常简单,用的比较多就是getTime方法了,这个是将日期转换为毫秒值。

    三、DateFormate类

    这是时间格式化的类,通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在Date对象与String对象之间进行来回转换。

    格式化:按照指定的格式,从Date对象转换为String对象。

    解析:按照指定的格式,从String对象转换为Date对象。

    注意点:这个类不能直接使用,是一个抽象类,看下面的代码就知道了

    public abstract class DateFormat extends Format { }

    我们进行日期格式化要用SimpleDateFormat类,下面先介绍一些东西:常用的格式规则为:

    标识字母(区分大小写)含义y年M月d日H时m分s秒

    这里面有常用的方法:

    format方法

    作用是将日期装换为字符串

    public class Dateformate { public static void main(String[] args) { Date date = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String s = sdf.format(date); System.out.println(s);//2018-07-03 } }

    parse方法

    作用是将字符串转换为日期格式

    public class Dateformate { public static void main(String[] args) throws ParseException { String str = "2018-09-09"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse(str); System.out.println(date);//Sun Sep 09 00:00:00 CST 2018 String s = sdf.format(date); System.out.println(s);//2018-09-09 } }

    四、StringBuilder类

    查阅java.lang.StringBuilder的API,StringBuilder又称为可变字符序列,它是一个类似于 String 的字符串缓冲区,通过某些方法调用可以改变该序列的长度和内容。

    原来StringBuilder是个字符串的缓冲区,即它是一个容器,容器中可以装很多字符串。并且能够对其中的字符串进行各种操作。

    它的内部拥有一个数组用来存放字符串内容,进行字符串拼接时,直接在数组中加入新内容。StringBuilder会自动维护数组的扩容。原理如下图所示:(默认16字符空间,超过自动扩充)

    下面介绍一些常用的方法:

    append方法

    该方法真的是有很多种重载的方法,就不会一一列举,可以看官方的API文档,看一段代码

    public class StringBuilderTest { public static void main(String[] args) { StringBuilder s1 = new StringBuilder(); StringBuilder s2 = new StringBuilder("abcd"); System.out.println(s1.append(s2));//abcd System.out.println(s1.append(12));//abcd12 System.out.println(s2.append("tiger"));//abcdtiger } }

    上面的代码就很好的解释了apend的使用。不过多赘述了!

    toString方法

    通过toString方法,StringBuilder对象将会转换为不可变的String对象。如:

    public class Demo16StringBuilder { public static void main(String[] args) { // 链式创建 StringBuilder sb = new StringBuilder("Hello").append("World").append("Java"); // 调用方法 String str = sb.toString(); System.out.println(str); // HelloWorldJava } }

    五、包装类

    基本类型对应的包装类(位于java.lang包中)byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean

    高亮的两个写法有些特殊,需要单独记忆,其余的都是改首写字母为大写即可。

    这里就涉及到一个概念:基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:

    装箱:从基本类型转换为对应的包装类对象。

    拆箱:从包装类对象转换为对应的基本类型。

    其实,从JDK1.5后就实现了自动装箱和拆箱,不需要我们手动去弄了,非常方便。

    下面说一下,这个里面涉及到的一道面试题:

    怎么样将String类型的字符串转化为对象的基本数据类型?

    public class Baoz { public static void main(String[] args) { System.out.println(Byte.parseByte("12"));//12 System.out.println(Short.parseShort("123"));//123 System.out.println(Integer.parseInt("1234"));//1234 System.out.println(Long.parseLong("123456"));//123456 System.out.println(Float.parseFloat("123.6"));//123.6 System.out.println(Double.parseDouble("123.65"));//123.65 System.out.println(Boolean.parseBoolean("1>2"));//false String str = "f"; System.out.println(str.toCharArray()); } }

    除了转char类型需要转成char 数组来存,其余的都是何有规律的使用parseXxxx方法。

    Processed: 0.011, SQL: 9