【Java基础】03_Java常用API

时间:2021-09-22 22:06:53

【Java基础】03_Java常用API

一、java.lang.Object类【★】

类层次结构的根类,所有类都直接或者间接的继承自该类。

构造方法:

public Object()

成员方法:

1) public int hashCode()

返回该对象的哈希码值

2) public final Class getClass()

返回此对象的运行时类,即字节码文件对象

3)public String toString()        //子类重写:显示属性值

返回对象的字符串表示形式

即内存地址值。组成:包名...类名(即类的全路径名)@内存地址值的十六进制

4)public boolean equals(Object obj)        //子类重写:比较属性值

比较两个对象是否相同

面试题:==和equals()的区别?

equals():

  比较引用类型,【默认比较的】是引用类型的内存地址值是否相同。

  如果子类重写了该方法,那就得按照重写后的规则进行比较。

  基本类型包装类和String重写了该方法,比较的是值

==:    

  比较基本类型:比较的是基本类型的值是否相同。

  比较引用类型:比较的是引用类型的内存地址值是否相同。

二、java.util.Scanner类

JDK5以后用于获取用户的键盘输入。

构造方法:

  public Scanner(InputStream source)

成员方法:

1) boolean hasNextXxx()     // 注意:判断字符串省略Xxx

判断是否存在下一个某种类型元素

2) xxx nextXxx()        

返回某种类型的元素

3) public int nextInt()

获取int类型

4) public String nextLine()

获取String类型

注意:先获取int值,后获取String值出现问题及解决方案

    同一个Scanner对象,先获取数值,再获取字符串会出现一个小问题。主要原因是回车符号\r\n字符的问题。在输入int类型之后,需要回车执行下一个代码,但是系统将回车当成了字符串输入,所以没法输入字符串了

    推荐的解决方案:

    把所有的数据都先按照字符串获取,然后要什么类型,再将获取到的字符串转换为什么类型。

三、java.lang.String类【★★★】

字符串是由多个字符组成的一串数据(字符序列)。

a:字符串字面值常量"abc",也可以看成是一个字符串对象。

b:字符串是常量,一旦被赋值,就不能被改变。

常见构造方法:

1)public String()

 

2)public String(byte[] bytes)【将字节数组转成人能看懂的】

 

3)public String(byte[] bytes,int index,int length)

 

4)public String(char[] value)

 

5)public String(char[] value,int index,int count)

 

6)public String(String original)

 

5个面试题:结论

a:字符串如果是变量相加(有变量参与),先开辟空间,在拼接

b:字符串如果是常量相加(常量优化机制),是先加,然后在常量池中找,如果有就直接返回,否则,就创建。

判断功能:

    1)boolean equals(Object obj)

  比较字符串是否相同,区分大小写

    2)boolean equalsIgnoreCase(String str)

  比较字符串是否相同,不区分大小写

    3)boolean contains(String str)

  字符串对象是否包含给定字符串

    4)boolean startsWith(String str)

 

    5)boolean endsWith(String str)

 

    6)boolean isEmpty()

        

获取功能:

    1)int length()

 

    2)char charAt(int index)

 

    3)int indexOf(int ch)

 

    4)int indexOf(String str)

 

    5)int indexOf(int ch,int fromIndex)

 

    6)int indexOf(String str,int fromIndex)

 

    7)int lastIndexOf(String str)

 

    8)String substring(int start)

 

    9)String substring(int start,int end)

 

转换功能:

    1)byte[] getBytes()    【将字符串转成计算机能看懂的】

 

    2)char[] toCharArray()

 

    3)static String valueOf(char[] chs)

 

    4)static String valueOf(int i)

 

    5)String toLowerCase()

 

    6)String toUpperCase()

 

    7)String concat(String str) // 与+的区别

 

替换功能:

  String replace(char old,char new)

 

    String replace(String old,String new)

 

    String trim()

 

    int compareTo(String str)    (字典顺序比较)

 

    int compareToIgnoreCase(String str)    (了解)

 

    String[] split(String regex) (补充,切割功能)

 

四、java.lang.StringBuffer类【★★】

线程安全的可变字符序列.

StringBuffer、StringBuilder和String的区别?

 

构造方法

public StringBuffer()

public StringBuffer(int capacity)

public StringBuffer(String str)

    

成员方法

public int capacity()     

public int length()        

    

添加功能

public StringBuffer append(String str)

 

public StringBuffer insert(int offset,String str)

    

删除功能

public StringBuffer deleteCharAt(int index)

public StringBuffer delete(int start,int end)

    

替换和反转功能

public StringBuffer replace(int start,int end,String str)

 

