JAVA基础

一. Java的历史

​ Java诞生于1995年,创始人为大胡子gosling,后来给甲骨文公司收购。

二. Java概述

2.1 Java的重要特点

  1. Java是面向对象的(oop)
  2. Java是健壮的,有强类型机制、异常处理、垃圾的自动收集等
  3. Java是跨平台的,生成的class文件可以在各个系统平台运行(基于Java虚拟机JVM)
  4. Java是解释性的(解释性语言编译生成的文件还需要经过一个解释器来运行,而像C/C++是编译性语言,生成的二进制文件可以直接给机器执行)

2.2 JDK.JRE.JVM介绍

  1. JVM是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器,包含在JDK中
    JDK>JRE>JVM
  2. JDK=JRE+开发工具集
  3. JRE=JVM+Java SE标准类库(Java核心类库)如果只想运行开发好的 .class 文件 只需要JRE

2.3配置环境变量path

2.4快速入门

javac hello.java //编译hello.java文件
java hello //运行Java类
//tab补全类
//第一个Java程序
public class hello{//公共类
  public static void main(String[] args){//main函数是程序入口
  System.out.println("hello world!");
  }
}
//文件有中文时,->设置文件编码->GBK(常用为UTF-8

2.5 JAVA注意事项

  1. hello.java 是源文件,hello.class是字节码文件
  2. Java程序的应用入口是main()方法,他有固定的书写格式
  3. Java严格区分大小写。
  4. Java方法由一条条语句构成,每个语句以";"结束。{}都是成对出现的。
  5. 一个源文件中最多只有一个public类,其他类的个数不限。
  6. 如果源文件包含一个public类,则文件名必须和该类名一致。
  7. 可以把main方法写在非public类中,然后指定运行该类,这样程序的入口就是非public类的main方法。因为在编译后,一个类对应一个class文件。

2.6 JAVA学习方法

​ 如何快速学习技术或者知识点?
明确需求:工作需要?入职要求?解题需要?技术控?
看看是否能够用传统的技术解决?能解决但是不完美,或者解决不了。
引出需要学习的新技术或者知识点(明确目标)。
学习新技术或者知识点的基本原理和基本语法(不考虑细节,掌握基础,为建知识大厦做准备)。
快速入门:写一个基本程序,实现基本功能如增删查改。
研究技术的注意事项,注意使用细节和规范,细究优化,永无止境。

2.7 转义字符

\t:一个制表位,实现对齐的功能
\n:换行符
\\:一个\
\":一个"
\':一个'
\r:一个回车,光标返回本行首位 (同一行的最前面)
char c03 = '\r';
//光标移到前面 "c03 = " + '1' + c03 +'2'); 输出为203 = 1

2.8 注释

1)单行注释 //

2)多行注释 /* */

3)文档注释 /** /
/
*
*
*/
Java生成文档注释以网页形式:
javadoc -d 文件名 -xx -yy Demo3.java
javadoc -d 文件名 -author -version comments.java

2.9 Java代码规范

  1. 类、方法的注释,要以javadoc的方式来写。
  2. 非Javadoc的注释,往往是给代码的维护者看的,着重告诉读者为什么这样写,如何修改,注重什么问题。
  3. --使用tab操作,实现整体往右缩进,shift+tab整体往左缩进。--
  4. 运算符(+-= etc)两边习惯加一个空格。
  5. 源文件使用utf-8编码。
  6. 行宽度不超过80。
  7. 代码编写遵循行尾风格,大括号前一个紧跟在实例后面,后一个另起一行的行头。

2.10 常用的dos命令

1)查看当前目录是有什么内容 dir
2)切换到其他盘下 : 盘符号 cd : change directory eg:切换到c盘 cd /D c:
3)切换到当前盘的其他目录下(使用相对路径和绝对路径演示),..\表示上一级目录
4)切换到上一级: cd ..
5)切换到根目录: cd
6)查看指定的目录下所有的子级目录 tree
7)清屏 cls
8)退出 DOS exit
原理:接受命令->解析命令->执行命令。
相对路径:从当前目录开始寻找需要的文件的位置。
绝对路径:从根目录开始寻找需要的文件的位置。

配置环境变量有什么用? 为了Dos系统在任何位置都可以使用Java命令。
Java的编写步骤 1.编写Java源代码 2. 通过Javac编译得到.class的字节码文件 3. 使用Java运行,将字节码文件在jvm中运行

