这个类可以说是最基础的一个类,这可是所有类的祖宗啊,看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()方法用的比较多,还有另外几个和线程有关的,现在就不多展开,以后的博客我会持续分享,希望大家关注!!!
这个类非常简单,用的比较多就是getTime方法了,这个是将日期转换为毫秒值。
这是时间格式化的类,通过这个类可以帮我们完成日期和文本之间的转换,也就是可以在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 } }查阅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 } }高亮的两个写法有些特殊,需要单独记忆,其余的都是改首写字母为大写即可。
这里就涉及到一个概念:基本类型与对应的包装类对象之间,来回转换的过程称为”装箱“与”拆箱“:
装箱:从基本类型转换为对应的包装类对象。
拆箱:从包装类对象转换为对应的基本类型。
其实,从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方法。