public StringBuffer reverse()

 

截取功能:返回值类型不再是StringBuffer本身

public String substring(int start)

 

public String substring(int start,int end)

      

    

StringBuffer和String的相互转换【】

* String --> StringBuffer

    a:通过构造方法StringBuffer(String s)

    b:通过append()方法

        

* StringBuffer --> String

    a:通过构造方法 String(StringBuffer sb)

    b:通过toString()方法

    c:通过subString(0,sb.length());

 

注:String作为参数传递,效果和基本类型作为参数传递是一样的。

五、数组算法(面试)

冒泡排序的原理和代码(双重for循环)

  相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处

选择排序的原理和代码(双重for循环)

  从0索引元素开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处。

折半查找法的原理和代码

  这里的有序指的是提供的数组初始状态本身元素就是有序的。

六、java.util.Arrays类

全部为静态方法:类名.调用

public static String toString(int[] a)    

 

public static void sort(int[] a)    

 

public static int binarySearch(int[] a,int key)

前提:数组本身是有序的

七、基本类型包装类(Integer为例)【★】

常用的操作之一:用于基本数据类型与字符串之间的转换。

基本类型和包装类的对应:

        byte         Byte

        short        Short

        int        Integer

        long        Long

        float        Float

        double    Double

        char        Character

        boolean    Boolean

 

字段常量:类名.调用

    static int MAX_VALUE

    static int MIN_VALUE

构造方法

    1)public Integer(int value)        

    2)public Integer(String s) "1212"

    参数String必须是int型字符串,否则报数字格式异常

成员方法

1)public int intValue()        // 非静态方法

    

2)public static int parseInt(String s)    //参数:数值型字符串

    

3)public static String toString(int i)

 

4)public static Integer valueOf(int i) 

 

5)public static Integer valueOf(String s)

 

    十进制到其他进制:

    6)public static String toBinaryString(int i)

 

    7)public static String toOctalString(int i)

 

    8)public static String toHexString(int i)

 

    其他进制到十进制(了解)

    9)public static String toString(int i,int radix)

 

    10)public static int parseInt(String s,int radix)

 

String和int类型的相互转换【】

* int --> String

    方式1:和""进行拼接【推荐】

    方式2:String类方法【推荐】

            public static String valueOf(int i)

    方式3:int -> Integer(int) - >String(Integer类的toString方法())

    方式4:public static String toString(int i)(Integer类的静态方法)

 

* String --> int

  方式1:String --> Integer(String) --> int

     方式2:public static int parseInt(String s)【Integer静态方法推荐】

 

byte常量池:

  Integer的数据直接赋值,如果在-128到127之间,会直接从缓冲池里获取数据(字节常量池)

  举例:Integer i = 127;

八、正则表达式

是指一个用来描述或者匹配一系列符合某个语法规则的字符串的单个字符串。

其实就是一种规则。作用:专门用于操作字符串。

常见组成规则:

  字符

  字符类

  预定义字符类

  数量词

  边界匹配器

 

常见字符类: 中括号[...]代表单个字符

    1)[abc]           a、b 或 c(简单类)

    2)[^abc]      除了 a、b 或 c外的任何字符(否定)

    3)[a-zA-Z]     a到 z 或 A到 Z中的任意字符, 两头的字母包括在内(范围)

    4)[0-9]           0到9的字符都包括

 

预定义字符类:

    1)点 .     任何一个字符

    2)\d     数字:[0-9]

    3)\w     单词字符:[a-zA-Z_0-9]

  注意:需要转义字符进行转义\,代码书写方式就是\\d。

 

Greedy 数量词:

    1)X?        X,一次或一次也没有

    2)X*        X,零次或多次

    3)X+        X,一次或多次

    4)X{n}     X,恰好 n 次

    5)X{n,}     X,至少 n 次

    6)X{n,m}    X,至少 n 次,但是不超过 m 次

 

分割功能:

  String类的功能:

  public String[] split(String regex)

  注意:按点split(".")切割,需要书写成\\.,即书写成split("\\.")

 

替换功能:

  String类的功能:

  public String replaceAll(String regex,String replacement)

 

分组功能:

捕获组可以通过从左到右计算其开括号来编号。

例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:

        1 ((A)(B(C)))

        2 (A)

        3 (B(C))

        4 (C)

组零始终代表整个表达式。

这里的编号从左括号依次编号分组。(主要看左小括号)

(.)\\1+ $1

java.util.regex.Pattern和Matcher:

Pattern p = Pattern.compile("a*b"); // 获取到正则表达式

Matcher m = p.matcher("aaaaab");    // 获取匹配器

boolean b = m.matches();    //看是否能匹配,匹配就返回true

 

