【JAVA基础】API:Math、System、runtime、object、BigInteger 、BigDecima、爬虫、分组、时间类、包装类

1.Math

2.System

public class Main {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8};
        int[] arr1 = new int[8];
        System.arraycopy(arr,0,arr1,1,5);
//        从1970.1.1开始到现在的毫秒形式
        long l1= System.currentTimeMillis();//1710464757047
        System.out.println(l1);
        for (int i=0;i<arr.length;i++)
        {
            System.out.println(arr1[i]);
        }
//        0:当前虚拟机是正常停止
//          1:当前虚拟机是异常停止
        System.exit(0);
    }
}

3.runtime

      Runtime r1=Runtime.getRuntime();
//       停止虚拟机
//       Runtime.getRuntime().exit(0);
//       获得CPU线程数
        System.out.println(Runtime.getRuntime().availableProcessors());//16
//        总内存大小,单位字节
        System.out.println(Runtime.getRuntime().maxMemory()/1024/1024);//3934
//        剩余内存大小
        System.out.println(Runtime.getRuntime().freeMemory()/1024/1024);//243
//        运行cmd
//        shutdown关机 ,加上参数才运行,-s:1min之后关机;-a取消关机
        Runtime.getRuntime().exec("shutdown -a");

4 object

所有类直接或间接继承object类

//toString:默认返回地址值
//打印一个对象,可以重写该方法返回属性值 
    public String toString() {
        return "Animal{a = " + a + ", b = " + b + "}";
    }
        //equals只能判断引用类型,看地址
        String s1="1";
        String s2="1";
        String s3="3";
        StringBuilder sb=new StringBuilder("1");
        System.out.println(s1==s2);//true
        System.out.println(s1.equals(s2));//true
        System.out.println(s1==s3);//false
        System.out.println(s1.equals(s3));//false
//        equals被String调用,要看sb是不是字符串,此时sb不是字符串,而是StringBuilder对象
        System.out.println(s1.equals(sb));//false
 //        equals被StringBuilder调用,要看两个地址是否相等
        System.out.println(sb.equals(s1));//false

5 Clone

调用clone方法时,分配的内存和源对象一样

ctrl+n

ctrl+f12

 

protected native Object clone() throws CloneNotSupportedException;

所以要去重写

Animal.java

//Cloneable没有抽象方法,那么其是标记性接口
//Cloneable表示实现后当前类对象可以克隆,没有实现就不能
public class Animal implements Cloneable{
        public int a=1;
        public static  int b=2;

