【Java回顾】Day2 正则表达式----异常处理

参考资料:菜鸟教程

https://www.runoob.com/java/java-exceptions.html

正则表达式 有一部分没看完

  • 介绍
    • 字符串的模式
    • 搜索、编辑或处理文本
    • java.util.regex包,包含了pattern和mathcer类,用于处理正则表达式的匹配操作。
  • 捕获组
    • 把多个字符当一个单独单元进行处理,堆括号内的字符分组来创建。从左到有看左括号来编号分组
    • (A(B©))
      • ((A)(B)©)
      • (A)
      • (B©)
      • ©
复制代码
  import java.util.regex.Matcher;//查找,匹配,替换
  import java.util.regex.Pattern;//编译正则表达式
  public class RegexMatches
  {
      public static void main( String[] args ){

          // 按指定模式在字符串查找
          String line = "This order was placed for QT3000! OK?";
          String pattern = "(\\D*)(\\d+)(.*)";
          //(\D*)匹配0或多个非数字字符;(\d+)匹配1或多个数字字符;(.*)匹配0或多个任意字符


          // 创建 Pattern 对象,编译正则表达式
          Pattern r = Pattern.compile(pattern);

          // 现在创建 matcher 对象
          Matcher m = r.matcher(line);
          //
          if (m.find( )) {//查找下一个匹配项
              System.out.println("Found value: " + m.group(0) );//整个捕获
              System.out.println("Found value: " + m.group(1) );
              System.out.println("Found value: " + m.group(2) );
              System.out.println("Found value: " + m.group(3) );
          } else {
              System.out.println("NO MATCH");
          }
      }
  }
  • JAVA转义语法
    • Java 的正则表达式中,两个 \ 代表其他语言中的一个 ****, \\d
  • Matcher类的方法

Java 方法

  • System.out.println()

    • println() 方法
    • System 系统类
    • out 标准输出对象
  • 命名:以小写字母为首,后面的单词则用大写字母开头写,不使用连接符

  • 组成

    复制代码
    修饰符 返回值类型 方法名(参数类型 参数名){
        ...
        方法体
        ...
        return 返回值;
    }
  • 在一些其它语言中方法指过程和函数。一个返回非void类型返回值的方法称为函数;一个返回void类型返回值的方法叫做过程。

  • 方法签名:返回类型、方法名和参数列表。方法重载,例如int方法换为double方法

  • 变量作用域

    • 方法内的参数是一个局部变量
  • 构造方法(Constructor)

    • 创建类的对象的特殊方法,当使用new,构造方法会自动调用。
    • 方法名与类名相同
    • 没有返回类型,也没有void
    • 可以重载
    • 用于在在创建对象时初始化对象的状态
  • 可变参数,可以指定不定量的参数,必须是最后一个参数。

    • typeName... parameterName

Java构造方法

  • 作用

    • 初始化对象的属性
    • 保证对象初始化的完整性
  • 特点

    • 与类名相同
    • 没有返回类型 也没有void
    • 自动调用
    • 不能直接调用 new
    • 支持重载
    • 默认构造方法
    • this关键字使用
    • 不能被继承,但可以被调用
    • 对象初始化保障
  • 构造方法的类型

    • 无参构造方法

      • 默认 public Person(){}
    • 有参构造方法

      • 在创建对象时为属性赋值
      复制代码
        public class Person {
            String name;
            int age;
      
            public Person(String name, int age) {
                this.name = name;
                this.age = age;
            }
        }
      • Person p = new Person("Alice", 25);
  • 构造方法的重载

    • 在同一个类中定义多个构造方法,只要参数列表不同即可
  • 构造方法中的this关键字

    • 引用当前对象的属性和方法

    • 调用另一个构造方法

      • 使用 this() 调用当前类的其他构造方法

      public Person(String name) {

      this(name, 0); // 调用另一个双参数的构造方法

      }

      public Person(String name, int age) {

      this.name = name;

      this.age = age;

      }

Java流(Stream)、文件(File)、IO

  • 允许程序与外部数据(文件、网络、系统输入等)进行交互
  • 核心包:java.io 处理数据流、文件读写、序列化以及数据格式化的工具
  • 输入流从一个源读取数据,输出流标识向一个目标写数据

步骤

  • 读取控制台输入
    • 输入由System.in完成

    • 获得一个绑定到控制台的字符流

      复制代码
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      • System.in 输入流
      • InputStreamReader(System.in) 将字节流转换为字符流
      • BufferedReader 缓冲字符输入流,它通过缓冲区提高了读取效率
  • 从控制台读取多字符输入
    • int read( ) throws IOException
    • 每次调用 read() 方法,它从输入流读取一个字符并把该字符作为整数值返回。 当流结束的时候返回 -1。该方法抛出 IOException
  • 从控制台读取字符串
    • BufferedReader 的 readLine() 方法
    • String readLine( ) throws IOException
  • 控制台输出
    • print()
    • println()
    • 由类PrintStream定义,其继承了OutputStream类,并且实现了方法write()。写操作。System.out是该类对象的一个引用。
    • void write(int byteval) //将 byteval 的低八位字节写到流中
  • 读写文件
    • 字节流(处理二进制数据,文本、图像、视频等)
    • 字符流(处理文本数据)
    • 辅助类(其他重要类)辅助类提供对文件、目录以及随机文件访问的支持。

两个重要流

  • FileInputStream
    • 从文件读取数据
    • InputStream f=new FileInputStream("C:/java/hello")
    • File f = new File("C:/java/hello");
      InputStream in = new FileInputStream(f);
  • FileOutputStream
    • 创建一个文件并向文件中写数据,如果不存在就创建该文件
    • OutputStream f=new FileOutputStream("C:/java/hello")
    • File f = new File("C:/java/hello");
      OutputStream fOut = new FileOutputStream(f);

