常用API
常用API
1.Object类
Object类是所有类以及数组的顶层父类
a)toString方法:返回当前对象的字符串表示
Object类的toString方法,结果表示对象的内存地址,没有意义,需要重新打印对象的属性值
组成:getClass().getName() + '@' + Integer.toHexString(hashCode())这几部分组成.
1)getClass().getName() 表示类的完全限定名.
2)hashCode() 表示根据内存地址通过哈希算法生成的哈希码值.
3)Integer.toHexString() 表示无符号十六进制的字符串表示形式.
package com.thoka.object;
public class Demo1 {
public static void main(String[] args) {
Object o = new Object();
//java.lang.Object@1b6d3586
System.out.println(o);
//java.lang.Object@1b6d3586
System.out.println(o.getClass().getName()+"@"+Integer.toHexString(o.hashCode()));
}
}
b)equals方法:比较两个对象是否相等
在Object类型中,比较的是两个引用是否指向了同一个对象.如果 是,才返回true.相当于是在比较两个对象的地址值是否相同. 实际生活中,比较两个对象的内存地址,没有什么意义.因此在自定义的子类中,都要重写这个方法. 一般比较两个对象中的所有属性,是否全部相同.
2.String类
属于java.lang包,不需要导包.
字符串字面值属于常量,存储在方法区的常量池中,在创建之后就无法更改(是一个不可
变的字符序列).但是它们可以被共享.
字符串在效果上,可以看做是字符数组,但实质上是字节数组.
private final char value[];
常用方法
-
length() : 获取到一个字符串中的字符个数(字符串的长度) , 返回值类型int
-
charAt(int index): 将字符串中指定的index索引位置上对应的字符获取到,返回值类型char
-
subString(int beginIndex): 截取出字符串的一部分,从beginIndex索引开始, 到最后的全部字符序列取出来, 返回值结果,新的字符串String
-
subString(int beginIndex, int endIndex) : 从beginIndex到endIndex-1之间的字符序列截取成一个新的字符串, 返回值结果String
注意 : JDK的方法中, 如果是对于两个索引位置进行操作, 通常包括开始索引, 不包括结束索引 -
indexOf(String str) : 获取参数字符串str在方法调用字符串中第一次出现的索引位置
返回值类型int, 如果没有找到参数str存在位置, 返回-1 -
indexOf(String str, int formIndex):返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索, 返回值类型int, 如果没有找到参数str存在位置, 返回-1
-
lastIndexOf(String str) : 获取参数字符串str在方法调用字符串中最后一次出现的索引位置
返回值类型int, 如果没有找到参数str存在位置, 返回-18.byte[] getBytes():将当前字符串,转成字节数组
-
char[] toCharArray():将当前的字符串,转成字符数组
-
toUpperCase():将当前的字符串,转成全大写形式
-
toLowerCase():将当前的字符串,转成全小写形式
-
static valueOf家族:可以将任意数据类型的数据,转换成字符串
13、replace(String oldStr, String newStr):将调用者中的老串替换成新串,返回值为替换后的新字符串
14、split(String regex): 将字符串按照参数字符串regex规则进行切割, 结果是一个String[]
15、trim():去掉字符串左右两边的空格、制表符
字符串的equals方法
String类里的equals()方法重写了,比较的是数值是否相等
package com.tohka.string;
public class demo1 {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc");
String s4 = new String("abc");
String s5 = "a" +"b" +"c";
String s6 = "ab";
String s7 = "c";
System.out.println(s1 == s2); //true
System.out.println(s1 == s3); //false
System.out.println(s1 == s5); //true
System.out.println(s3 == s4); //false
System.out.println(s1.equals(s2)); //true
System.out.println(s3.equals(s4)); //true
System.out.println(s1.equals(s5)); //true
System.out.println(s1 == s6+s7); //false 注意这里是变量,开辟新的空间
}
}
3.StringBuilder
StringBuilder是一个可变的字符序列,因为在类中提供了修改私有成员变量的方法
StringBuilder底层和String类型一样,也是维护了一个字符数组,数组是私有的,外界无法直接访问
String类型和StringBuilder的关系:都是用于描述字符串
1) String是不可变的字符序列,没有提供修改私有成员的方法;StringBuilder是可变的字符序列,因为提供了修改成员变量的方法;
2) String长度本身也不可以变化,StringBuilder长度可以变化,可以认为StringBuilder就像一个可以伸缩的容器,用于存储字符
构造方法:
StringBuilder():创建一个生成器,初始容量为16个字符
StringBuilder(int capacity):创建一个生成器,初始容量为capacity大小
StringBuilder(String str):创建一个生成器,初始值就是str这些字符,初始大小是str+16
常用方法:
1、capacity():获取当前生成器的容器大小
2、length():获取当前生成器中的实际字符个数
3、append(任意类型):可以将任意数据类型,转成字符,添加到生成器中
4、insert(int index, 任意数据类型):可以将任意数据类型,添加到指定的位置
5、deleteCharAt(int index) :删除指定索引的字符
6、delete(int startIndex, int endIndex):删除指定范围的字符,被删除的部分包含头不包含尾
7、replace(int startIndex, int endIndex ,String str):
将字符串缓冲区中的从start开始到end-1这部分内容,替换成str
8、reverse():将原有字符序列进行反转
4.基本数据类型的包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
a)Integer常用方法
1、xxxValue():可以将Integer类型的对象,转成其他的基本数据类型:
例如:byteValue()、floatValue()
2、常用静态方法:
parseInt(String str):将str以十进制的方式解读为一个int数
b)Integer类型的常量
1、MAX_VALUE:int类型的最大值
2、MIN_VALUE:int类型的最小值
5.大数据类型
1.BigInteger类及其常用方法
如果超出了long类型的范围,就用BigInteger
构造方法
BigInteger(String val): 将指定字符串转换成BigInteger对象
BigInteger类常用方法
-
BigInteger abs(): 返回BigInteger对象的绝对值,返回值结果BigInteger
-
BigInteger negate(): 取该对象的相反数
-
BigInteger add(BigInteger val): 加法
-
BigInteger subtract(BigInteger val): 减法
-
BigInteger multiply(BigInteger val): 乘法
-
BigInteger divide(BigInteger val): 除法
2.BigDecimal类及其常用方法
浮点数类型,有精度损失问题.为了解决这种问题,在java中引入了BigDecimal, 进行浮点类型精确计算
构造方法:
-
BigDecimal(double val): 将double类型的数据转换成BigDecimal对象
-
BigDecimal(String val): 将String类型的数据转换成BigDecimal对象
BigDecimal类常用方法
-
BigDecimal add(BigDecimal augend): 加法
-
BigDecimal subtract(BigDecimal subtrahend): 减法
-
BigDecimal multiply(BigDecimal multiplicand): 乘法
-
BigDecimal divide(BigDecimal divisor): 除法
-
BigDecimal divide(BigDecimal divisor,int scale,int roundingMode)
除法三个参数分别表示:除数、精确小数位、舍入模式
常用舍入模式:
BigDecimal.ROUND_UP 向上取整
BigDecimal.ROUND_FLOOR 向下取整法
BigDecimal.ROUND_HALF_UP 四舍五入
6.Date类(已过时)
构造方法:
1)public Date(): 分配 Date 对象并初始化此对象,以表示分配它的时间(精确到毫秒)
2)public Date(long date): 分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为"历元(epoch)",即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数
常用方法:
1)long getTime():
返回自1970 年1月1日 00:00:00 GMT 以来此 Date 对象表示的毫秒数
2)void setTime(long time)
设置此Date对象,以表示 1970 年1月1日 00:00:00 GMT 以后 time 毫秒的对应时间点
7.SimpleDateFormat
构造方法:
1)SimpleDateFormat(): 用默认的模式和默认语言环境的日期格式创建对象
2)SimpleDateFormat(String pattern)
用给定的模式和默认语言环境的日期格式创建对象,
一般pattern传递的是 "yyyy-MM-dd HH:mm:ss"
例如:2021-03-02 16:48:22
常用方法:
1)final String format(Date date): 将一个 Date 格式化为日期/时间字符串
2)Date parse(String source) throws ParseException:
从给定字符串解析文本,以生成一个日期
8.Calendar
Calendar类及其常用方法:
1)static Calendar getInstance(): 使用默认时区和语言环境获得一个Calendar类对象
2)void set(int field,int value)
将给定的日历字段设置为给定值
例如 : Calender.YEAR 表示年, 在Calendar日历类的字段摘要中, 有对于时间划分的字段, 都是静态的, 类名直接调用即可
3)void set(int year, int month, int date)
设置日历字段的年月日
4)int get(int field): 返回给定日历字段的值
5)abstract void add(int field,int amount)
根据日历的规则,为给定的日历字段添加或减去指定的时间量。减去的amount写成负数。
6)final Date getTime()
将一个日历类型转换成日期类型
注意:
1.MONTH比实际月份少一月,+1得到真实月份
2.DAY_OF_WEEK:本周的第几天,外国人使用星期天作为第一天,实际的星期-1
package com.tohka.date;
import java.util.Calendar;
import java.util.Date;
public class Demo4 {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
System.out.println(calendar);
//通过get(int field) 得到日历中指定时间字段值
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH)+1);
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(calendar.get(Calendar.DAY_OF_YEAR));
System.out.println(calendar.get(Calendar.DAY_OF_WEEK)-1);
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
System.out.println(calendar.get(Calendar.MINUTE));
System.out.println(calendar.get(Calendar.SECOND));
// 3. set(int field, int value)
// set(int year,int month, int day)
calendar.set(Calendar.YEAR,2020);
System.out.println(calendar.get(Calendar.YEAR));
calendar.set(1992,2,18);
System.out.println(calendar.get(Calendar.YEAR));
// 4. add(int field, int count) : 表示对某一个日历中的字段修改多少偏移量
calendar.add(Calendar.YEAR,1);
System.out.println(calendar.get(Calendar.YEAR));
// 5. Date getTime(): 将一个日历类型转换成日期类型
Date time = calendar.getTime();
System.out.println(time);
}
}
9.NumberFormat类
NumberFormat是所有数值格式的抽象基类.此类提供格式化和解析数值的接口,可用于格式化和解析任何语言环境的数值.
NumberFormat类常用方法
1)static final NumberFormat getInstance(): 返回当前默认语言环境的通用数值格式
2)static final NumberFormat getCurrencyInstance()
返回当前默认语言环境的货币格式
3)void setMaximumFractionDigits(int newValue)
设置数的小数部分所允许的最大位数
4)void setMaximumIntegerDigits(int newValue)
设置数的整数部分所允许的最大位数
5)final String format(double number)
格式化
package com.tohka.date;
import java.text.NumberFormat;
public class Demo5 {
public static void main(String[] args) {
NumberFormat instance = NumberFormat.getInstance();
instance.setMaximumFractionDigits(2);
instance.setMinimumIntegerDigits(2);
double d = 3212.1234d;
String format = instance.format(d);
System.out.println(format);
}
}
常用工具类
Math工具类
1、两个常量
E:自然对数的底数,2.718
PI:圆周率
2、常用方法
abs(数字类型),返回该参数的绝对值
ceil(double d),返回d的向上取整
floor(double d),返回d的向下取整
max(int a, int b),返回a、b的较大值
min(int a, int ),返回a、b的较小值
pow(int a, int b),返回a的b次幂
random(),返回0.000~0.999的随机数
round(double d),返回d四舍五入的结果
System类
System.in:标准输入流,默认关联到键盘上
举例 : Scanner sc = new Scanner(System.in);
System.out:标准输出流,默认关联到控制台上
举例 : System.out.println(数据);
System.err:标准错误输出流,默认关联到控制台上,用于打印错误信息,在eclipse中,使用该流打印的内容是红色
举例 : 如果代码中发生异常, 那么使用System.err将异常信息进行输出
常用方法全部都是static修饰:
1)currentTimeMillis():
返回当前时间的毫秒值,表示的是从1970年1月1日0时0分0秒开始到现在经历的毫秒值,1s = 1000ms。
应用:1、可以通过某些手段,将数字转换成时间对象、指定格式的字符串;2、可以通过计算两次的差值,来获取某段代码运行的时间
2)static void exit(int status): 退出JVM虚拟机,零表示正常终止
1)Arrays工具类
public static String toString(int[] a) 数组转字符串
public static void sort(int[] a) 讲数组进行自然排序
2)StringUtils工具类
3)BeanUtils工具类(Spring)
- Collections
1) sort(List<T> list): 将指定的列表按升序排序,从小到大
2) max、min(Collection c):获取集合的最大值或者最小值
3) replaceAll(List<E> list, E oldVal, E newVal):将集合list中的所有指定老元素oldVal都替换成新元素newVal
4) reverse(List<E> list):将参数集合list进行反转
5) shuffle(List<E> list):将list集合中的元素进行随机置换
Collections.synchronized... :将线程不安全的集合转为线程安全的集合
面试题总结:
1.int和Integer的区别
思路:其实也是在问基本数据类型和引用数据类型的区别
1、Int 是基本数据类型呀 Integer 是 java 为 int 提供的封装类,是引用数据类型;
2、Int 的默认值为 0,而 integer 的默认值为 null (何时选用int,何时选中Integer呢)
3、int不可以调用方法,Integer就可以(比如:Integer.parseInt("123"));
来做一道经典笔试题吧:请写出答案
Integer i1 = new Integer(12);
Integer i2 = new Integer(12);
System.out.println(i1 == i2);
Integer i3 = 126;
Integer i4 = 126;
int i5 = 126;
System.out.println(i3 == i4);
System.out.println(i3 == i5);
Integer i6 = 128;
Integer i7 = 128;
int i8 = 128;
System.out.println(i6 == i7);
System.out.println(i6 == i8);
解答:
分两种情况:
(1) new ,只要new,就开辟新内存,结果必然是false
(2) 不 new ,看范围
Integer做了缓存,-128至127,当你取值在这个范围的时候,会采用缓存的对象,所以会相等,当不在这个范围,内部创建新的对象,此时不相等
Integer和int的比较,实际比较的是数值,Integer会做拆箱的动作,来跟基本数据类型做比较
此时跟是否在缓存范围内或是否new都没关系
当我们写Integer i = 126,实际上做了自动装箱:Integer i = Integer.valueOf(126);
分析这段源码:
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
所以答案是:false、true、true、false、true
2.经典面试题String、StringBuffer与StringBuilder之间区别
String:不可变字符串序列,
StringBuffer 可变字符串序列 线程安全 效率低
StringBuilder 可变字符串序列 线程不安全 效率高
总结:
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
运行速度:StringBuilder > StringBuffer > String
3.经典面试题:==和equals方法的区别:
1)比较内容的不同:
==可以比较任意数据类型,既可以比较基本数据类型,也可以比较引用数据类型.
equals方法只能比较引用数据类型.
2)比较规则不同:
==在比较基本类型的时候,比较的是数据的值,比较引用类型时,比较的是地址值.
equals方法在重写之前,比较的是两个对象的地址值,在重写之后,比较的属性值.
4、String str = new String("xyz"); 创建了几个对象?
常量池:字符串存储的区域,程序结束后由系统释放。
答案:1个或两个
1、如果String常量池中,已经创建了"xyz",则不会继续创建,此时只创建了一个对象new String("xyz")
2、如果String常量池中,没有创建"xyz",则会创建两个对象,一个对象的值是"xyz",另一个对象是new String("xyz")
5、String s = "hello"; s+= "world!";执行这两行代码后,原始的String对象中的内容到底变了吗?
没有变,因为String被设计为不可变类(final修饰),所以他的所有对象都是不可变的对象
,s不再指向原来的那个对象了,而是指向另一个String对象了(helloworld)

浙公网安备 33010602011771号