Java第八天(实训学习整理资料(七)Java中的常用API)

一、说明

API(应用程序接口):

        数据接口:获取数据(前后端分离),数据可视化

        功能接口:手机短信接口,邮箱发送接口,支付接口

Java中的常用API:

        指的是常用的一些类的方法。

二、API

(1)Object

        Object是Java中所有类的直接或间接父类。

        Object上的常用方法:

                1--native

                        是一个本地方法(native),将当前对象进行克隆,被克隆对象所在的类必须实现Cloneable接口。

                        克隆,相当于复制。基于已经存在的对象克隆出一个属性相同的对象来。

                        Object clone();

                2--处理垃圾对象

                        当前类所创建的对象,如果没有引用时,被判定为垃圾对象,但是该对象不是被立即回收,而是达到了垃圾回收器的条件时触发,在触发对象回收时,会调用该方法,完成资源的清理。

                        这个概念有点类似于析构(当对象没有引用时,会自动调用方法,完成对象所持有资源的释放,并清理对象)但是java中的finalize,不等同于析构。java没有析构的概念。                         System.gc(); 唤醒垃圾回收器,清理垃圾对象。但是垃圾回收器不一定会立即执行。

                        如果在对象不被使用时,释放对象所占用资源,应该自己编写相应的代码实现。 void finalize();

                3--获取对象的实际类型

                        Class<?> getClass();

                4--哈希码

                        可以认为是唯一的,同一个对象的哈希码一致,不同对象的哈希码不同。

                        取值大概是43亿个,哈希码的取值是散列的,随机分布在这43亿个取值范围中 hashCode()

                5--比较两个对象地址是否相同

                        通常情况下,equals方法需要重写 实现当两个引用地址不同,但是属性相同时,也可以判定为相等。

                        boolean equals(Object obj);

                        instanceof关键字:用于判断某个对象是否为指定的类型

                        Ag:obj instanceof ClassName

                        null关键字:

                                1、表示当前的引用地址为空,也作为对象中引用类型属性的默认值。

                                2、null可以用于比较是否相等,但不能做其他任何操作否则会抛空指针异常

                6--进行代码调试

                                如果将一个对象作为字符串打印输出,则该方法的返回值就作为要打印的内容,一般作为代码调试。 String toString()

                7--其他方法:

                                与线程通信相关方法:

                                        notify() //唤醒线程池中的任意一个线程

                                        notifyAll() //唤醒所有线程

                                        wait(long timeout) //线程等待(挂起),并设置超时时间wait()

(2)String
                1--定义

                        表示字符串,并且是一个最终(final)类。

                        字符串拼接问题:

                                在使用“+”对字符串拼接时,实际上使用的是new StringBuilder().append().

                                如果遇到需要循环拼接字符串的场景,则应该使用StringBuilder(),节约内存空间.

                        在字符串拼接的应用中有两个类都可以处理:

                                StringBuilder:(默认),存在多线程并发安全问题,线程不安全类。并发效率高                         

                                StringBuffer: 加入了关键字synchronized,保证线程安全。并发效率相比StringBuilder较低。

                                字符串String实际上是char value[](字符数组)

                2--常用方法:

                        charAt(int index)---获取指定位置上的字符;如果指定的下标不存在,则会出现StringIndexOutOfBoundsException

                        length()---获取字符串的长度

                        toCharArray()---将字符串转化为一个字符数组

                        compareTo(String str)---按字典顺序(实际上就是按照从小到大的顺序)来比较两个字符串

                        concat(String str)---拼接两个字符串,返回一个新字符串

                        getBytes(String charsetName)---将字符串按照指定的编码转化为字节数组                         equals(Object o)---比较两个字符串是否一致。比较的是两个字符串的实际值                         endsWith(String suffix)---判断是否是指定的结尾

                        startsWith(String suffix)---判断是否是指定的开头

                        contains(String str) ---判断字符串中是否包含str。

                        hashCode()---获取对象的哈希码---注意,同一个字符串的哈希码在任何条件下都是一样的。

                        String(char[] cs, int index, int offset)---表示从字符数组cs的第index位开始,将offset个元素转化为字符串

                        indexOf(int ch, int index)---表示从字符串的第index位开始,向后寻找字符ch第一次出现的位置;如果找不到,则返回-1

