1.Object类
(1)基本概念
java.lang.Object类是所有类层次的结构的根类,任何类都是该类的直接或者间接子类。
(2)常用方法
equals():
- 用于判断调用对象与参数对象是否相等。
- 默认比较两个对象的地址,与==运算符结果相同。
- 为了使该方法比较两个对象的内容,则需要重写该方法。
- 若重写该方法后,必须重写hashCode方法来维护hashCode方法的常规协议。
hashCode():
- 用于获取调用对象的哈希码值(内存地址的编号)
- 若调用equals方法的结果相等/不相等,则各自调用hashCode方法的结果相同/不相同。
- 为了维护上述常规协定与equals方法结果保持一致,就要重写该方法。
toString():
- 用于获取调用对象的字符串形式
- 该方法返回的字符串为:包名.类名@哈希码的十六进制形式
- 为了返回更有意义的数据内容,因此需要重写该方法
- 当使用sout打印对象或者用+连接字符串时,默认使用toString()方法。
2.包装类
(1)基本概念
由于Java语言是一门纯面向对象的语言,而8种基本数据类型声明的变量并不是对象,为了满足Java语言的特性就需要对这些变量进行对象化处理,实现该功能的类就叫做包装类。
(2)包装类的分类
int==>java.lang.Integer类
char==>java.lang.Character类
其他类型对应的包装类就是将首字母变成大写
包装类 | 对应的基本类型 |
---|---|
java.lang.Integer | int |
java.lang.Long | long |
java.lang.Double | double |
java.lang.Character | char |
java.lang.Boolean | boolean |
java.lang.Byte | byte |
java.lang.Float | float |
java.lang.Short | short |
(3)常用方法
以Integer类为例,该类重写了equals(),hashCode(),toString()方法。
- Integer(int value)—根据参数指定的整数构造对象。
- Integer(String s)—根据参数指定的字符串构造对象。
- int intValue()—用于获取调用对象中的整数数据并返回。
- static Integer valueOf(int i)—根据参数指定的整数返回对应的Integer对象。
- static int parseInt(String s)—用于将String类型转换为int类型并返回。
package com.JavaClass.包装类;
public class IntegerTest {
public static void main(String[] args) {
//1.构造Integer类型的对象并打印
Integer it1 = new Integer(10);
//自动调用toString方法得到String类型的返回值
System.out.println("it1 = "+it1); //it1 = 10 String类型的10
Integer it2 = new Integer("10");
//Integer it2 = new Integer("10a");
//编译ok,运行产生"NumberFormatException"数字格式异常,字符串必须为纯数字
System.out.println("it2 = "+it2); //it2 = 20 String类型的20
//2.调用成员方法测试
//----------相当于实现了从Integer类型到int类型的转换,叫做拆箱
int res=it2.intValue();
System.out.println("获取到的整数值:"+res); // 20 int类型的20
//----------相当于实现了从int类型到Integer类型的转换,叫做装箱
Integer it3=Integer.valueOf(res);
System.out.println("it3 = "+it3); //it3 = 20 String类型的20
//----------相当于实现了从String类型到int类型的转换
int res2 = Integer.parseInt("123456");
System.out.println("转换的整数数据是:"+res2); //123456 int
//----------相当于实现了从int类型到String类型的转换
//String str1=String.valueOf(res2);
String str1 =""+res2; //常用!!!
System.out.println("转换的字符串数据是:"+str1); //123456 String
//从jdk1.5开始增加了新特性,自动装箱和自动拆箱
Integer a=10; //自动装箱
int b = a; //自动拆箱
}
}
3.BigDecimal类
(1)基本概念
由于float类型和double类型的运算会有误差,为了实现精确运算则需要借助java.math.BigDecimal类型加以描述。
(2)常用方法
- BigDecimal(String val):根据参数指定的字符串构造对象。
- BigDecimal add(BigDecimal augend):用于计算调用对象和参数对象的和并返回。
- BigDecimal subtract(BigDecimal subtrahend):用于计算调用对象和参数对象的差并返回。
- BigDecimal multiply(BigDecimal multiplicand):用于计算调用对象和参数对象的积并返回。
- BigDecimal divide(BigDecimal divisor):用于计算调用对象和参数对象的商并返回。
package com.JavaClass.BigDecimal;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class BigDecimalTest {
public static void main(String[] args) {
//1.构造BigDecimal类型的对象
BigDecimal bd1 = new BigDecimal("10.8");
BigDecimal bd2 = new BigDecimal("5.4");
//2.实现上述对象的加减乘除操作
System.out.println("计算的和是:"+bd1.add(bd2));
System.out.println("计算的差是:"+bd1.subtract(bd2));
System.out.println("计算的积是:"+bd1.multiply(bd2));
System.out.println("计算的商是:"+bd1.divide(bd2));
//3.测试能否实现精确运算
System.out.println(0.1+0.2); //0.3000000000000004
BigDecimal bd3 = new BigDecimal("0.1");
BigDecimal bd4 = new BigDecimal("0.2");
System.out.println("精确运算:"+bd3.add(bd4)); //0.3
//4.若商无法精确时的处理方法
BigDecimal bd5 = new BigDecimal("1.0");
BigDecimal bd6 = new BigDecimal("0.3");
//System.out.println(bd5.divide(bd6)); //java.lang.ArithmeticException
System.out.println(bd5.divide(bd6, RoundingMode.HALF_UP)); //四舍五入
//练习:使用两种方式实现将字符串"12345"转换为整数12345
//方式一:调用Integer类中的parseInt方法进行转换
String str1 = new String("12345");
int a1=Integer.parseInt(str1);
System.out.println("转换后的结果:"+a1);
//方式二:取出字符串中的每个字符并转换为整数数据再合并起来
// '1'-48=>1 '2'-48=>2 '3'-48=>3
// '1'-'0'=>1 '2'-'0'=>2 '3'-'0'=>3
int res=0;
for (int i = 0; i < str1.length(); i++) {
res=res*10+(str1.charAt(i)-'0'); //res=1;res=12;res=123...
}
System.out.println("转换后的结果:"+res);
}
}
4.String类
(1)基本概念
- java.lang.String类用于描述字符串,java应用程序中所有字符串字面值都可以作为String类型的对象加以描述,如"abc"等。
- 该类使用final修饰,不可以被继承,所有属性也都是final。
- 该类描述的字符串内容是个常量,一旦创建完毕后就不能更改,因此可以共享。(引用对象可以变,String对象不变!)
- 不可变性,拼接、裁剪字符串等动作都会产生新的String对象。
- 如果字符串操作频繁,相关操作的效率往往对应用性能有明显影响。
(2)常量池
由于String类型描述的字符串是个常量不可改变,因此java虚拟机提供了一个常量池,当java程序中出现字符串内容时就放入常量池,若后续出现重复的字符串内容就直接使用池中已有的对象而不需要再次创建,从而节省空间,提高性能。
package com.javaClass.String;
public class StringPoolTest {
public static void main(String[] args) {
String str1="abc";
String str2="abc";
String str3="123";
System.out.println(str1==str2); //关系运算符比较地址 true
System.out.println(str1==str3); //false
String str4= new String("abc");
System.out.println(str4==str1); //使用new关键字将会创建新的String对象 false
}
}
(3)常用方法
- char charAt( int index):方法用于返回调用对象字符串制动位置的字符,index表示指定的位置。
- int length():返回字符串序列的长度。
- boolean contains(CharSequence s):用于判断当前字符串是否包含参数指定的内容。
- String toLowerCase():返回字符串小写形式。
- String toUpperCase():返回字符串大写形式。
- String trim():返回去掉前导和后继空白的字符串。
- boolean startsWith(String prefix):判断字符串是否以参数字符串开头。
- boolean endsWith(String suffix):判断字符串是否以参数字符串结尾。
- boolean equals(Object anObject):用于将字符串与指定的对象比较。
- int indexOf(String str): 返回指定子字符串在此字符串中第一次出现处的索引。
- int indexOf(String str, int fromIndex): 返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
- String substring(int beginIndex, int endIndex):返回一个子字符串,前闭后开。
- String replace(char oldChar, char newChar):返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
5.StringBuilder类
(1)基本概念
由于String类型描述的字符串内容是个常量不可更改,当程序中出现大量类似字符串时需要单独存放从而浪费内存空间,若希望使用一块内存空间进行存储并且可以修改字符串内容,则应该使用StringBuilder类和StringBuffer类。
(2)特点
- 能力上和StringBuffer没有本质区别。
- 单线程操作字符串,效率高。
- 通过去掉线程安全的部分,有效减小了开销。
- 绝大部分情况下进行字符串拼接的首选。
(3)常用方法
- StringBuilder append(String str):追加字符串
- StringBuilder insert(int offset, String str):插入字符串
- StringBuilder delete(int start, int end):删除字符串
- StringBuilder replace(int start, int end, String str):替换字符串
- StringBuilder reverse():逆转字符串
StringBuilder的很多方法的返回值均为StringBuilder类型,这些方法的返回值语句均为:return this。
可见,这些方法在对StringBuilder所封装的字符串序列进行改变后又返回了该对象的引用。基于这样设计的目的在于可以按照如下简洁的方式写代码:
str.append(“ibm”).append(“java”).insert(3,“oracle”).replace(9,13,“JAVA”);
6.StringBuffer类
(1)基本概念
通过JDK提供的API,可以看出StringBuffer类是线程安全的可变字符序列。
(2)特点
- 为解决String类拼接产生太多中间对象的问题而提供的一个类。
- 可以用append或者add方法,把字符串添加到末尾或者指定位置。
- 多线程操作字符串
- 是一个线程安全的可修改字符序列。
- 保证了线程安全,带来了额外的性能开销。
(3)常用方法
StringBuffer和StringBuilder在使用上几乎一样,常用方法基本相同,不再过多阐述。
7.Date类
(1)基本概念
java.util.Date类用于描述特定的瞬间,精确到毫秒
(2)常用方法
- Date():分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)。
- Date(long date):分配 Date 对象并初始化此对象,以表示从1970年1月1日00:00:00以来的指定毫秒数。
- long getTime():返回自1970年1月1日00:00:00以来,此 Date对象表示的毫秒数。
- void setTime(long time):设置此 Date 对象,以表示1970年1月1日00:00:00以后time毫秒的时间点。
package com.JavaClass.Date;
import java.util.Date;
public class DateTest {
public static void main(String[] args) {
//1.使用无参构造date对象并打印时间
Date d1 = new Date();
System.out.println("d1="+d1); //输出创建对象时的时间:d1=Mon Oct 18 16:50:34 CST 2021
//2.使用参数指定的毫秒数来构造对象并打印
Date d2 = new Date(1000); //1000毫秒
System.out.println("d2="+d2); //从1970.1.1开始计算
//3.成员方法
long msec =d1.getTime();
System.out.println("当前系统时间距离1970.1.1.0时0分0秒"+msec+"毫秒");
d1.setTime(2000); //设置时间1970.1.1.0时0分2秒
}
}
8.Random类
(1)基本概念
Random类专门用于生成一个伪随机数,它有两个构造器:一个构造器使用默认的种子(以当前时间作为种子),另一个构造器需要程序员显示传入一个long型整数的种子。
(2)常用方法
- public boolean nextBoolean():生成一个随机的boolean值,生成true和false的值几率相等,也就是都是50%的几率。
- public double nextDouble():生成一个随机的double值,数值介于[0,1.0)之间。
- public double nextFloat():生成一个随机的float值,数值介于[0,1.0)之间。
- public int nextInt():生成一个随机的int值,该值介于int的区间,也就是 -2147483648——2147483647之间。
- public int nextInt(int n):生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。
- public void setSeed(long seed):重新设置Random对象中的种子数。设置完种子数以后的Random对象和相同种子数使用new关键字创建出的Random对象相同。