2.数据类型

  • 强类型语言

  • 弱类型语言: js ,vb

  • 基本类型

    • 数值类型
      • 整数:byte,short,int,long;1,2,4,8
      • 浮点数:float,double4,8
      • 字符:char;2
    • 布尔类型:true和false;占一个位
        public class Demo01 {
            public static void main(String[] args) {
                //八大数据类型
                //整数
                int num1 = 10;
                byte num2 = 20;//-128<num2<127
                short num3 = 30;
                long num4 = 30;//Long类型在数字后面加L
                //小数:浮点数
                float num5 = 50.1F;//float类型要在数字后面加个F
                
                double num6 = 3.1415926;
                //字符
                char name = '过';//char  只能写一个
                //字符串,String不是关键字,属于类
                //String namea = “芳芳”;
        
                //布尔值:是与非
                boolean flag = true;
                //boolean flag = false;
        
            }
        }

数据类型拓展

    public class Demo03 {
        public static void main(String[] args) {
            //整数拓展 :进制     二进制0b  十进制   八进制0   十六进制 0x
            int i = 10;
            int i2 = 010;//八进制0
            int i3 = 0x10;//十六进制0x     0~9  A~F  16
    
            System.out.println(i);
            System.out.println(i2);
            System.out.println(i3);
            System.out.println("=====================");
            //============================================================
            //浮点数扩展?银行业务怎么表示? 钱
            //BigDecimal  数学工具类
            //=============================================
            //float  有限  离散   舍入误差  大约  接近但不等于
            //double
            //最好完全使用浮点数进行比较
            //最好完全使用浮点数进行比较
    
            float f = 0.1f;//0.1
            double d = 1.0 / 10;//0.1
            System.out.println(f == d);//false
    
            float d1 = 231312334534f;
            float d2 = d1 + 1;
            System.out.println(d1 == d2);//true
    
            //============================================================
            //字符扩展?
            //=============================================
            char c1 = 'a';
            char c2 = '中';
            //底层原理
            System.out.println(c1);
            System.out.println((int) c1);//强制转换
            System.out.println(c2);
            System.out.println((int) c2);
            //所有字符本质还是数字
            //编码Unicode表:(97 = a 65 = A) 2字节  0-65536 Excel 2^16 = 65536
            //U0000 UFFFF
            char c3 = '\u0061';
            System.out.println(c3);//a
            //转义字符
            //\t  制表符
            //\n   换行
            //....
            System.out.println("Hello\tWord");
            System.out.println("=====================");
            String sa = new String("hello world");
            String sb = new String("hello world");
            System.out.println(sa==sb);//false
            String sc = "hello word";
            String sd = "hello word";
            System.out.println(sc == sd);//true
            //对象  从内存分析
    
            //布尔值扩展
            boolean flag = true;
            if (flag == true) {}//新手
            if (flag) {}
            //Less is More 代码要精简易读
        }
    }
    

3. 类型转换

4.变量、常量

5.运算符

6.包机制、JavaDoc

Java流程控制

1、用户交互Scanner

Scanner对象

通过Scanner类的next()和nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。

    java.util.Scanner
        //基础用法
        Scanner s = new Scanner(system.in);
    //hasnext的用法
    public class Demo01 {
        public static void main(String[] args) {
            //创建一个扫描对象,用于接收键盘数据
            Scanner scanner = new Scanner(System.in);
            System.out.println("用next方式接收");
            //判断用户有没有输入字符串
            if(scanner.hasNext()){
                //使用next方式接收
                String str = scanner.next();
                System.out.println("输出内容为:"+str);
            }
               //凡是属于IO流的类如果不关掉会一直占用资源,要养成良好习惯
            scanner.close();
        }
    }
    //hasnextline
    public class Demo02 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("用next方式接收");
    
            if(scanner.hasNextLine()){
                //使用next方式接收
                String str = scanner.nextLine();//程序会等待用户输入完毕
                System.out.println("输入内容:"+str);
            }
            //凡是属于io流的类如果不关闭会一直占用资源,用完就要关闭
            scanner.close();
        }
    }
    /**
    *nextline的使用方法不用判断
    */
    public class Demo03 {
        public static void main(String[] args) {
            //从键盘接收数据
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("请输入数据");
    
                String str = scanner.nextLine();
    
                System.out.println("输入内容:"+str);
            //凡是属于io流的类如果不关闭会一直占用资源,用完就要关闭
            scanner.close();
        }
    }
    
     //输入多个数字,并求其总和与平均数,每日输入一个数字用回车确定,通过输入非数字来结束并输出执行结果;
    public class Demo05 {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            double sum = 0;
            //计算输入多少个数字
            int i =0;
    
            //通过循环判断是否还有输入,并在循环里每一次进行求和和统计
            while (scanner.hasNextDouble()){
                double x = scanner.nextDouble();
                i = i + 1;//m++
                sum = sum + x;
            }
            System.out.println(i +"个数的和为"+ sum);
            System.out.println(i + "个数的平均值是"+(sum/i));
            
            scanner.close();
    
        }
    }