Java的目录

  • File类创建文件夹

    • mkdir() 创建文件夹,成功则返回true,失败则返回false
    • mkdirs() 创建文件夹和它的所有父文件夹
  • 读取目录

    • if(f1.isDirectory()) 如果是目录,返回True
    • 提取它包含的文件和文件夹的列表
    • String s[] = f1.list();
  • 删除目录或文件

    • java.io.File.delete()

Java Scanner 类

  • java.util.Scanner 获取用户的输入
  • Scanner s=new Scanner(System.in);
  • 获取输入的字符串:next() nextLine()
    • next() 和nextLine()区别

      • next() 读到有效字符后才可以结束输入;不能得到带有空格的字符串;对输入有效字符之前的空白,next()自动去掉空格;输入有效后将后面的空格作为分隔符或者结束符
      • nextLine() 以Enter为结束符,返回的是enter之前的所有字符;可以获得空白
  • 判断是否还有输入的数据,hasNext和hasNextLine

Java异常处理

  • 异常是程序中的一些错误,但并不是所有的错误都是异常。
  • 异常发生的原因|用户、程序、物理错误
    • 用户输入了非法数据。
    • 要打开的文件不存在。
    • 网络通信时连接中断,或者JVM内存溢出。

三种异常

  • 检查性异常,用户错误或问题引起的异常,异常在编译时强制要求程序员处理。
    *

    复制代码
      try{
      //可能会抛出异常的代码
      }catch(IOException e){
      //处理异常的代码
      }
复制代码
  public void readFile() throws IOException{
  //可能会抛出IOException
  }
  • 运行时异常 在编译时不强制要求处理,由程序中的错误引起的,例如NullPointerExcepton、ArrayIndexOut、OfBoundsException等
    *

    复制代码
      try{
      //可能会抛出异常的代码
      }catch(NullPointerException e){
      //处理异常的代码
      }
  • 错误:错误不是异常,而是脱离程序员控制的问题,错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,他们在编译也检查不到的。

关键字和类【支持异常处理】

  • try 包裹可能会抛出异常的代码块。
  • catch 捕获异常并处理异常的代码块。
  • finally 包含无论是否发生异常都需要执行的代码块
  • throw 手动抛出异常
  • throws 在方法声明中指定方法可能抛出的异常。
  • Exception 所以异常类的父类,提供一些方法来获取异常信息,如getMessage() printStackTrace()等。

Exception类的层次

  • 从java.lang.Exception类继承的子类。
  • Error 用来指示运行时环境发生的错误。JAVA程序中,通常不捕获错误。

JAVA内置异常类

JAVA异常方法

略,有需要就查表

捕获异常

  • try和catch关键字可以捕获异常,称为保护代码
复制代码
  try{
  //程序代码
  }catch(ExceptionName e1)
  {
  //catch块
  }

多重捕获块 1个try多个catch

  • 一个try代码块后面跟随多个catch代码块的情况,匹配不同的错误类型
复制代码
  try{
     // 程序代码
  }catch(异常类型1 异常的变量名1){
    // 程序代码
  }catch(异常类型2 异常的变量名2){
    // 程序代码
  }catch(异常类型3 异常的变量名3){
    // 程序代码
  }

throws/throw关键字

  • throw 在代码中抛出异常
  • throws 在方法声明中指定该方法可能抛出的异常。当方法内部抛出指定类型的异常时,会处理异常。
  • 一个方法可以声明抛出多个异常,多个异常之间用逗号隔开。

finally关键字

  • 无论是否发生异常,finally代码块中的代码总会被执行。在finally代码块中,可以运行清理类型等收尾善后性质的语句。
复制代码
  try{
    // 程序代码
  }catch(异常类型1 异常的变量名1){
    // 程序代码
  }catch(异常类型2 异常的变量名2){
    // 程序代码
  }finally{
    // 程序代码
  }
  • catch不能独立于try存在,try也不能独立使用。

try-with-resources

  • 自动管理资源,确保资源在使用后能够及时关闭,避免资源泄露。
  • 自动关闭在try块中声明的资源,无需显式地在finally块中关闭。
复制代码
  try (resource declaration) {
    // 使用的资源
  } catch (ExceptionType e1) {
    // 异常块
  }

声明自定义异常

  • 必须是Throwable的子类
  • 检查性异常类,Exception类
  • 运行时异常类,RuntimeException类
  • class MyException extends Exception{
    }

通用异常

  • JVM(Java虚拟机)异常:JVM抛出的异常或错误
  • 程序级异常:由程序或API程序抛出的异常
相关推荐
风象南3 分钟前
SpringBoot 控制器的动态注册与卸载
java·spring boot·后端
蛋仔聊测试13 分钟前
Playwright 中 Page 对象的常用方法详解
python
前端付豪25 分钟前
17、自动化才是正义:用 Python 接管你的日常琐事
后端·python
jioulongzi26 分钟前
记录一次莫名奇妙的跨域502(badgateway)错误
开发语言·python
我是一只代码狗29 分钟前
springboot中使用线程池
java·spring boot·后端
hello早上好42 分钟前
JDK 代理原理
java·spring boot·spring
PanZonghui1 小时前
Centos项目部署之Java安装与配置
java·linux
破无差1 小时前
python实现简单的地图绘制与标记20250705
python
沉着的码农1 小时前
【设计模式】基于责任链模式的参数校验
java·spring boot·分布式
喜欢吃豆1 小时前
目前最火的agent方向-A2A快速实战构建(二): AutoGen模型集成指南:从OpenAI到本地部署的全场景LLM解决方案
后端·python·深度学习·flask·大模型