"aaaaab".matches("a*b");

 

Matcher的获取功能:

public boolean find()    

 

public String group()

九、java.lang.Math类

Math 类包含用于执行基本数学运算的方法,如初等指数、对数、平方根和三角函数。

成员变量

    PI:静态常量,即圆周率π

 

成员方法:

1)public static int abs(int a)

 

2)public static double ceil(double a)

 

3)public static double floor(double a)

 

4)public static int max(int a,int b)     min自学

 

5)public static double pow(double a,double b)    // a ^ b

 

6)public static double random()

 

7)public static int round(float a)     参数为double的自学

 

8)public static double sqrt(double a)

十、java.util.Random类

此类的实例用于生成伪随机数流。

构造方法:

    public Random()        //以系统 纳秒值为种子

 

    public Random(long seed)

 

成员方法:

    1)public int nextInt()

 

    2)public int nextInt(int n)    // 【重点掌握】

十一、java.lang.System类【★】

System 类包含一些有用的类字段和方法。它不能被实例化。

成员方法

    1)public static void gc()

 

    2)public static void exit(int status)

 

    3)public static long currentTimeMillis() // 【常用】

 

    4)pubiic static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

十二、java.math.BigInteger类

可以让超过Integer范围内的数据进行运算。可以放很大的整数。

金融、银行、证券行业需要用到这个类。

构造方法:

    public BigInteger(String val)

 

成员方法:

    1)public BigInteger add(BigInteger val)

 

    2)public BigInteger subtract(BigInteger val)

 

    3)public BigInteger multiply(BigInteger val)

 

    4)public BigInteger divide(BigInteger val)

 

    5)public BigInteger[] divideAndRemainder(BigInteger val)

 

十三、java.math.BigDecimal类

由于在运算的时候,float类型和double很容易丢失精度,演示案例。所以,为了能精确的表示、计算浮点数,Java提供了BigDecimal

不可变的、任意精度的有符号十进制数。

构造方法:

    public BigDecimal(String val) // 【推荐使用】

 

成员方法:

    1)public BigDecimal add(BigDecimal augend)

 

    2)public BigDecimal subtract(BigDecimal subtrahend)

 

    3)public BigDecimal multiply(BigDecimal multiplicand)

 

    4)public BigDecimal divide(BigDecimal divisor)

 

    5)public static BigDecimal valueOf(double val) // 【推荐使用】

十四、java.util.Date类【★★】

类Date 表示特定的瞬间,精确到毫秒。

注意:Date是util包下的,不能导入sql包下的。

 

构造方法

  Date()    //【常用】

 

  Date(long date)

成员方法:

    public long getTime()

 

    public void setTime(long time)

十五、java.text.SimpleDateFormat类【★★】

DateFormat 是日期/时间格式化子类的抽象类,

它以与语言无关的方式格式化并解析日期或时间。

DateFormat 是抽象类,不允许实例化,所以开发使用其子类SimpleDateFormat。

 

年月日时分秒:yyyy年MM月dd日HH:mm:ss

 

构造方法:

    public SimpleDateFormat()

 

    public SimpleDateFormat(String pattern) 【使用最多】

 

成员方法:

    public final String format(Date date)

 

    public Date parse(String source)

十六、java.util.Calendar类【★】

Calendar 类是一个抽象类,它为特定瞬间与一组诸如

YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

Calendar替代了很多Date中的方法,所以Date中的类很多方法被标注为过时。

成员字段:

  Calendar.YEAR         获取年份

  Calendar.MONTH        月份编号是从0开始编号的。【】

  Calendar.DAY_OF_MONTH    获取月份中的第几天  

  Calendar.DAY_OF_WEEK    周日是第一天,周六是最后一天。

成员方法:

    public static Calendar getInstance()

 

    public int get(int field)

 

    public void add(int field,int amount)

 

    public final void set(int year,int month,int date)

十七、练习题

A:模拟用户登录,并提示还有几次(总共3次)。如果登录成功,就可以玩猜数字小游戏了。

B:遍历获取字符串中的每一个字符

C:统计字符串中大写,小写、数字字符及其他字符的个数

D:把字符串的首字母转成大写,其他小写

E:把int数组拼接成一个指定格式的字符串 如:[1, 2, 3]

F:字符串反转

G:统计大串中小串出现的次数

H:判断一个字符串是否是对称字符串

I:把一个字符串中的手机号码获取出来

J:算一下你来到这个世界多少天?

K:键盘录入任意一个年份,判断该年是闰年还是平年

闰年366天 平年365天 多的那一天就是2月的一天,平年二月28天,闰年29天.