Ctrl 点击类:可查看方法

2、顺序结构

顺序结构是最基本的结构

3、选择结构

  • if单选择结构
      if(布尔表达式){
          //表达式为true则执行
      }
  • if双选择结构
      if(布尔表达式){
          //表达式为true则执行
      }else{
          //如果布尔表达式为false
      }
  • if多选择结构
    • if语句至多有一个else语句。else在所有的else if之后
  • if语句可以有多个else if语句,必须在else之前
    • 一旦其中一个else if检测为true,其他的else if 以及else 都将跳过执行
      if(布尔表达式1){
          //表达式1为true则执行
      }else if(布尔表达式2){
          //表达式2为true则执行
      }else if(布尔表达式3){
          //表达式3为true则执行
      }
      else{
          //如果以上布尔表达式为false
      }
  • if嵌套结构
      if(布尔表达式1){
          //如果布尔表达式1的值为true执行代码
          if(布尔表达式2){
              //如果布尔表达式2的值为true执行代码
          }
      }
  • switch多选择结构
    • switch case语句
      --case没有写break有穿透现象
      --switch 匹配一个具体的值
      switch(expession){
          case value:
              //语句
              bleak;//可选
          case value:
              //语句
              bleak;//可选
             //可以有任何数量的语句
          default://可选
              //语句
              
      }
      // switch在javase7开始支持string

4、循环结构

  • while循环
    避免死循环
      while(布尔表达式){
          //循环内容
      }
      //需要一个表达式失效来结束循环
  • do...while循环
    • 如果至少
      do{
          //代码语句
      }while(布尔表达式)
  • While和do-while的区别
    while先判断后执行,dowhile是先执行后判断
    do....while至少执行一次
  • for循环: 最有效最灵活的循环结构
      for(初始化;布尔表达式;更新){
          //代码语句
      }
      //最开始执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。然后检测布尔表达式的值。如果为true,循环体被执行,如果为false,循环终止,开始执行循环体后面的语句。执行一次循环后,更新控制变量(迭代因子控制变量的增减)。再次检测布尔表达式。循环执行上述过程
  • Java5引入了一种主要用于数组和集合的增强型for循环
      for(声明语句:表达式)
      {
          //代码句子
      }
      //声明语句:声明新的局部变量
      //表达式:表达式要访问的数组名

5、break&continue

  • break用于强行退出循环
  • continue用于终止某次循环过程,即跳过循环体尚未执行的语句
    • break与continue的不同
      break强行退出循环,不执行循环剩余语句
      continue跳过循环体中尚未执行的语句,,接着进行下一次是否执行循环判定
  • 关于goto关键字
    java没有goto带标签的break和continue

6、test

打印三角形

    for
        for
        for

java方法

1、何谓方法:函数,是一段完成特定功能的代码片段

    System.out.println()
        类.对象.方法
    //包含一个方法头和方法体
    
    修饰符 返回类型 方法名(参数类型 参数名){
        方法体
        return 返回值;
    }
  • 方法是语句的集合
  • 命名规范:首字母小写按照驼峰书写规范
  • 参数:形参和实际参数

2、方法的定义及调用:java都是值传递

  • 调用方法:对象名.方法名(实参列表)
  • Java支持两种调用方法
    • 方法返回一个值时,方法调用通常被当作一个值
        int larger = mac(30,40);
  • 方法返回值为void,方法调用一定是一条语句
        System.out.println("hello!")

值传递和引用传递

3、方法的重载

  • 方法名称相同
  • 参数列表必须不同
  • 返回类型可相同可不同
  • 仅仅返回类型不同不足以成为方法重载

4、命令行传参

5、可变参数

6、递归

A方法自己调用自己

主要包括递归头和递归体

