与运行环境交互之常用类

本内容将介绍java提供的一些常用类。如:String、Math、BigDecimal等。

Object类

Object类是所有类、数组、枚举类的父类,也就是说,java允许把任何类型的对象赋给Object类型的变量。当定义一个类时没有使用extends关键字为它显式指定父类,则该类默认为继承Object父类。

因为所有的java类都是Object类的子类,所有任何java对象都可以调用Object类的方法。Object类提供了以下几个常用方法:
(1)boolean equals(Object object):判断指定对象与该对象是否相等。此处相等的标准是,两个对象是同一个对象,因此该equals方法通常没有太大的实用价值。
(2)protected void finalize():当系统中没有引用变量引用到该对象时,垃圾回收器调用此方法来清理该对象的资源。
(3)ClassgetClass():返回该对象的运行时类 。
(4)int hashCode():返回该对象的hashcode值,在默认情况下,Object类的hashCod()方法根据该对象的地址来计算,即与System.identityHashCode(Object x)方法的计算结果相同,但很多类都重写了该方法,不再通过对象地址来计算。
(5)String toString():返回该对象的字符串表示,当我们使用System.out.println()方法输出一个对象或者把这个对象和字符串进行连接运算时,系统会自动调用该对象的toString()方法返回该对象的字符串表示。

除此之外,Object类还提供了wait()、notify() 、notifyAll()几个方法控制线程的运行和暂停,后续多线程的文章进行讲解。

java还提供了一个protected修饰的clone()方法,该方法用于帮助其他对象来实现“自我克隆”,就是得到一个当前对象的副本,而且两者之间完全隔离,且该方法只能被子类重写或调用。
自定义类实现克隆的过程:
(1)自定义类实现Cloneable接口,这是一个标记性的接口,实现该接口的对象可以实现“自我克隆”;
(2)自定义类实现自己的clone方法;
(3)实现clone()方法时通过super.clone();调用Object实现的clone()方法来得到该对象的副本,并返回该副本。
如下程序示范了如何自我克隆:


image.png

Object类提供的Clone机制只对对象里各实例变量进行“简单复制”,如果实例变量的类型是引用类型,Object类的Clone机制也只是简单复制这个引用变量,这样原有对象的引用类型的实例变量与克隆对象的引用类型的实例变量依然指向内存中的同一个实例,所以第一个输出false,第二个输出true。


image.png

String、StringBuffer、StringBuilder类

String类是不可变类,即一旦一个String对象被创建后,包含在这个对象中的字符序列是不可改变的,直到这个对象被销毁。

String提供了大量的构造器来创建String对象,其中如下几个有特殊用途:
(1)String():创建一个包含0个字符串序列的String对象。(并不是返回null)
(2)String(byte[] byte,Charset charset):使用指定的字符集,将指定的byte[]数组解码成一个新的String对象。
(3)String(byte[] bytes,int offset,int length):使用平台的默认字符集将从指定的byte[]数组的offset开始,长度为length的子数组解码成一个新的String对象。
(4)String(byte[] bytes,int offset,int length,String charsetName):使用指定的字符集将指定的byte[]数组从offset开始,长度为length的子数组解码成一个新的String对象。
(5)String(byte[] bytes,String charsetName):使用指定的字符集将指定的byte[]数组解码成一个新的String对象。
(6)String(char[] value,int offset,int count):将指定的字符数组从offset开始,长度为count的字符元素连缀成字符串。
(7)String(String original):根据字符串直接量来创建一个String对象,也就是说,新创建的String对象是该参数字符串的副本。
(8)String(StringBuffer buffer):根据StringBuffer对象来创建对应的String类。
(9)String(StringBuilder builder):根据StringBuilder对象来创建对应的String类。

String类也提供了大量的方法来操作字符串对象,如下:
(1)char charAt(int index):获取字符串中指定位置的字符。字符串的序数从0开始到length-1。
(2)int compareTo(String anotherString):比较两个字符串的大小。如果两个字符串的字符序列相等,则返回0,不相等时,从两个字符串第0个字符开始比较,返回第一个不想等的字符差。另一种情况,较长字符串的前面部分恰巧是较短的字符串,则返回它们的长度差。
(3)String concat(String str):将该String对象与str连接到一起。
(4)boolean conentEquals(StringBuffer sb):将该String对象与StringBuffer对象做对比,当它们包含的字符串序列相同时返回true;
等等。

StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列,一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()将其转换成一个String对象。

JDK1.5之后出现了StringBuilder类,也代表字符串类,StringBuilder和StringBuffer基本相似,但StringBuffer是线程安全的,而StringBuilder没有实现线程安全功能,所以性能略高。因此如果想要创建一个内容可变的字符串对象,优先选择StringBuilder。

Math类

Math类是一个工具类,它的构造器被定义为private的,因此无法创建Math类的对象,Math类中的所有方法都是类方法,可以直接通过类名来调用它们。除了提供方法外,还提供了两个成员变量:PI和E。
下面程序示范了Math类的用法:


image.png

toDegrees():将弧度转换角度
toRadians() :将角度转换为弧度
acos():计算反余弦,返回的角度范围在 0.0 到 pi 之间
asin():计算反正弦,返回的角度范围在 -pi/2 到 pi/2 之间
atan():计算反正切;返回的角度范围在 -pi/2 到 pi/2 之间
cos():计算余弦
cosh():计算双曲余弦
sin():计算正弦
sinh():计算双曲正弦
tan():计算正切
tanh():计算双曲正切
atan2(x, y):将矩形坐标转换成极坐标
floor():取整,返回小于目标数的最大整数
ceil():取整,返回大于目标数的最小整数
round():四舍五入取整
sqrt():计算平方根
cbrt():计算立方根
exp():返回欧拉数 e 的n次幂
hypot(x,y):返回 sqrt(x2 + y2)
IEEEremainder(x,y):按照 IEEE 754 标准的规定,对两个参数进行余数运算
pow():计算乘方
log():计算自然对数
log10():计算底数为 10 的对数
log1p():返回参数与 1 之和的自然对数
abs():计算绝对值
max(x,y):计算最大值
min(x,y):计算最小值
random():返回一个伪随机数,该值大于等于 0.0 且小于 1.0

你可能感兴趣的:(与运行环境交互之常用类)