JavaSE之常用类知识点总结
一、数据类型常用类及其常用方法
1.Object
(1)所在包:java.lang.Object
(2)描述:Object是类层次结构的根类。每个类都使用 Object 作为超类。
(3)Class(java.lang.Class):正在运行的字节码文件
public String getName():以字符串展示字节码文件对象所表示的实体
2.常用方法
(1)public final Class getClass()
作用:获取当前正在运行的类的字节码文件对象。
(2)public String toString()
作用:返回该对象的字符串表示,以一个文本格式体现出来的简明易于读懂的信息表达式。
(3)public int hashCode()方法
作用:返回该对象的哈希码值,理解为地址值(不是实际意义的地址)
(4)public boolean equals(Object obj)
作用:比较调用该方法的对象与obj对象的地址值是否 “相等”。
(5)protected Object clone() throws CloneNotSupportedException
定义:克隆方法,创建并返回此对象的一个副本。
前提:使用此方法的对象的类需要实现接口Cloneable,则会抛出CloneNotSupportedException。
作用:一个类实现 Cloneable 接口,以指示 Object.clone() 方法合法地对该类实例进行按字段(成员变量)复制。
(6) protected void finalize()throws Throwable
使用:垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。
3.String
(1)定义:String类代表字符串。
(2)特点:字符串是常量,它们的值在创建之后不能更改(常量的地址值)。
(3)对象创建方式:String str = “abc” ;
Student s = new Student() ;
(4)注意:
1)String类型如果作为参数传递,形参的改变不会影响实际参数。
2)null:对象为空。
3)"":空字符序列。
4)字符串底层的存储:将字符串转为字符数组存储。
5)字符串遍历:将字符串中的每一个字符获取到。
4.String类型的常用方法
(1)构造方法
1)public String():无参构造方法
作用:创建一个字符串对象空字符序列。
2)public String(byte[] bytes)
作用:使用平台的默认编码集,将字节数组转换构造出String类型。
3)public String(char[] value)
作用:将字符数组构造成一个字符串对象。
4)public String(String original):
作用:将一个字符串值存储进来,创建一个字符串对象
(2)判断方法
1)public boolean equals(Object anObject)
作用:比较两个字符串内容是否相同
2)public boolean equalsIgnoreCase(String anotherString)
作用:不区分大小写比较
3)public boolean startsWith(String prefix)
作用:判断是否以指定的子串开头
4)public boolean endsWith(String suffix)
作用:判断是否以指定的子串结尾
5)public boolean isEmpty()
作用:判断字符串是否为空
(3)获取方法
1)int length()
作用:获取字符串长度。
2)public char charAt(int index)
作用:获取指定索引处的字符。
3)public String concat(String str)
作用:字符串拼接功能:使用当前字符串和指定str字符串进行拼接。
4)public int indexOf(int ch)
作用:获取指定字符在此字符串中第一次出现索引值。
5)public int indexOf(String str)
作用:获取指定字符串在此字符串中第一次出现索引值。
(4)转换方法
1)public char[] toCharArray()
作用:将字符串转换成字符数组。
2)public byte[] getBytes()
作用:将字符串转变成字节数组。
3)public static String valueOf(XXX xx)
作用:可以将任何类型的数据转换成String。
4)public String toUpperCase()
作用:将此字符串转换成大写。
5)public String toLowerCase()
作用:将此字符串转换成小写。
(5)截取方法
1)public String substring(int beginIndex)
作用:从指定位置开始截取,默认截取到末尾
2)public String substring(int beginIndex,int endIndex)
作用:从指定位置开始截取,到指定位置结束,但是包含beginIndex,不包含endIndex索引(包前不包后)
(6)替换方法
1)public String replace(char oldChar,char newChar)
作用:将以前的字符用新的字符替换掉。
2)public String replace(String oldStr,char newStr)
作用:将以前的字符串用新的字符串替换掉。
(7)去空格方法
public String trim()
作用:去除两端空格
(8)比较字符串大小
public int compareTo(String anotherString)
作用:按照先字符的ASCII码值大小顺序比较 ,部分内容一样,使用调用者的长度减被比较者的长度。
(9)分割方法
public String[] split(String regex)
通过指定的字符串进行分割,返回值字符串数组。
5.StringBuffer
(1)定义:线程安全的可变字符序列 ,提供字符串缓冲区。
(2)特点:线程安全,同步的,执行效率低。
(3)注意事项:不能将String类型的值直接赋值给一个StringBuffer类型。
6.StringBuffer的常用方法
(1)构造方法
1)public StringBuffer():
作用:空参构造,初始容量为 16 个字符。
2)public StringBuffer(String str)
作用:构造一个缓冲区,指定字符串内容到缓冲区中,容量大小等于16个+当前字符串的实际长度。
3)public StringBuffer(int capacity)
作用:指定容量大小,构造一个缓冲区。
(2)获取长度的方法
1)int length()
作用:获取缓冲区中字符数。
2)public int capacity()
作用:获取缓冲区的容量大小。
(3)添加方法
1)public StringBuffer append(任何类型数据…)
作用:将任何类型的数据追加到缓冲区末尾。
2)public StringBuffer insert(int offset,String str/任何类型数据)
作用:将某个元素插入到指定位。
(4)删除方法
1)public StringBuffer deleteCharAt(int index)
作用:删除指定位置处的字符,返回缓冲区本身
2)public StringBuffer delete(int start,int end)
作用:删除从指定开始位置到指定结束位置(包前不包后)
(5)反转方法
public StringBuffer reverse()
作用:将缓冲区中的字符进行反转。
(6)截取方法
1)public String substring(int start)
作用:从指定位置开始截取,默认截取到末尾。
2)public String substring(int start, int end)
作用:从指定位置开始截取,截取到指定位置结束。
(8)替换方法
public StringBuffer replace(int start,int end, String str)
作用:从指定位置开始到指定位置结束(end-1处),使用str子串进行替换。
7.Integer
(1)概念:int类型的包装类(引用类型),包含了int类型的值。
(2)成员变量(字段)
最小值:public static final int MIN_VALUE
最大值:public static final int MAX_VALUE
(3)构造方法
Integer(int value)
作用:将int类型包装了Integer类型
Integer(String s)
作用:将字符串内容包装Integer类型
(4)进制转换方法
public static String toBinaryString(int i)
作用:将整数值以"二进制"文本形式体现。
public static String toOctalString(int i)
作用:将整数值以"八进制"文本形式体现。
public static String toHexString(int i)
作用:将整数值以"十六进制"文本形式体现。
(5)注意事项:
构造方法中的String必须是一个数字字符串,否则出现异常。
8.Character
(1)概念:char类型的包装类类型,包含一个char类型的值。
(2)构造方法
public Character(char value)
(3)判断功能:
1)public static boolean isDigit(char ch)
作用:判断当前字符是否是数字字符。
2)public static boolean isLowerCase(char ch)
作用:判断当前字符是否是小写字母字符
3)public static boolean isUpperCase(char ch)
作用:判断当前字符是否是大写字母字符。
二、常用工具类及其常用方法
1.Scanner
(1)一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。
(2)构造方法:public Scanner(InputStream source)
(3)形式参数:
抽象类:java.io.InputStream:字节输入流(用来读取字节数)
(4)常用方法
1)public boolean hasNextXXX():判断当前是否是执行XXX类型
public boolean hasNextInt()
作用:判断接收的类型是否是int类型。
public boolean hasNextLine()
作用:判断接收的数据是否是一个String类型。
2)public XXX nextXXX() :接收指定XXX类型
public int nextInt()
作用:接收指定的int类型的数据
public String nextLine()
作用:接收一个String类型
2.Math
(1)包:java.lang.Math
(2)描述:包含用于执行基本数学运算的方法,如初等指数、对数、平方根 和三角函数。
(3)常用方法
1)public static double abs(double a/…)
作用:求某个数据的绝对值。
2)public static double ceil(double a)
作用:向上取整。
3)public static double floor(double a)
作用:向下取整
4)public static int min(int a, int b)
作用:求两个int数据的最小值。
5)public static int max(int a,int b)
作用:求两个int数据的最大值。
6)public static double random()
作用:随机数[0.0,1.0)
7)public static int round(float a)
public static long round(double a)
作用:四舍五入…
8)public static double sqrt(double a)
作用:开根(一个正整数的平方根)4—2
9)public static double pow(double a,double b)
作用:返回结果:a的b次幂。
3.日历类
(1)包:java.util.Calendar类。
(2)描述:Calendar类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。
(3)Calendar不能直接实例化。
public static Calendar getInstance()
作用:返回该抽象类的子类对象。
(4)成员方法:
1)public int get(int field)
作用:获取的日历字段的值。
2)public abstract void add(int field,int amount)
作用:给日历字段添加或者减去时间偏移量。
应用:日历对象.add(Calendar.DATE,-5):当前日历时间的5天前。
3)public final void set(int year,int month, int date)
作用:设置当前年月日,日历时间
4.Date
(1)包:java.util.Date类。
(2)描述:特定的瞬间,精确到毫秒。
(3)构造方法:
public Date() 无参构造
(4)成员方法:
public long getTime()
作用:返回1970 年 1 月 1 日所表示的时间毫秒。
(5)应用场景:String日期文本和Date日期格式的相互转换。
5.SimpleDateFormat
(1)包:java.text.SimpleDateFormat
(2)描述:可以将日期格式和日期文本相互转换。
(3)构造方法
public SimpleDateFormat(String pattern):
参数:指定一个模式要遵循一定的规则
(4)组成模式的字符
字符 | 表示 | 使用 |
---|---|---|
y | 年 | yyyy |
M | 年中月份 | MM |
d | 月中的天数 | dd |
h | 表示上午/下午的小时数 | hh |
H | 一天中的小时数 | HH |
m | 分钟数 | mm |
s | 秒数 | ss |
(5)模式
“yyyy-MM-dd HH:mm:ss”
“yyyy年MM月dd日 HH时mm分ss秒”
6.System
(1)描述:System 类包含一些有用的类字段和方法。它不能被实例化。
(2)字段:
public static final InputStream in :标准的"输入流"
public static final PrintStream out :标准的"输出流"
(3)成员方法:
1)public static void gc()
作用:运行垃圾回收器(手动开启),实际开发中,开发者不需要开启。
运行垃圾回收器,它会调用Obejct类finalize(),回收没有更多引用的对象。
2)public static void exit(int status)
作用:参数状态为0,表示正常终止jvm。
3)public static long currentTimeMillis()
作用:获取当前系统时间的毫秒值。
4)public static void arraycopy(Object src, int srcPos, Object dest,int destPos, int length)
作用:从原数组中的指定位置开始,进行复制指定length长度复制到目标数组中的某个位置。
参数:
参数1:指定源数组
参数2:源数组中的某个位置
参数3:目标数组对象
参数4:目标数组对象中的某个位置
参数5:指定几个元素复制(长度)
7.Random
(1)包:java.util.Random
(2)描述:随机数生成器
(3)构造方法
public Random()
作用:产生的随机数是变化的(推荐)。
public Random(long seed)
作用:每次产生的随机数 是固定的。
(4)成员方法:
public int nextInt()
作用:获取的是int范围内的随机数。
public int nextInt(int n)
作用:获取0到n之间的随机数[0,n)。
(5)获取随机数两种方式:
Math类的random()方法: 返回值double类型。
Random类空参构造+nextInt(int n):获取随机数。
8.BigDecimal
(1)包:java.math.BigDecimal
(2)描述:对浮点类型的数据进行精确计算的。
(3)构造方法:
public BigDecimal(String val)
字符串必须是"数字字符串"。
(4)成员方法:
public BigDecimal add(BigDecimal augend) :求和
public BigDecimal subtract(BigDecimal subtrahend):减法
public BigDecimal multiply(BigDecimal multiplicand):乘法
public BigDecimal divide(BigDecimal divisor)除法
三、常见问题
1.获取字节码文件的方式
方式1:Object类中getClass()方式
方式2:任意Java类型class属性,类名.class。
2.final和finalize的区别
final:状态修饰符,最终的,无法更改的。
修饰类,类不能被继承。
修饰变量,此时变量是一个常量。
修饰成员方法,该方法不能重写。
finalize:是的一个方法
在手动开启垃圾回收器调用gc()时执行finalize()方法,可以将没有更多引用的对象回收掉。
3.==和equals的区别
(1)==:类型一致
如果是两个基本数据类型,比较两个变量数据值是否相同。
如果是两个引用类型,比较的是两个对象的地址值是否相同。
(2)equals方法:
子类重写之前,默认比较的是地址值是否相同。
子类重写之后,比较的是两个对象的内容是否相同。当此方法被重写时,通常有必要重写 hashCode方法。
4.重写的equals方法中的列业务判断
判断地址值是否相同;
判断传进来的对象是否为空;
判断两个类型是否是同一个类型;
将Object向下转型为调用该方法的对象的类型;
判断两个对象中内容是否相同;
结果:不相同false,相同true。
5.键盘录入的细节问题
(1)先录入int类型,再录入String类型,使用nextLine()方法接收。
1)问题:当字符串录入数据,值就被漏掉了,原因是回车符号本身是字符串。
2)解决:在下一次录入String类型前,再创建一个Scanner类型对象。或使用next()方法接收。
3)建议:为了使用方便,全都使用String类型接收。然后将接收的其他类型数据转为目标类型。
(2)java.util.InputMismatchException
1)异常原因:当前录入的数据和接收的标记类型不匹配。
2)解决:使用hasNextXXX()方法进行判断,为true使用nextXXX()方法接收。
6.String类型创建对象的区别
以下s1和s2实际含义
常量赋值:String s1 = “hello” ;
堆内存中申请空间:String s2 = new String(“hello”) ;
(1)前者:创建的是一个对象。
(2)常量赋值的过程:直接在方法区的常量池中,先查看是否存在常量"hello",如果存在"hello",将地址值赋值给它,如果不存在,在常量池中 开辟空间。
(3)后者:创建两个对象
new XXX ():堆内存
“hello”:常量池中
(4)过程:先在堆内存中开辟空间,然后进行成员变量显示初始化,在常量池中查看是否存在常量”hello”,如果存在"hello",将地址值赋值给成员变量,如果不存在,在常量池中开辟空间。
(5)共同点:s1和s2 :都是表示"hello"字符串。
7.String类型相加
(1)字符串变量相加:先去开辟空间(新对象),然后再字符串相加,组合成新字符串。
(2)常量相加:先相加,然后在常量池中看是否存在这个值,如果存在直接返回地址,如果不存在开辟空间,进行存储。
8.StringBuffer和数组
(1)相同点:他们两者都属于引用类型,而且都是"容器"。
(2)区别:
StringBuffer: 可变的字符序列 (长度可变的)
里面可以存储任何数据类型,需要以"字符"进行拼接通过append追加。
数组: 长度固定,只能存储同一种类型的元素。
9.StringBuffer和StringBuilder
(1)共同点:两者之间互相兼容的,方法是相同的。
(2)区别:
StringBuffer:可变的字符序列
线程角度:线程安全的,同步的,执行效率低。
StringBuilder:可变的字符序列
线程角度:线程不安全的,不同步的,执行效率高。
(3)注意:在单线程程序中,StringBuilder去替换StringBuffer,因为效率高。
10.StringBuffer和String类型作为形式参数的区别
(1)相同点:两个都是引用类型
(2)区别:
String类作为形式参数,形参改变,实参不受影响。
StringBuffer/StringBuilder,他们作为形式参数,形式参数的改变 会直接影响实际参数。
11.基本类型的包装类
基本数据类型 | 包装类 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
四、类型转换
1.String与StringBuffer的相互转换
(1)String转StringBuffer
String s=”word”
1)方式1:通过StringBuffer构造方法:StringBuffer(String str)
StringBuffer sb = new StringBuffer(s) ;
2)方式2:StringBuffer()无参构造+append(String str):追加
StringBuffer sb2 = new StringBuffer() ;
sb2.append(s) ;
(2)StringBuffer转String
StringBuffer buffer = new StringBuffer(“hello”) ;
1)方式1
public String(StringBuffer buffer):String类型的构造方法。
String str = new String(buffer) ;
2)方式2:StringBuffer调用public String toString()
String str2 = buffer.toString() ;
(3)应用:将字符串进行反转
1)将String转为StringBuffer类型。
2)才能使用StringBuffer的反转功能,反转字符序列。
3)再将StringBuffer转为String。
2.int与String的转换
(1)int转String
1)方式1:空串拼接
2)方式2:int转Integer,Integer转String (toString())
Integer i =20;
String str = i.toString();
3)方式3静态功能:public static String toString(int i)
(2)String转int
1)方式1:public static int parseInt(String s)(常用)
2)方式2:将String转Integer
public static Integer valueOf(String s)
将Integer转int
public int intValue();
3.String文本格式和Date日期格式相互转换
(1)"格式化"操作:Date转String 日期文本格式
1)创建Date对象,获取当前日期格式的时间表达方式;
2)创建SimpleDateFormat对象,并传入日期模式字符串;
3)通过SimpleDateFormat的对象调用format(Date date)方法,将Date对象格式化为String类型,使用String类型的引用接收。
(2)解析:String转Date
1)定义一个日期文本;
2)创建SimpleDateFormat对象,并传入与日期文本格式相同的日期模式字符串;
3)通过SimpleDateFormat的对象调用parse(String source)方法,将 日期文本解析为Date类型,使用Date类型的引用接收,并抛异常。
4)注意:
SimpleDateFormat中的参数模式:必须和String 日期文本格式一致,否则出现解析异常(ParseException)。
五、其他知识点
1.debug断点调试
(1)作用:当程序出问题了,可以通过断点调试,查看整个代码中,变量的变化/查看对象是否null等。
(2)应用:程序出问题了,如果可以通过检查代码,能够发现问题,直接更改代码。如果半天找不到错误,在当前错误行代码的前一俩行或者当前行中直接打断点(行号位置,双击)。
(3)debug模式运行java程序:右键–>debug As–>Java application
(4)debug中的快捷键
f6:下一行代码
f5:可以进入到一些相关类的源码(构造方法/成员方法…)。
f7:从源码中回到指定的位置处。
2.Jdk5中的新特性
(1)自动拆装箱:
1)自动装箱: 就是将基本数据类型自动转换成对应的包装类。
基本类型----引用类型: 自动装箱 int---->Integer
2)自动拆箱:就是将包装类自动转换成对应的基本数据类型。
引用类型—基本数据类型 : 自动拆箱 :Integer --int
3)结论:自动装箱都是通过包装类的valueOf()方法来实现的.自动拆箱都是通过包装类对象的xxxValue()来实现的。
(2)静态导入
1)动态导入:
import 包名.类名;
举例:import java.util.Date/Scanner/List/ArrayList…
2)静态导入的格式:
import static 包名.类名.方法名;
3)前提:这些方法是静态的。
4)注意事项:
如果当前类中出现了和导入的静态方法名一样,冲突了,在使用静态导入的这个方法的时候,就必须带上限定(包名.类名)。
总结
本文主要从数据类型常用类、常用工具类以及其常用方法、常见问题、类型转换等方面总结了JavaSE常用类部分的知识点。