数组

1、数组概述

  • 数组是相同类型的有序集合
  • 先后次序
  • 每个数组元素通过下标来访问他们

2、数组声明创建

    dataType[] arrayRefVar;

使用new操作符创建数组

    dataType[] arrayRefVar = new dataType[arraySize];
  • 数组索引从0开始
  • 获取数组长度:arrays.length =

java.lang.ArrayIndexOutOfBoundsException 数组下标越界

数组的基本特点

  • 长度是确定的
  • 元素必须是相同类型
  • 可以是任何数据类型:基本类型和引用类型
  • 数组也是对象,数组元素相当于成员变量

3、数组使用

  • For-Each
  • 数组作为方法入参
  • 数组作返回值

4、多维数组

djfjh

5、Arrays类

    打印数组元素:Arrays.toString
    对数组进行排序主要为升序:Arrays.sort
    public static void printArray(int[] a){
    
        for (int i = 0; i < a.length ; i++){
            if( i==0){
                System.out.print("[");
            }
            if(i==a.length-1){
                System.out.print(a[i]+"]");
            }else {
                System.out.print(a[i]+",");
            }
    
        }

6、稀疏数组

  • 当一个数组大部分元素为0,或为同一值的数组时,可以使用稀疏数组来保存该数组
  • 把具有不同值的元素和行列及值记录在小规模的数组中
  • 6行7列8个数值
    第0行第3列值为22

            //array1.for:输出下方ints
            for (int[] ints : array1) {
                //ints.for
                for (int anInt : ints) {
                    System.out.print(anInt + "\t");
                }
                System.out.println();
            }

面向对象

1、初识

面向过程(具象)&&面向对象(抽象)

  • 线性思维;分类的思维
  • 宏观面向对象,微观面向过程

本质:以类的方式组织代码,以对象的方式组织(封装)数据

抽象: 编程思想 持续学习!

三大特性

  • 封装
  • 继承:
  • 多态:同一个事物不同种形式

先有对象后有类(认识论)--> 现有类后有对象,类是对象的模板(教书-->老师)

2、方法回顾加深

方法的定义

  • 修饰符
  • 返回类型
  • break:跳出switch,结束循环 和return的区别
  • 方法名:注意规范;见名知意
  • 参数列表:(参数类型,参数名) ...
  • 异常抛出:??

方法的调用:递归

  • 静态方法
      public class Demo02 {
          public static void main(String[] args) {
              //student.say()静态方法可直接调取
            //实例化这个类 new
            //对象类型 对象名 = 对象值;
             Student student = new Student();
              student.say();
          }
      }
      
      public class Student {
          //public static say()静态
          public void say(){
              System.out.println("学生说话");
          }
      }
  • 非静态方法
      //和类一起加载的
          public static void a(){
              b();
          }
          //类实例化 之后才存在
          public void b(){
              
          }
  • 形参和实参
      //法一
      public class Demo03 {
          public static void main(String[] args) {
          --->                     <-------
              new Demo03().add(1,3);
          }
          public int add(int a,int b){
              return a+b;
          }
      }
      //法二
      public class Demo03 {
          public static void main(String[] args) {
              Demo03.add(1,3);
          }
          public static int add(int a,int b){
              return a+b;
          }
      }
    ```  
- 值传递和引用传递
```java
      package Icy.oop;
      //值传递
      public class Demo04 {
          public static void main(String[] args) {
              int a = 1;
              System.out.println(a);//1
              Demo04.change(a);
              System.out.println(a);//1
          }
          public static void change(int a){
              a = 10;
          }
      }
      
      package Icy.oop;
      //引用传递:对象,本质还是值传递
      public class Demo05 {
          public static void main(String[] args){
              Person person = new Person();
              System.out.println(person.name);//null
              Demo05.change(person);
              System.out.println(person.name);
          }
      
          public static void change(Person person){
            //person是个对象:指向的 ---> Person person = new Person();这是个具体的人,可以改变属性
             person.name = "阿拉玛";
          }
      
      }
      
      //定义了一个Person类,有一个属性:name
      class Person{
          String name;//null
      }
  • this关键字

3、对象的创建分析

1. 创建初始化对象

  • 使用new关键字创建对象

  • 创建类中的构造器==构造方法
    特点
    1. 必须与类名相同
    2. 必须没有返回值
    作用
    1. 使用new关键字,本质是调用构造器
    2.用来初始化对象的值
    注意点
    1. 定义有参构造之后,如果想用无参构造,必须定义一个无参构造

  • 创建对象内存分析

小结

  1. 类与对象
    类是一个模板:抽象,对象是一个具体实例
  2. 方法
    定义,调用
  3. 对应的引用
    引用类型:基本类型(8种)
    对象是通过引用来操作的:栈(引用)--->堆(new)
  4. 属性:字段field 成员变量
    默认初始化:
    数字:0 0.0
    char:u0000
    Boolean:false
    引用:null

修饰符 属性类型 属性名 = 属性值

5.对象的创建和使用

  • 必须使用new 关键字创建对象,构造器Person person = new Person();
  • 对象的属性 person.name
  • 对象的方法 person.sleep()
    6.类:
    静态属性 属性
    动态行为 方法

4、面向对象三大特性

1. 封装:高内聚,低耦合

属性私有:get/set 属性私有private

    package demo04;
    
    public class Student {
        private String name;
        private int id;
        private char sex;
        private int age;
        //提供一些public的 get set 方法
    
        //get 获得这个数据
        public String getName(){
            return this.name;
        }
        //set 给这个数据设置值
        public void setName(String name) {
            this.name = name;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public char getSex() {
            return sex;
        }
    
        public void setSex(char sex) {
            this.sex = sex;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            if (age < 0 || age > 120){//大于121,小于0
            this.age = 3;
            } else {
                this.age = age;
            }
        }
    }
    
    //import demo04.Student;
    ///*
    // * 1. 提高代码的安全性,保护数据
    // * 2. 隐藏代码实现细节
    // * 3.统一接口
    // * 4.系统可维护增加
    // * */
    //public class Application {
    //    public static void main(String[] args) {
    //        Student s1 = new Student();
    //        s1.setName("zhangsan");
    //        System.out.println(s1.getName());
    //        s1.setAge(121);
    //        System.out.println(s1.getAge());
    //
    //    }
    //}

2. 继承

  • 2.1extends 子类是父类的扩展

  • 2.2 继承是类与类之间的关系,类只有单继承

  • 2.3所有类,都默认直接或间接继承object类

super vs this

调用父类vs 调用自己

    super注意点:
    1.super();//调用父类的构造器必须在子类构造器的第一行
    2.super 和 this不能同时调用构造方法
    
    super vs this
       代表的对象不同:
         this 本身调用这个对象
         super 代表父类对象的应用
     前提
        this 没有继承也能使用
        super 只能在继承条件才可以使用
     构造方法
        this();本类的构造
        super()父类的构造

重写 @Override(子类重写父类)

重写都是方法的重写跟属性无关

静态方法和非静态方法的区别很大===静态方法:方法调用只和左边相关

重写:需要又继承关系,子类重写父类的方法
1. 方法名必须相同
2. 参数列表必须相同
3.修饰符:范围可以扩大但不能缩小 public > protected > default > private
4. 抛出异常:范围可以缩小但不能扩大 ClassNotFoundException --> Exception
重写,子类的方法和父类的必须一致,但方法体不同

3. 多态

多态注意事项
1.多态是方法的多态,属性没有多态
2.父类和子类,有联系 没联系会出现类型转换异常ClassCastException
3.存在条件 继承关系方法需要重写,父类引用指向子类对象 Father f1 = new Son();
不能使用多态:
- static 方法,属于类,不属于实例
- final 常量,就无法继承了
- private方法

instance of

      //Object >Person > student
            //Object > String
            //Object > Person > Teacher
            Object obj = new Student();
            System.out.println(obj instanceof Student);
            System.out.println(obj instanceof Person);
            System.out.println(obj instanceof Teacher);
            System.out.println(obj instanceof String);
    //        System.out.println(Person instanceof String);编译报错

    - 把子类转化为父类,向上转型
    - 把父类转化成子类,向下转型 强转
    
    

Static

    package demo07;
    
    public class Person {
        //2
        {
            System.out.println("代码块(匿名代码块)");//代码块(匿名代码块)
        }
        //1
        static{//与类一起执行永久只执行一次
            System.out.println("静态代码块");
        }
        //3
        public Person(){
            System.out.println("构造方法");
        }
    
        public static void main(String[] args) {
            Person p1 = new Person();
            System.out.println("==============");
            Person p2 = new Person();
        }
    }
    

5、抽象类和接口

抽象类: 具体实现和规范(抽象方法)abstract

    package demo08;
    //abstract 抽象类: extends是单继承(但接口可以多继承)
    public abstract class Action {
        //进行制约,子类实现方法
        //abstract 只有方法名字,没有方法实现
    
        public Action() {
        }
    
        public abstract void dosomething();
        //1.不能new这个抽象类,只能靠子类去实现,约束
        //2. 抽象类可以写普通方法
        //3.抽象方法必须在抽象类中
        //抽象的抽象:约束
        public void hello(){
        }
        //不能new  存在构造器嘛,存在
        //存在的意义是提高开发效率
    }
    
    ```

###接口:只有规范,专业的约束,约束和实现分离 interface

    1. 进行约束
    2.定义一些方法,让不同的人实现
    3. 默认的方法都是public abstract
    4.常量 public static final
    5. 接口不能被实例化,接口中没有构造方法
    6. implement 可以实现多个接口
    7.必须重写接口中的方法
    8.总结博客
    





##6、内部类以及opp实战

内部类就是在一个类内部再定义一个类
```java
    package demo10;
    
    public class Outer {
        private int id = 12;
        public void out(){
            System.out.println("这是外部类");
        }
        public class Inner{
            class method{
                //局部内部类
            }
            public void in(){
                System.out.println("这是内部类");
            }
            //能获得外部类的私有属性
            public void getId(){
                System.out.println(id);
            }
        }
        //一个java类中可以有多个class类,但只能有一个public class
        class A{
    
        }
    }
    
 
    Application.java
    
    
            Outer outer = new Outer();
            //通过外部类来实例化内部类
            Outer.Inner inner = outer.new Inner();
            inner.in();
            inner.getId();

7. 异常

1. 异常

Exception

检查性异常

运行时异常

错误

2.异常体系结构

java.lang.Throwable

QQ图片20260701204107

Error 由Java虚拟机生成抛出

Error时程序无法控制和处理的,exception是可以被程序处理的

3. Java异常处理机制

抛出异常

捕获异常

异常处理五个关键字

  • try catch、finally、throw、 throws

4. 处理异常

    package exception;
    
    public class Test {
        public static void main(String[] args) {
            int a = 1;
            int b = 0;
            //要捕获多个异常,要从小到大
            try {//try监控区域
                if (b == 0){//throw throws
                    throw new ArithmeticException();//主动抛出异常
    
                }
                new Test().a();
                }catch (Error e) {//捕获异常
                System.out.println("Error");
            }catch (Exception e){
                System.out.println("Exception");
    
            }catch (Throwable e){
                System.out.println("Throwable");
    
            } finally {
                System.out.println("finally");
            }//finally 可以不要,但设置I/O的时候需要资源关闭
    
        }
       public void a(){b();}
        public void b(){a();}
    }
    主动抛出
    package exception;
    
    public class Test {
        public static void main(String[] args) {
            int a = 1;
            int b = 0;
            //要捕获多个异常,要从小到大
            try {//try监控区域
    
                new Test().Test(1,0);
                }catch (ArithmeticException e) {//捕获异常
                System.out.println("Error");
            }
    
    
        }
        //方法中主动抛出是throw ,处理不了,在方法上抛出异常throws
       public void Test(int a,int b)throws ArithmeticException{
           if (b == 0){//throw throws
               throw new ArithmeticException();//主动抛出异常
    
           }
       }
    
    }
    

5. 自定义异常

    package exception.demo02;
    //自定义异常
    public class MyException extends Exception{
        //数字大于10
        private int detail;
        //构造器
    
        public MyException(int a){
            detail=a;
        }
    
        //toString
    
        @Override
        public String toString() {
            return "MyException{" +
                    "detail=" + detail +
                    '}';
        }
    }
    
    
    
    test.java
    package exception.demo02;
    
    public class Test {
        static void test(int a) throws MyException{
            if (a > 10){
                throw new MyException(a);//抛出
            }
            System.out.println("ok");
        }
    
        public static void main(String[] args) {
            try {
                test(11);
            } catch (MyException e) {
                System.out.println("exception => " + e);
            }
        }
    }
  1. 总结

![QQ图片20260701203958](https://img2024.cnblogs.com/blog/28126QQ图片20260701204107
26/202607/2812626-20260701204034760-1077995761.png)

posted on 2025-01-21 22:16  Icy_yayaya  阅读(84)  评论(0)    收藏  举报