    @Override
    public String toString() {
        return "KELONG";
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

 Main.java

public class Main {
    public static void main(String[] args) throws IOException, CloneNotSupportedException {
     Animal an=new Animal();
     Animal an1=(Animal) an.clone();
        System.out.println(an);//KELONG
        System.out.println(an1);//KELONG
    }
}

浅克隆:默认,引用克隆指向同一地址,基本数据类型克隆直接拷贝过来

深克隆: 引用克隆指向不同地址,基本数据类型复用串池里面的,使用需要重写方法或使用第三方工具类

6 object工具类

    public static void main(String[] args) throws IOException, CloneNotSupportedException {
     Animal an=new Animal();
     Animal an1=(Animal) an.clone();
//     先an非空判断,an非空就用an.equals方法,如果重写比较地址,没有比较属性
        System.out.println(Objects.equals(an,an1));//false
        System.out.println(Objects.isNull(an));//false
        System.out.println(Objects.nonNull(an));//true
    }

7 BigInteger 

        Random r = new Random();
//        获取随机大整数,范围0-2^4-1
        BigInteger bgi = new BigInteger(4, r);
        System.out.println(bgi);//9
//        获取指定大整数
        BigInteger bgi1 = new BigInteger("10");
        System.out.println(bgi1);//10
//        获取指定进制大整数
//        2表示2进制
        BigInteger bgi2 = new BigInteger("10",2);
        System.out.println(bgi2);//2
//        提前把-16-16创建为BigInteger对象,多次获取不创建新的
        BigInteger bgi3 =BigInteger.valueOf(16);
        BigInteger bgi4 =BigInteger.valueOf(16);
        System.out.println(bgi3==bgi4);//true,表示同一个对象

8 BigDecima

 9 爬虫

package DEMO1;

import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

//找出里面所有的javaxx
public class Main {
    public static void main(String[] args) throws IOException, CloneNotSupportedException {
        String str="网页Java 是一种流行的编程语言,可以用于开发桌面应用程序、网页应用程序和移动应用程序。Oracle 提供了 Java12 的最新版本,让您可以享受更多的功能和安全性。无论您是 Java16 的新手还是专家,都可以在 java2.com 上找到相关的下载、帮助和常见问题。";
        //method1();
//    获取正则表达式对象,\\d{0,2}表示Java出现0次-2次
        Pattern p=Pattern.compile("Java\\d{0,2}");
//        文本匹配器。m要在str找到符合p规则的小串
        Matcher m=p.matcher(str);
        while(m.find())
        {
            String s1=m.group();
            System.out.println(s1);
        }
    }}

//    private static void method1() {
//
    获取正则表达式对象,\\d{0,2}表示Java出现0次-2次
//        Pattern p=Pattern.compile("Java\\d{0,2}");
        文本匹配器。m要在str找到符合p规则的小串
//        Matcher m=p.matcher(str);
        从头开始寻找满足条件字串,有返回true,底层记录起始索引和结束索引+1,java是0123,结束索引是4
//        boolean b=m.find();
        group方法会根据find的索引截取数据
//        String s1=m.group();
//        System.out.println(s1);
        第二次find会读取后面的内容
//        b=m.find();
//        String s2=m.group();
//        System.out.println(s2);
//    }
//}

 

        String str="网页JAva是一种流行的编程语言,可以用于开发桌面应用程序、网页应用程序和移动应用程序。Oracle 提供了 JAva11 的最新版本,让您可以享受更多的功能和安全性。无论您是 JAVA17 的新手还是专家,都可以在 java2.com 上找到相关的下载、帮助和常见问题。";
        //method1();
//    获取正则表达式对象,\\d{0,2}表示Java出现0次-2次
        String s="Java\\d{0,2}";
        //        ((?i)java)表示忽略大小写,后面?表示前面的数据是java,=是后面要跟随的数据
//        只要java,不要版本号
        String s5="((?i)java)(?=8|11|17)";//JAva JAVA
//        要java,要版本号
        String s2="((?i)java)(8|11|17)";//JAva11 JAVA17
        String s3="((?i)java)(?:8|11|17)";//JAva11 JAVA17
//        不要版本号为8,11,17 的
        String s4="((?i)java)(?!8|11|17)";//JAva java
        String str="网页JAva是abbbbbbbbbbbbb一种流行的编程语言,可以用于开发桌面应用程序、网页应用程序和移动应用程序。Oracle 提供了 JAva11 的最新版本,让您可以享受更多的功能和安全性。无论您是 JAVA17 的新手还是专家,都可以在 java2.com 上找到相关的下载、帮助和常见问题。";
        //        非贪婪爬取
        String s="ab+?";//ab
        //        贪婪爬取
        String s2="ab+";//abbbbbbbbbbbbb
        Pattern p=Pattern.compile(s2);

 

10 捕获分组

 

//        判断字符串开始字符与结束字符是否一致
//        (.)表示第一个字符任意,.表示中间字符任意,+表示可以多个,\\1表示把第一组数据拿出来用一次
        String s1="(.).+\\1";
        String s2="(.+).+\\1";
//        *作用于\\2,表示0次或多次,外面括号的第一组,里面的是第二组,只看左括号分组
        String s3="((.+)\\2*).+\\1";
        System.out.println("a123a".matches(s1));//true
        System.out.println("a123b".matches(s1));//false
        System.out.println("abc123abc".matches(s2));//true
        System.out.println("aaa123aaa".matches(s3));//true
        String s1="啊啊啊啊啵啵啵啵啵啵笑笑笑笑笑笑笑笑笑";
//        +表示1次或者多次
        String s2=s1.replaceAll("(.)\\1+","$1");
        System.out.println(s2);//啊啵笑

11 非捕获分组

分组之后不再用本组数据,括号只是括起来

//        ?: ?! ?=都是非捕获分组,\\1错误 String s1="[1-9]\\d{16}(?:\\d|X|x)\\1";
        //  \\d 第一个\:编译器将字符串转变为“正则表达式” ,\d匹配数字,|表示或
        //RegExp1(?=RegExp2)  匹配后面是RegExp2 的 RegExp1
        //RegExp1(?!RegExp2)  匹配后面不是RegExp2 的 RegExp1
        String s1="[1-9]\\d{16}(?:\\d|X|x)";
        System.out.println("15042919840709121x".matches(s1));

12 Date

//        表示当前时间
        Date d1=new Date();
//        从时间原点开始计算,0是long类型的
        Date d2=new Date(0L);
        System.out.println(d1);//Fri Mar 15 13:35:59 CST 2024
        System.out.println(d2);//Thu Jan 01 08:00:00 CST 1970
//        修改时间,1000ms
        d2.setTime(1000L);
        System.out.println(d2);//Thu Jan 01 08:00:01 CST 1970
        //获取当前时间ms值
        long time= d1.getTime();
        System.out.println(time);//1710480959584

13 SimpleDateFormat

//        作用1:格式化:转变格式
//        从时间原点开始计算,0是long类型的
        Date d2=new Date(0L);
        SimpleDateFormat sd=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss EE");
        System.out.println(sd.format(d2));
//        作用2:字符串表示的时间->Date对象
        SimpleDateFormat sd1=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//        要与字符串格式完全一致
        String str="1111年22月33日 44:55:66";
        Date date=sd1.parse(str);
        System.out.println(date);

14 Calendar

//        1.获取日历对象
//        Calendar是一个抽象类,不能直接new
        Calendar ca=Calendar.getInstance();
        Date d=new Date(0L);
//        修改日历的时间
        ca.setTime(d);
//        月份:范围0-11,星期:国外星期天=国内星期一 星期第一天
//       get():  1 年 2 月 3一年中第几周
        int year=ca.get(1);//ca.get(Calendar.YEAR)
        int month=ca.get(2)+1;//ca.get(Calendar.MONTH)
        int date=ca.get(5);//ca.get(Calendar.DAY_OF_MONTH)
        int week=ca.get(Calendar.DAY_OF_WEEK);
        System.out.println(year+","+month+","+date);//1970,1,1
        ca.set(Calendar.YEAR,2023);
        System.out.println(ca.get(1));//2023

15 JDK8 时间类:时区、时间、格式化

JDK7 多线程有数据安全问题

JDK8 时间对象不可变

//      获得所有时区名称
        Set<String> ZoneIds= ZoneId.getAvailableZoneIds();
        System.out.println(ZoneIds);//[Asia/Aden, America/Cuiaba, Etc/GMT+9, Etc/GMT+8...]
//        获取当前系统默认时区
        ZoneId zid=ZoneId.systemDefault();
        System.out.println(zid);//Asia/Shanghai
//        获取指定时区
        ZoneId zid1=ZoneId.of("Asia/Shanghai");
        System.out.println(zid1);//Asia/Shanghai
//        获取当前时间
        Instant now=Instant.now();
        System.out.println(now);//2024-03-15T06:15:20.784755300Z
//        根据ms获取对象
        Instant instant1=Instant.ofEpochMilli(1L);
        System.out.println(instant1);//1970-01-01T00:00:00.001Z
//        指定时区的时间
        ZonedDateTime timez=Instant.now().atZone(zid1);
        System.out.println(timez);//2024-03-15T14:18:42.601276100+08:00[Asia/Shanghai]
//        时间的判断,对象都是Instant
        boolean result=now.isBefore(instant1);
        System.out.println(result);//false
        Instant instant2=instant1.minusMillis(1000l);
        System.out.println(instant2);//1969-12-31T23:59:59.001Z

 

 

16 包装类

用一个对象,把基本数据类型包起来

char包装类:Charracter

int包装类:Integer

        Integer i1=new Integer(1);
        Integer i2=Integer.valueOf(2);
        Integer i3=Integer.valueOf(2);
        System.out.println(i2);//2
//        -128-127使用最多,提前把这个范围内都创建了对象,如果用了不会创建新的
        System.out.println(i2==i3);//true
//        自动装箱
        Integer i4=3;
//        自动拆箱
        int i5=i4;
//        JDK5以后int和Integer可以看作一个东西,内部可以转化
//        把整数转为二进制
        String s1=Integer.toBinaryString(100);
        //把整数转为十六进制
        String s2=Integer.toHexString(100);
        //把整数转为八进制
        String s3=Integer.toOctalString(100);
        System.out.println(s1);//1100100
        System.out.println(s2);//64
        System.out.println(s3);//144
//        将字符串转换为整数
        int i=Integer.parseInt("123");
        System.out.println(i);//123

17 练习

17.1

输入1-100的整数,累积数值到200退出

public class Main {
    public static void main(String[] args) throws IOException, CloneNotSupportedException, ParseException {
        ArrayList<Integer> array=new ArrayList<>();
        Scanner sc=new Scanner(System.in);
        while(true)
        {
            System.out.println("请输入:");
            String s1=sc.nextLine();
            int num=Integer.parseInt(s1);
            if(num<1||num>100)
            {
                System.out.println("数值不符!");
                continue;
            }
            array.add(num);
            int sum=getSum(array);
            if(sum>200)
            {
                System.out.println("达到200!");
                break;
            }
        }
    }
    private static int getSum(ArrayList<Integer> array) {
        int num=0;
        for(int i=0;i<array.size();i++)
        {
            num+= array.get(i);
        }
        return num;
    }
}

 

 17.2 

 

public class Main {
    public static void main(String[] args) throws IOException, CloneNotSupportedException, ParseException {
      String str="150";
      if(!str.matches("[0-9]\\d{0,9}"))
      {
          System.out.println("输入有误");
      }
//      定义一个变量表示最终结果
        int number=0;
      for(int i=0;i<str.length();i++)
      {
//          '0'表示48
          int c=str.charAt(i)-'0';
//          第一次输入1,第二次输入2,但要变为12
          number=number*10+c;
      }
        System.out.println(number);//150
    }
}

 17.3 

public class Main {
    public static void main(String[] args) throws IOException, CloneNotSupportedException, ParseException {
        System.out.println(toBinaryString(6));
    }
    private static String toBinaryString(int number) {
        //     拼接余数
        StringBuilder sb=new StringBuilder();
        while (true)
        {
            if(number==0)
            {
                break;
            }
            int remain=number%2;
            sb.insert(0,remain);
            System.out.println(remain);
            number=number/2;
        }
        return sb.toString();
    }
}

 17.4

生日到现在是几天

public class Main {
    public static void main(String[] args) throws IOException, CloneNotSupportedException, ParseException {
//        JDK7
//       计算生日ms值
        String str="2010年01月08日";
        SimpleDateFormat sd=new SimpleDateFormat("yyyy年MM月dd日");
        Date date=sd.parse(str);
        long time1=date.getTime();
//        计算现在日期
//        第一种方法
//        long today=System.currentTimeMillis();
        Date date1=new Date();
        long time2=date1.getTime();//不要用这两行
        long time=time2-time1;
        System.out.println(time/1000/60/60/24);
//        JDK8
//        period侧重年月日,Duration分钟与ms,ChronoUnit全
        LocalDate l1=LocalDate.of(2010,1,8);
        LocalDate l2=LocalDate.now();
        System.out.println(ChronoUnit.DAYS.between(l1,l2));//5180
    }
}

17.5 

 

package DEMO1;

import java.io.IOException;
import java.text.ParseException;
import java.time.LocalDate;
import java.util.Calendar;

public class Main {
    public static void main(String[] args) throws IOException, CloneNotSupportedException, ParseException {
        Calendar c=Calendar.getInstance();
        c.set(2000,2,1);
        c.add(Calendar.DAY_OF_MONTH,-1);//1是往后加,月份范围0-11
        int day=c.get(Calendar.DAY_OF_MONTH);
        System.out.println(day);//29

//        JDK8
//        设定时间
        LocalDate ld=LocalDate.of(2000,3,1);
        LocalDate date=ld.plusDays(-1);
        System.out.println(date);//2000-02-29
        int month=date.getDayOfMonth();
        System.out.println(month);//29

//        是不是闰年方法,true就是闰年
        System.out.println(ld.isLeapYear());//true
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/460121.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HandyControl PropertyGrid及自定义编辑器

前提条件 项目引入对应HandyControl对应版本包。 使用案例 UI部分 <Window xmlns:hc"https://handyorg.github.io/handycontrol"><hc:TabControl><hc:TabItem Header"默认样式"><hc:PropertyGrid Width"380" SelectedO…

huawei services HK华为云服务

huaweiserviceshk是一种云计算服务&#xff0c;为华为云服务用户提供了多种服务&#xff0c;包括云服务器、数据库、存储、网络等&#xff0c;用户可以根据自己的需求选择不同的服务并支付相应的费用 如何付费呢&#xff0c;这里可以使用441112&#xff0c;点击获取 卡片信息在…

swiftUI中的可变属性和封装

swiftUI的可变属性 关于swift中的属性&#xff0c;声明常量使用let &#xff0c; 声明变量使用var 如果需要在swiftUI中更改视图变化那么就需要在 var前面加上state 。 通过挂载到state列表 &#xff0c;从而让xcode找到对应的改变的值 例子&#xff1a; import SwiftUIstruc…

前端组件化:构建高效应用的艺术

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

点的基本操作

点的基本操作 要求 提供空间点数据文本文件&#xff0c;包含ID、name、X、Y四个字段信息&#xff0c; 1&#xff09;读取数据&#xff0c;并且在窗口中显示点的具体位置&#xff0c;用实心圆绘制。 2&#xff09;鼠标任意点击三个点&#xff0c;将点连线&#xff0c;用黑色笔…

微服务技术栈SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式(五):分布式搜索 ES-中

文章目录 一、DSL查询文档1.1 简单查询1.2 复合查询 二、搜索结果处理三、RestClient演示 查询与结果分析四、案例4.1 问题解析4.2 代码4.2.1 实体bean4.2.2 控制层4.2.3 业务service4.2.4 启动类 一、DSL查询文档 1.1 简单查询 # 1. DSL查询 # 1.1 查询所有GET /hotel/_searc…

Github和TeamCity的持续集成构建

一、简介 TeamCity是JetBrains旗下的一款持续集成[Continuous Integration&#xff0c;简称CI]工具&#xff0c;开箱即用。TeamCity提供一系列特性可以让团队快速实现持续集成&#xff1a;IDE工具集成、各种消息通知、各种报表、项目的管理、分布式的编译等等。 二、安装使用(…

【Maven学习笔记】Maven入门教程(适合新手反复观看学习)

Maven学习笔记 Maven的简要介绍Maven的安装和配置Maven的安装Maven安装的常用配置 Maven的使用入门编写pom编写主代码编写测试代码打包和运行使用Archetype生成项目骨架 Maven核心概念的阐述坐标案例分析依赖依赖的范围传递性依赖依赖范围依赖调节可选依赖Maven依赖常用的技巧 …

关于python中数据分析的一些函数

首先先下载numpy函数库 如果使用的pycharm软件&#xff0c;可在设置中下载&#xff0c;在Python interpreter设置里&#xff0c;点击号&#xff0c;搜索numpy点击下载即可 第一部分 1.array()函数 这是一个将类似数组的数据转为数组的函数&#xff0c;我们还可以控制其数组的…

KMP 算法介绍

1. KMP 算法介绍 KMP 算法&#xff1a;全称叫做 「Knuth Morris Pratt 算法」&#xff0c;是由它的三位发明者 Donald Knuth、James H. Morris、 Vaughan Pratt 的名字来命名的。KMP 算法是他们三人在 1977 年联合发表的。 KMP 算法思想&#xff1a;对于给定文本串 T 与模式串 …

Adobe PDF背景设置护眼模式,缓解眼部疲劳

一、背景 在用Adobe PDF看论文时&#xff0c;默认的白色背景看久了&#xff0c;眼睛会特别疲劳&#xff0c;下面介绍如何设置背景为护眼模式。 二、设置PDF为护眼模式 使用Adobe Acrobat Pro DC打开任意PDF文件&#xff0c;在上方工具栏选择“编辑”&#xff0c;在下拉菜单栏…

SpringMVC重点记录

目录 1.学习重点2.回顾MVC3.回顾servlet4.初始SpringMVC4.1.为什么要学SpringMVC?4.2.SpringMVC的中重点DispatcherServlet4.3.SpringMVC项目的搭建4.4.MVC框架要做哪些事情?4.5.可能会遇到的问题 5.SpringMVC的执行原理6.使用注解开发SpringMVC7.Controller控制总结8.RestF…

excel导入功能(适用于vue和react都可)

如图所示&#xff08;需求&#xff09;&#xff1a;点击导入excel后&#xff0c;数据自动新增到列表数据内 这里以vue3 andt 为例 template 标签内代码 &#xff1a; <a-uploadname"file":multiple"true":show-upload-list"false":customR…

分布式CAP理论

CAP理论&#xff1a;一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;和分区容错性&#xff08;Partition tolerance&#xff09;。是Eric Brewer在2000年提出的&#xff0c;用于描述分布式系统基本性质的定理。这三个性质在分布式系统…

软件杯 深度学习 opencv python 实现中国交通标志识别_1

文章目录 0 前言1 yolov5实现中国交通标志检测2.算法原理2.1 算法简介2.2网络架构2.3 关键代码 3 数据集处理3.1 VOC格式介绍3.2 将中国交通标志检测数据集CCTSDB数据转换成VOC数据格式3.3 手动标注数据集 4 模型训练5 实现效果5.1 视频效果 6 最后 0 前言 &#x1f525; 优质…

微信小程序将高德地图转为腾讯地图的自行车路线规划

微信小程序后台首页开发设置 相关文档 腾讯后台 微信小程序接入JDK JDK腾讯地图文档 腾讯路线规划文档 核心代码 <map id"myMap" ref"myMap" style"width: 100%; height: calc(100vh - 80px)":latitude"latitude" :scale&qu…

springboot274基于web的电影院购票系统

电影院购票系统设计与实现 摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装电影院购票系统软件来发挥其高效…

CGAN——生成0-9数字图像(Tensorflow+mnist)

1、简介 传统的GAN或者其他的GAN都是通过一堆的训练数据&#xff0c;最后训练出了生成网络&#xff0c;随机输入噪声最后产生的数据是这些训练数据类别中之一&#xff0c;无法提前预测生成的是哪个类别。如果需要定向指定生成某些数据&#xff0c;比如想生成飞机&#xff0c;数…

云计算 3月14号 (TCP三次握手和四次挥手)

1.TCP三次握手和四次挥手 1.TCP的传输过程&#xff1a; Seq 序列号 保障传输过程可靠。 ACK &#xff08;确认消息&#xff09; SYN &#xff08;在建立TCP连接的时候使用&#xff09; FIN &#xff08;在关闭TCP连接的时候使用&#xff09; 3.TCP建立连接的过程&…

ES解析word内容为空的问题和直接使用Tika解析文档的方案

导言 在上一篇文章最后&#xff0c;我们虽然跑通了ES文件搜索的全部流程&#xff0c;但是仍然出现了1个大的问题&#xff1a;ES7.3实测无法索引docx和doc文档&#xff0c;content有值但是无法解析到附件成为可读的可搜索的内容&#xff0c;附件内容为空&#xff08;附件中根本…