(3)正则表达式
                1--定义

                        使用一些具有特殊含义的元字符,编写字符串的匹配规则。 Regex --- Pattern

                2--案例

                        Pattern p = Pattern.compile("a*b"); //基于传入的正则构建正则表达式对象

                        Matcher m = p.matcher("aaaaab"); //调用匹配器,匹配传入的字符串

                        boolean b = m.matches(); //判断是否匹配成功

                3--常用元字符

                        一个“.”                 //表示匹配除换行符以外的任意字符

                        一个“*”                 //匹配前一个字符出现0次或多次

                        一个“+”               //匹配前一个字符出现至少一次

                        {n}                         //匹配前一个字符出现n次

                        {n,m}                 //匹配前一个字符出现>=n 且 <=m次 {8, 16}

                        {n,}                         //匹配前一个字符出现至少n次

                        ^                         //匹配开始位置,例如:匹配以abc为开始 "^abc"

                        $                         //匹配结束位置,例如:匹配以jpeg为结束 "jpeg$"

                        []                         //匹配其中的任意一个字符, "f[ao]t" fat, fot

                        [-]                         //如果连字符“-”在选择匹配中出现,可以表示区间范围 [a-zA-Z_], [0-9]

                        [^]                         //排除选择匹配中出现的所有字符

                        ()                         //分组捕获,出现在括号中的内容会被添加到一个数组中,并且从1开始编号。

                                                //被分组后的内容可以根据编号进行反向引用

                        \1                        (从捕获的数组中提取下标为1的单元)

                        |                         //表示或者 “ab|cd” ,匹配ab或者cd

                        \d                         //匹配0-9之间任意一个数

                        \s                         //匹配特殊的控制符,空格,制表符,换行符

                        \w                         //与[a-zA-Z_]相同

                4--方法说明

                        group([int i]) //从捕获的分组中提取指定下标的单元,但是在调用之前一定要先确认 是否匹配成功 ,即先调用matches()为true时再提取 如果group参数为0表示提取数组中第一个元素也就是完全匹配的所有内容。

爬虫案例: //爬虫 //从a标签上提取url地址 - 正则

String content = "<a href=\"https://www.baidu.com?abc=354sdfsdf\">百度</a>";
Pattern pattern = Pattern.compile("<a href=\"(.*)\">百度</a>");
    Matcher matcher = pattern.matcher(content);
    //System.out.println(matcher.matches());

​    if(matcher.matches()){
​        //提取url
​        String group = matcher.group(1);
​        System.out.println(group);
​    }

练习:

1、匹配手机号是否符合规范

2、匹配邮箱地址是否符合规范

package day1031;

import java.util.Scanner;

public class Demo01 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int num;
        do {
            System.out.println("请输入要执行的序号:" + "\n" + "\t" + "1:进行手机号判断" + "\n" + "\t" + "2:进行邮箱判断" + "\n" + "\t" + "3:退出");
            num = sc.nextInt();
            switch (num) {
                case 3:
                    System.out.println("已退出!");
                    break;
                case 1:

                    /**
                     * 判断手机号格式是否正确
                     */

                    System.out.println("请输入一个手机号");
                    Scanner scanner = new Scanner(System.in);
                    String number = scanner.next();

                    String pattern = "^1[3-9]\\d{9}$";
                    String phoneNumber = number;
                    if (phoneNumber.matches(pattern)) {
                        System.out.println("手机号码格式正确!");
                    } else {
                        System.out.println("手机号码格式不正确!");
                    }


                    break;
                case 2:

                    /**
                     *判断邮箱格式是否正确
                     */

                    System.out.println("请输入一个邮箱地址");
                    Scanner scan = new Scanner(System.in);
                    String number4 = scan.next();

                    String regex = "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$";
                   if (number4.matches(regex)){
                       System.out.println("邮箱地址正确!");
                   }else {
                       System.out.println("邮箱地址错误!");
                   }

                    break;

                default:
                    System.out.println("选择无效,请重新输入");
                    break;


            }
        }while (num!=3);
    }
}
(4)数学相关类
                1--Math

                        addExact(5, 19); //加法运算

                        subtractExact(25, 9); //减法运算

                        multiplyExact(2, 8); //乘法运算

                        floorDiv(3, 2); //除法运算

                        abs(-9); //绝对值

                        pow(2, 3); //次幂

                        max(8, 9); //最大值

                        min(2, 7); //最小值

                        random(); //返回一个0-1之间的随机数,返回double类型

                        ceil(double a); //向上取整

                        floor(double a);//向下取整

