常用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[];

常用方法

  1. length() : 获取到一个字符串中的字符个数(字符串的长度) , 返回值类型int

  2. charAt(int index): 将字符串中指定的index索引位置上对应的字符获取到,返回值类型char

  3. subString(int beginIndex): 截取出字符串的一部分,从beginIndex索引开始, 到最后的全部字符序列取出来, 返回值结果,新的字符串String

  4. subString(int beginIndex, int endIndex) : 从beginIndex到endIndex-1之间的字符序列截取成一个新的字符串, 返回值结果String
    注意 : JDK的方法中, 如果是对于两个索引位置进行操作, 通常包括开始索引, 不包括结束索引

  5. indexOf(String str) : 获取参数字符串str在方法调用字符串中第一次出现的索引位置
    返回值类型int, 如果没有找到参数str存在位置, 返回-1

  6. indexOf(String str, int formIndex):返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索, 返回值类型int, 如果没有找到参数str存在位置, 返回-1

  7. lastIndexOf(String str) : 获取参数字符串str在方法调用字符串中最后一次出现的索引位置
    返回值类型int, 如果没有找到参数str存在位置, 返回-1

    8.byte[] getBytes():将当前字符串,转成字节数组

  8. char[] toCharArray():将当前的字符串,转成字符数组

  9. toUpperCase():将当前的字符串,转成全大写形式

  10. toLowerCase():将当前的字符串,转成全小写形式

  11. 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类常用方法

  1. BigInteger abs(): 返回BigInteger对象的绝对值,返回值结果BigInteger

  2. BigInteger negate(): 取该对象的相反数

  3. BigInteger add(BigInteger val): 加法

  4. BigInteger subtract(BigInteger val): 减法

  5. BigInteger multiply(BigInteger val): 乘法

  6. BigInteger divide(BigInteger val): 除法

2.BigDecimal类及其常用方法

浮点数类型,有精度损失问题.为了解决这种问题,在java中引入了BigDecimal, 进行浮点类型精确计算

构造方法:

  1. BigDecimal(double val): 将double类型的数据转换成BigDecimal对象

  2. BigDecimal(String val): 将String类型的数据转换成BigDecimal对象

BigDecimal类常用方法

  1. BigDecimal add(BigDecimal augend): 加法

  2. BigDecimal subtract(BigDecimal subtrahend): 减法

  3. BigDecimal multiply(BigDecimal multiplicand): 乘法

  4. BigDecimal divide(BigDecimal divisor): 除法

  5. 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)


  1. 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)
posted @ 2021-08-11 22:11  Lucky_龍  阅读(87)  评论(0)    收藏  举报