JAVA中常用几个类的用法
Java中最基本的类有Object类、String类、StringBuffer类、包装类(基本数据类型的包)、Math类、Random类、传统的处理日期/时间类、新的处理日期/时间类、BigDecimal类(上)
Object类
object类是所有类的祖先,是所有类的父类
所有类都继承了Object类的方法,其中有
- equals(Object obj) 比较方法
- notify()线程唤醒方法(唤醒单个线程)
- notifyAll() 唤醒等待池中的所有线程
- wait() 使线程进入等待状态
- hashcode() 返回对象的哈希码
- toString() 返回对象的字符串表示
- finalize()对象回收方法,当垃圾回收器准备回收该对象所占用的内存时,调用该方法。
以上是Object类中所有的方法,其中的常用的equals和toString是比较常用的方法,作为初学者在未学多线程编程时,未了解数据结构时,只要了解以及会运用这两个方法就足以了。equals是对象比较方法,一些类会覆盖这个方法就比如之后我们要说的String类。之后在讲到String类覆盖这个方法的时候,我会详细说明这个方法。toString方法同样在后面讲到Sting类时,也会详细讲解这个方法。
String类和StringBuffer类
String类是Java中的字符串类,有多种构造方法,并且还支持13种操作,
- 返回字符串长度。length
- 获取字符串上指定位置的字符。charAt()
- 复制指定字符串中指定的字符。getChars()
- 判断相等 equals和 equalsIgnore 忽略大小写判断是否相等(一会儿会详细说)
- 比较两个字符串首字符在Unicode码中的位置。compareTo()
- 查找字符,从前开始,从后开始。indexOf lastIndexOf()
- 附加字符。 concat()
- 求子字符串。subString()
- 字符串分离 spilt()
- 全部字符替换 replaceAll() 第一个字符替换 replaceFirst()
- 去字符串首尾的空格。trim()
- 将其他基本数据类型转为String类型 valueOf()
- 字符大小写转换 转换为大写toUpperCase() 转换为小写 toLowerCase()
以上的所有方法均可在API查到用法,用法比较简单,除此之外,String类还有作为基本数据类型的方法,可以直接采用String str1+ String str2 方法将字符串合成在一起,同时也可以和其他基本数据类型一起运用。
StringBuffer类是一个完整的类,没有任何的基本数据类型的特性,所以StringBuffer必须采用方法才能调用,但是他与String类有很多相似的方法,常用StringBuffer共有7种常用的基本方法,与String类有共同的方法有length(),toString(),charAt(), getChars(),subString(),这些方法与String类中的方法调用和作用是相同的,有几种不同的方法,添加新的字符串(append),向字符串中插入字符,StringBuffer类的操作与String类基本是相同的,但是也有不同的地方,这就是引入StringBuffer类的原因,众所周知,写程序要遵循极简原则,所以编程语言在设计的时候,不会出现具有相同作用的两个方法,这个也是如此,那么为什么要引入StringBuffer类呢?原因就是这个类在处理一些字符串问题中,时间复杂度和空间复杂度都比较小,最简单的说法就是运行起来快,而且处理一些问题是比较容易。StringBuffer表示字符串缓存,他与String相比,他是可变的,这个可变的可以这样理解,当我们对String类进行操作的时候,其实String对象没有发生变化,只是引入了一个创建了一个新的对象,并且将新的引用赋给了原来的对象,而StringBuffer并不是这样,他是真的变化了,比如在给一个对象做添加字符的操作中,这个对象在自身的基础上进行添加,并不是和第一个一样。所以StringBuffer对象占用的内存比较小,而且他还增加一个插入字符的操作,这就可以在实际应用中解决很多的问题。因为我们知道,无论是字符串还是数组,都是不能进行插入操作的。所以StringBuffer类是一个很好的工具。
后面就是关于正则表达式:正则表达式是描述特定的字符串模式。有特定的规则来表示一些
我对String类的理解。
我认为String在Java中的作用就是Java中所有向外展示的数据都需要转化String类,相当于办公软件中的PDF一样,String是专门为输出而设计的类,所有每一个类中都会有toString方法,几乎每一种基本数据类型也有这个方法,然后String类还有调整输出形式的方法,String.format,可以根据你的所需将String对象的输出形式变成任何你想要输出的形式,最简单二进制输出,八进制输出,到复杂一点数据格式化。String都可以做到,所有很明显,String类就是转为为输出而设计的,几乎任何一个数据要输出都必须转换为String的形式。
String.format方法的各种形式输出
我们以多种形式的日常输出举例子
Date date=new Date();
System.out.println(String.format("%tc",date));
1.日期、时间格式化
在例子中%tc代表输出的形式,date代表时间
具体的输出形式,可以百度,这个不需要记,什么时候用的话,查一下表就可以了。这只是一部分
2.常规类型数据的格式化
同样的形式
然后就说一下关于equals方法
equals是在Object类定义的方法
public boolean equals(Object obj){
return this==obj;
}
这就是最开始定义的equals方法,他与“==”是相同的
表示两个对象是不是同一个对象,若是同一个对象则返回true否则返回false,这里又要提到String类对象的创建
String str1="hello world";
String str2=new String("hello world");
两种创建方法创建的对象是不同的,众所周知,String算是基本数据类型的一种类型,因为可以直接创建就像str1,所以这种创建的String拥有String的特性。str2算是具有对象的数据类型。
String str3="abc";
String str4="abc";
这种创建String类型时与创建基本数据类型相同,系统不会给str4分配新的内存,只是指向str3,
str3==str4;
str3.equals(str4);
前一个返回true,因为两个是相同的,但是第二个方法不一样了,因为在String类中覆盖了了equals方法,覆盖之后,方法内容就是比较两个对象内容是否相同
String str5=new String("abc");
String str6=new String("abc");
str5==str6;
str5.equals(str6);
此时创建的两个对象,在系统中占有两个内存空间,也就是说两个对象指向的不是同一个,所以第一个方法返回值为false,因为他们不是同一个对象,第二个方法返回true,因为他们的内容是相同的。
此时我们就能想到基本数据类型在判断是否相同时用的时什么方法。
包装类
包装类是将几种基本的数据类型包装起来的类,因为存在八种基本数据类型,所以就有八个包装类,每种基本数据类型对应一个包装类。为了与Java的面向对象思想对齐,每种基本数据类型也要有与之对应的对象。所以其实包装类也很容易理解。
包装类常用的几个方法就是不同类型的转换等等。
这里有一个面试被问频率较高的问题,就是什么是自动装箱和自动拆箱?
这个其实就是包装类对象和基本数据类型转换过程。
List<Integer> list=new List<Integer>();//集合类
list.add(2);//自动装箱
int i=list.get(0); //自动拆箱
list集合中应该要放入Integer类型对象,但是直接存入基本数据类型的 2,这时系统自动把2打包转为Integer类型对象,放到集合中这个过程就叫做自动装箱。
反过来就是自动拆箱,将Integer类型数据在集合中取出来,赋给基本数据类型,这个过程中要把Integer类型对象转为基本数据类型,存在一个拆包的过程,所以叫做自动拆箱。
Math类和Random类
Math类在Java中是提供数学运算方法的类。
其中的主要方法有
- abs(),返回绝对值
- ceil():返回大于等于参数的最小整数
- floor():返回小于等于参数的最大整数
- max():返回两个参数的最大值
- min():返回两个参数的最小值
- random():返回0.0到1.0之间的double类型的随机数
- round():返回四舍五入的整数值
等等,还包括我们用的三角函数,正弦函数、余弦函数、正切函数、对数函数、指数函数、根运算、幂运算都包含了。这个就是Math类的方法和作用。
然后就是Random类,这个类是在random方法的基础上进行开发所得出的类。random方法返回一个大一0小于1的double类型的数,但是我们一般都用随机数的时候用的都是比较大的,所以我们需要对random方法进行其他操作来获取我们想要获得的随机数。但是Random类帮助我们解决了这个问题,Random类其实就是采用了random方法来获取我们想要的随机数。
Random类提供了以下几个方法 - nextInt():返回一个Int类型大于0的随机数,
- nextInt(int n):返回一个Int类型大于0小于n的随机数
同样的还有nextLong、nextFloat、nextDouble、nextBoolean方法,作用是相同的,只不过返回类型不同。
以上是我对这几个基本类的理解,均参考官方API文档,若用问题,可查看官方文档