注意:        对于浮点数而言,在计算机底层做换算时会被转为无限循环的小数。

                  1.3 - 1.333333333;因此在处理精度要求更高的场景推荐使用下面的类。

                2--BigDecimal

                        在BigDecimal中,数值会被作为字符串进行处理。

                        //将数值封装为BigDecimal对象

                        BigDecimal num1 = new BigDecimal("数字")

                        BigDecimal num2 = new BigDecimal("数字")

                常用方法:

                        num1.add(num2); //加法运算

                        num1.subtract(num2); //减法运算

                        num1.multiply(num2); //乘法运算

                        num1.divide(num2); //除法运算

                        num1.abs(); //绝对值

                        num1.pow(3); //次幂

                        num1.max(num2); //最大值

                        num1.min(num2); //最小值

                案例:

				BigDecimal n1 = new BigDecimal("3");
​				BigDecimal n2 = new BigDecimal("2");

​				BigDecimal divide = n1.divide(n2);
​				System.out.println(divide.doubleValue());
(5)包装类

                针对java中的基本数据类型(基本类型变量上没有属性&方法)。而java称为纯面向对象语言,因此对基本类型做了相应的包装类型。

基础byteshortcharintlongfloatdoubleboolean
包装ByteShortCharacterIntegerLongFloatDoubleBoolean

注意:自jdk1.5开始,java支持将基础类型的值直接赋值给包装类型,反之也可以。

                包装类型 = 基础类型 //封箱

                基础类型 = 包装类型 //拆箱

封箱的过程实际上调用的是包装类身上的valueOf()方法实现。

                Integer valueOf(int i)

拆箱的过程中实际调用的是包装类身上的*Value()方法。

(6)日期类

在方法身上添加了@Deprecated注解的,表示官方即将在以后的版本不再支持,即将被废弃。

        jdk1.8之前:

                Date //表示日期类

                getTime() //返回从1970-1-1 0:0:0 到当前时间的秒数(时间戳)

                Calendar //日历

                getInstance() //返回当前日期的Calendar对象

                set() //设置时间

                SimpleDateFormat 日期格式化

                SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                format(Date date) //将日期对象根据格式转为对应的字符串

        jdk1.8开始:

                LocalDateTime 日期时间

                LocalDate 日期

                LocalTime 时间

                Duration 时间

                Period 日期

                LocalDateTime:

                now() //返回当前日期的LocalDateTime对象

                of(...) //将指定的日期时间转为LocalDateTime对象

        案例:

LocalDateTime now = LocalDateTime.now(); 
Stringformat=now.format(DateTimeFormatter.ofPattern("YYYY-MM-dd HH:mm:ss")); 
 System.out.println(format);
(7)异常
                1--定义

                        异常是java中用于问题反馈的机制。(ERROR 错误, Exception异常)

                        ERROR: 不应该尝试捕获,是程序正常运行过程中出现的不可避免的严重问题。                         Exception:异常对于程序员来说是可控的。

                        错误和异常都是直接继承java.lang.Throwable 。

                2--异常处理

                        1、在方法上可以抛出异常 hrows 异常类型

                        2、捕获

                3--异常的分类

                        1--编译时异常: 在编译阶段抛出的异常,这种异常是必须要解决的。

                        2--运行时异常: 在运行时有可能会出现的异常,这种异常可以处理也可以不处理。 如果该异常类型是RuntimeException的子类都属于运行时异常。

                4--如何通过抛异常进行问题反馈

                        可以通过throw 配合异常实现

                        在方法中:

                                throw new 异常类("");

注意:如果抛出的是编译时异常,则需要在方法参数列表后使用throws 抛出, 如果是运行时异常,可以不用在方法上抛。

                5--异常捕获处理办法

                        a、如果捕获的每个异常都有自己的处理办法,就需要分别捕获

                        b、如果所有异常处理都相同,则可以直接找这些异常的共同父类。

                        c、如果多个异常需要进行分组处理,那么同一组的异常之间可以用 | 隔开 --- JDK1.7 (不能出现有直接继承关系的异常类)

                6--自定义异常

                        类继承Exception--相当于自定义了一个编译时异常类。

                        类继承RuntimeException--相当于自定义了一个运行时异常类。

练习:


1、输入一个字符串和一个数字,数字表示字节个数,然后按照指定的字节个数来截取这个字符串,要求不准出现半个字符的现象
2、输入一个字符串,提取这个字符串中的数字并求和 -> sdf85dfghd72s6 -> 8 5 7 2 6 -> 28
3、输入一个字符串,提取这个字符串中的数字并排序->sdf85dfghd72s6 -> 8 5 7 2 6 -> 2 5 6 7 8
4、输入一个字符串,利用charAt方法判断这个字符串是否是一个回文字符串
5、输入一个字符串,统计每个字符出现的个数---hsoafngifaoa -> h:1 s:1 o:2 a:3 f:2 n:1 g:2 i:1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值