6、Java 异常处理机制详解

Java-异常处理练习 Java的异常处理机制 阅读详情

开篇概览:异常处理的核心体系

异常(Exception)是程序运行过程中发生的非正常事件,可能导致程序中断。Java 通过结构化异常处理机制,使程序能够捕获、处理或传递异常,从而提升健壮性与可维护性。

Java 异常处理体系包含以下核心内容:

  1. 异常分类:
    • 检查异常(Checked Exception):编译器强制要求处理(如 IOException);
    • 非检查异常(Unchecked Exception):运行时异常,编译器不强制处理(如 NullPointerException);
  2. 异常处理语法:
    • try-catch-finally:捕获并处理异常;
    • throw:手动抛出异常对象;
    • throws:声明方法可能抛出的异常;
  3. 自定义异常:根据业务需求定义专属异常类型;
  4. 最佳实践:何时捕获、何时抛出、如何记录日志等。

掌握这些内容,可编写出容错性强、易于调试、符合规范的 Java 程序。


一、异常分类:Checked vs Unchecked

Java 中所有异常都继承自 java.lang.Throwable,其下分为两大分支:

Throwable
├── Error(错误,通常不可恢复,如 OutOfMemoryError)
└── Exception
    ├── RuntimeException(非检查异常)
    └── 其他 Exception(检查异常)

1.1 检查异常(Checked Exception)

  • 特点:

    • 继承自 Exception 但不继承 RuntimeException;
    • 编译器强制要求处理(要么 try-catch,要么 throws);
    • 通常表示可预见的外部问题(如文件不存在、网络中断)。
  • 常见类型:

    • IOException:输入输出异常;
    • SQLException:数据库操作异常;
    • ClassNotFoundException:类未找到。

1.2 非检查异常(Unchecked Exception)

  • 特点:

    • 继承自 RuntimeException;
    • 编译器不要求处理,但运行时可能抛出;
    • 通常表示程序逻辑错误(如空指针、数组越界)。
  • 常见类型:

    • NullPointerException:空指针;
    • ArrayIndexOutOfBoundsException:数组越界;
    • IllegalArgumentException:非法参数;
    • ArithmeticException:算术异常(如除零)。

✅ 关键区别:

特性Checked ExceptionUnchecked Exception
是否强制处理✅ 是❌ 否
继承关系Exception(非 RuntimeException)RuntimeException
典型场景外部环境问题程序逻辑错误
处理建议必须处理或声明修复代码逻辑,或选择性捕获

二、异常处理语法详解

2.1 try-catch-finally 结构

基本语法:
try {
    // 可能抛出异常的代码
} catch (ExceptionType1 e) {
    // 处理 ExceptionType1
} catch (ExceptionType2 e) {
    // 处理 ExceptionType2
} finally {
    // 无论是否异常,都会执行(常用于资源清理)
}
示例:处理文件读取异常(Checked Exception)
import java.io.*;

public class FileReadDemo {
    public static void main(String[] args) {
        BufferedReader reader = null;
        try {
            // 尝试打开文件(可能抛出 FileNotFoundException)
            reader = new BufferedReader(new FileReader("不存在的文件.txt"));
            String line = reader.readLine();
            System.out.println("文件内容: " + line);
        } catch (FileNotFoundException e) {
            // 捕获文件未找到异常
            System.out.println("【错误】文件未找到: " + e.getMessage());
        } catch (IOException e) {
            // 捕获其他 IO 异常(如读取失败)
            System.out.println("【错误】读取文件时发生 IO 异常: " + e.getMessage());
        } finally {
            // 无论是否异常,都尝试关闭资源
            if (reader != null) {
                try {
                    reader.close();
                    System.out.println("文件读取器已关闭。");
                } catch (IOException e) {
                    System.out.println("关闭文件时出错: " + e.getMessage());
                }
            }
        }
    }
}

💡 注意:

  • catch 块按从具体到一般顺序排列(如先 FileNotFoundException,再 IOException);
  • finally 总是执行(除非 JVM 退出或 System.exit())。

2.2 Java 7+ 的 try-with-resources(推荐)

try-with-resources 是 Java 7 引入的一个非常实用的语法糖,用于自动管理资源(如文件流、数据库连接等)。它可以确保在语句结束时每个资源都被自动关闭,避免了繁琐的 finally 块和手动关闭操作。

核心示例:读取文件内容

下面的示例演示了如何使用 try-with-resources 来自动关闭 FileInputStream 和 BufferedReader。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class TryWithResourcesExample {

    public static void main(String[] args) {
        // 指定要读取的文件路径
        String filePath = "example.txt";

        // 【关键语法】try-with-resources
        // 在 try 关键字后面的括号中声明和初始化一个或多个资源
        // 这些资源必须实现了 AutoCloseable 接口(例如所有的 IO 流)
        try (// 1. 创建一个 FileReader,用于读取字符文件
             FileReader fileReader = new FileReader(filePath);
             // 2. 创建一个 BufferedReader,包装 FileReader,提供缓冲功能,提高读取效率
             // 注意:多个资源之间用分号 ; 隔开
             BufferedReader bufferedReader = new BufferedReader(fileReader)) {

            // 这里是 try 块的正常代码逻辑,用于处理资源
            System.out.println("开始读取文件内容:");
            String line;
            // 循环读取文件的每一行,直到返回 null(表示文件结束)
            while ((line = bufferedReader.readLine()) != null) {
                // 打印每一行的内容
                System.out.println(line);
            }
            System.out.println("文件读取完毕。");

        } catch (IOException e) {
            // 捕获并处理在创建资源或处理资源过程中可能发生的IO异常
            // 例如:文件不存在、无读取权限等
            System.err.println("读取文件时发生错误: " + e.getMessage());
            e.printStackTrace();
        }

        // 【核心优势】当程序执行离开 try 块(无论是正常结束还是发生异常)时,
        // JVM 会自动调用 bufferedReader 和 fileReader 的 .close() 方法,
        // 并且关闭的顺序与声明的顺序相反(先声明的后关闭)。
        // 我们不需要在 finally 块中手动关闭它们,代码更简洁,且绝不会忘记关闭资源。
    }
}

与传统 try-catch-finally 方式的对比

为了突出 try-with-resources 的优势,我们看一下传统写法:

// 传统方式:需要在 finally 中手动关闭资源
BufferedReader bufferedReader = null;
FileReader fileReader = null;

try {
    fileReader = new FileFileReader(filePath);
    bufferedReader = new BufferedReader(fileReader);

    String line;
    while ((line = bufferedReader.readLine()) != null) {
        System.out.println(line);
    }

} catch (IOException e) {
    System.err.println("读取文件时发生错误: " + e.getMessage());
    e.printStackTrace();
} finally {
    // 手动关闭资源,代码冗长且容易出错
    if (bufferedReader != null) {
        try {
            bufferedReader.close(); // 关闭外层流
        } catch (IOException e) {
            e.printStackTrace(); // 关闭时也可能发生异常,需要处理
        }
    }
    if (fileReader != null) {
        try {
            fileReader.close(); // 关闭内层流
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

总结 try-with-resources 的优点:

✅ 优势:

  • 简洁性:代码量大幅减少,更易读。
  • 可靠性:由 Java 自动管理资源关闭,杜绝了因忘记在 finally 块中关闭而导致的资源泄漏。
  • 异常处理更清晰:如果在 try 块内发生异常,并且关闭资源时也发生了异常,try-with-resources 会抑制关闭时抛出的异常,并将第一个异常(即 try 块内的异常)作为主要异常抛出,关闭时的异常会被添加到主要异常的“被抑制的异常”列表中,可以通过 getSuppressed() 方法获取。这避免了异常信息被覆盖,使得问题根因更容易被定位。

因此,在处理任何实现了 AutoCloseable 接口的资源时,都应优先使用 try-with-resources。


2.3 throw 与 throws

关键字作用使用位置
throw抛出一个异常对象方法体内
throws声明方法可能抛出的异常类型方法签名
示例:throw 手动抛出异常
public class ThrowDemo {
    public static void checkAge(int age) {
        if (age < 0) {
            // 手动抛出非法参数异常(Unchecked)
            throw new IllegalArgumentException("年龄不能为负数: " + age);
        }
        if (age > 150) {
            // 抛出自定义异常(见后文)
            throw new InvalidAgeException("年龄超出合理范围: " + age);
        }
        System.out.println("年龄验证通过: " + age + " 岁");
    }

    public static void main(String[] args) {
        try {
            checkAge(-5); // 触发异常
        } catch (IllegalArgumentException e) {
            System.out.println("捕获到异常: " + e.getMessage());
        }
    }
}
示例:throws 声明异常
import java.io.*;

public class ThrowsDemo {
    // 声明该方法可能抛出 IOException(Checked Exception)
    public static void readFile(String filename) throws IOException {
        FileReader file = new FileReader(filename); // 可能抛出 FileNotFoundException
        // ... 读取文件逻辑
        file.close();
    }

    public static void main(String[] args) {
        try {
            readFile("test.txt");
        } catch (IOException e) {
            System.out.println("调用方处理异常: " + e.getMessage());
        }
    }
}

✅ 规则:

  • throws 用于传递异常给调用者;
  • Checked Exception 必须通过 throws 或 try-catch 处理;
  • Unchecked Exception 可选择是否 throws。

三、自定义异常

当标准异常无法准确描述业务错误时,应定义自定义异常。

3.1 定义自定义异常类

  • 继承 Exception(Checked)或 RuntimeException(Unchecked);
  • 通常提供构造方法(含消息、原因)。
示例:定义业务异常
// 中文注释:自定义“无效年龄异常”,继承 RuntimeException(非检查异常)
class InvalidAgeException extends RuntimeException {
    public InvalidAgeException(String message) {
        super(message); // 调用父类构造器
    }

    public InvalidAgeException(String message, Throwable cause) {
        super(message, cause);
    }
}

// 中文注释:自定义“账户余额不足异常”,继承 Exception(检查异常)
class InsufficientBalanceException extends Exception {
    private double currentBalance;
    private double requiredAmount;

    public InsufficientBalanceException(double current, double required) {
        super("余额不足!当前余额: " + current + ", 需要: " + required);
        this.currentBalance = current;
        this.requiredAmount = required;
    }

    // 提供额外信息的 getter
    public double getCurrentBalance() { return currentBalance; }
    public double getRequiredAmount() { return requiredAmount; }
}

3.2 使用自定义异常

public class BankAccount {
    private double balance;

    public BankAccount(double initialBalance) {
        this.balance = initialBalance;
    }

    // 取款方法:可能抛出检查异常
    public void withdraw(double amount) throws InsufficientBalanceException {
        if (amount > balance) {
            // 抛出自定义检查异常
            throw new InsufficientBalanceException(balance, amount);
        }
        balance -= amount;
        System.out.println("成功取款 " + amount + " 元,当前余额: " + balance);
    }

    public static void main(String[] args) {
        BankAccount account = new BankAccount(100.0);
        try {
            account.withdraw(150.0); // 余额不足,抛出异常
        } catch (InsufficientBalanceException e) {
            System.out.println("【业务异常】" + e.getMessage());
            System.out.println("差额: " + (e.getRequiredAmount() - e.getCurrentBalance()) + " 元");
        }
    }
}

✅ 自定义异常设计建议:

  • 业务规则错误 → Unchecked(如参数非法);
  • 外部依赖失败 → Checked(如支付失败、网络超时);
  • 包含足够上下文信息(如错误码、参数值)。

四、异常处理最佳实践

✅ 推荐做法

  1. 不要忽略异常:
    try { ... } catch (Exception e) {
        // ❌ 错误:空 catch 块
    }
    
  2. 记录日志:
    catch (IOException e) {
        logger.error("文件读取失败", e); // 记录堆栈
        throw new ServiceException("服务不可用", e); // 转换为业务异常
    }
    
  3. 使用具体异常类型:
    • 避免 catch (Exception e),优先捕获具体异常;
  4. 资源使用 try-with-resources;
  5. 自定义异常命名清晰(如 UserNotFoundException)。

❌ 避免做法

  • 在 catch 中仅打印 e.printStackTrace()(生产环境应记录日志);
  • 捕获异常后不处理也不抛出(“吞异常”);
  • 在 finally 中使用 return(会覆盖 try 中的 return)。

五、总结

机制说明使用场景
Checked Exception编译器强制处理外部环境问题(IO、DB)
Unchecked Exception运行时异常程序逻辑错误
try-catch-finally捕获并处理异常局部错误恢复
try-with-resources自动资源管理文件、网络、数据库连接
throw主动抛出异常业务校验失败
throws声明异常传递方法不处理,交由调用者
自定义异常业务语义化错误提升代码可读性与维护性

📌 核心思想:
“异常是程序的一部分,不是错误的代名词。”
合理使用异常机制,能让程序在面对不确定性时优雅降级、快速定位、安全恢复,是构建高可靠系统的关键能力。

H无穷控制学习笔记——加权灵敏度H无穷控制问题 一、加权灵敏度H无穷问题 系统结构如上图所示。被控对象P的状态空间方程为(Ap,Bp,Cp,DpA_p,B_p,C_p,D_pAp​,Bp​,Cp​,Dp​),加权函数W1的状态空间方程为(A1,B1,C1,D1A_1,B_1,C_1,D_1A1​,B1​,C1​,D1​),加权函数W2的状态空间方程为(A2,B2,C2,D2A_2,B_2,C_2,D_2A2​,B2​,C2​,D2​),加权函数W3的状态空间方程为(A3,B3,C3,D3A_3,B_3,C_3,D_3A3​,B3​,C3​,D3​)。 阅读详情

相关推荐

从安装到跑通第一个例程:Halcon 20.11深度学习版环境搭建全记录

本文详细记录了Halcon 20.11深度学习版环境搭建的全过程,从安装配置到运行第一个例程,特别针对CUDA版本冲突、算子验证和样本数据预处理等常见问题提供解决方案。通过实战案例展示PCB缺陷分类流程,帮助工程师快速掌握工业级图像处理技术,提升深度学习模型在工业质检中的应用效率。

weixin_28739079的博客 220

详细分析Java中断机制

1. 引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时……都需要通过一个线程去取消另一个线程正在执行的任务。Java没有提供一种安全直接的方法来停止某个线程,但是Java提供了中断机制。 如果对Java中断没有一个全面的了解,可能会误以为被中断的线程将立马退出运行,但事实并非如此。中断机制是如何工作的?捕获或检测到中断后,是抛出

浮白 1986

2月底速申!国家超算互联网免费算力全攻略|编程小白零消耗实操首测_2026-02-26

2月底速申!国家超算互联网免费算力全攻略|编程小白零消耗实操首测作为一名编程小白,我目前正在学习编译和运行 Qt 框架,也在逐步摸索开发环境的配置方法,目标是打造一款属于自己的个人效率工具。就在这时,我挖到了一个国家级硬核福利:国家超算互联网核心节点开放免费试运行!哪怕是零基础如我,也能申领到 100 卡时异构加速卡算力,关键是——2 月底前申请更稳妥,早占位早使用。

qq_58517981的博客 2095

【无标题】

java

la_la22的博客 90

DeepSeek高阶应用:DeepSeek+Coze构建智能文献综述与趋势分析自动化系统

本文详细介绍了如何利用DeepSeek与Coze构建智能文献综述与趋势分析自动化系统。通过DeepSeek的深度语义理解和结构化信息提取能力,结合Coze的可视化工作流编排,实现学术论文的自动解析、分类整理与知识入库。该系统能7x24小时自动追踪领域前沿,将研究人员从繁琐的文献处理中解放出来,专注于更高层次的思考与创新。

weixin_29050271的博客 179

科研——BIBM论文修改和提交

BIBM的相关操作流程汇总

Blackoutdragon的博客 6688

中断与异常机制工作原理

1.软硬件分工: 硬件 —— 中断/异常响应: 捕获中断源发出的中断/异常请求,以一定方式响应,将处理器控制权交给特定的处理程序。 软件 —— 中断/异常处理程序: 识别中断/异常类型并完成相应的处理。 2.中断响应过程: (中断向量:一个内存单元,存放中断处理程序入口地址和程序运行时所需的处理机状态字) 中断响应步骤: ① 设备发中断信号。 ② 硬件保存现场(PC、PSW的内...

莫问收获,但问耕耘 3164

8.5华为OD机试真题 新系统 - IPv4 等长子网划分与自动分配系统 (Java/Py/C/C++/Js/Go)

8.5华为OD机试真题 新系统 - IPv4 等长子网划分与自动分配系统 (Java/Py/C/C++/Js/Go)

算法大师! 524

【Java教程】Day 6-02 异常处理:异常处理机制

在 Java 中,异常处理通过try...catch语句实现,用于捕获并处理可能出现的异常。异常捕获结构允许我们优雅地处理程序中的错误,并防止程序崩溃。

max202011161630的博客 541

YOLO11后处理优化 | 引入DIoU-NMS替代传统NMS,解决高重叠目标误删,召回率大幅提升

YOLO11模型在密集目标场景下存在NMS后处理导致的漏检问题。本文提出采用DIoU-NMS替代传统NMS,通过引入中心点距离信息,有效区分重叠但不同的目标,提升召回率。文章详细分析了传统NMS的三大局限性,对比了Soft-NMS和DIoU-NMS的优劣,并给出在YOLO11中实现DIoU-NMS的完整代码方案。该方法特别适用于安防监控、自动驾驶等目标密集场景,能够在不显著增加计算量的情况下显著改善检测效果。

2601_95807009的博客 150

SAP-ABAP:SAP基础数据校验工具开发系列博客(共5篇) 第一篇:需求梳理与架构设计:从零搭建SAP主数据校验能力底座

摘要: 本系列博客介绍SAP主数据校验工具的开发和设计,旨在解决物料、供应商、客户等主数据录入不规范、关联缺失和合规性问题。第一篇聚焦需求梳理与架构设计,提出分层技术架构(展示层、业务逻辑层、数据访问层),支持实时校验和批量校验两种模式,并详细说明规则引擎设计、SAP系统对接方案及权限管控逻辑。后续篇章将深入规则引擎实现、接口对接、结果可视化和性能优化,帮助构建集中式、可配置的主数据校验能力,提升SAP数据质量。

baidu_35680696的博客 330

java多线程(6):线程与线程池的异常处理机制

前言 java提供了一套完善的异常处理机制,异常的基础本文不展开,本文重点讲述线程的异常处理。 正文 本文将线程的实现分为2种,一种是实现了Runnable接口的无返回值的线程,无法在主线程感知到子线程的异常,没有被捕获的异常只会输出到控制台,那么未被捕获的异常如果没有进行处理或者日志记录,就会造成异常信息丢失;另一种是实现了Callable接口的有返回值的线程,子线程的异常信息会通过FutureTask返回值传递给主线程。最后再说一下线程池的异常处理方式。 一、线程的异常处理方法 1、主线程无法捕获子线程

欢迎来到Jimmy的博客 3532

10分钟搞定manim安装与vscode配置

manim安装与vscode配置

帅帅de三叔 3411

6.2-全栈Java笔记:异常处理机制的分类

 异常分类 JDK 中定义了很多异常类,这些类对应了各种各样可能出现的异常事件,所有异常对象都是派生于Throwable类的一个实例。如果内置的异常类不能够满足需要,还可以创建自己的异常类。  图1 异常的分类  Error Error类层次描述了Java运行时系统内部错误和资源耗尽错误。这类错误是我们无法控制的,同时也是非常罕见的错误。所以在编程中,不去处理这类错误。 E

全栈Java笔记 335

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

6.1-全栈Java笔记:异常处理机制的概念

 异常问题 实际工作中,遇到的情况不可能是非常完美的。比如:你写的某个模块,用户输入不一定符合你的要求、你的程序要打开某个文件,这个文件可能不存在或者文件格式不对,你要读取数据库的数据,数据可能是空的等。我们的程序再跑着,内存或硬盘可能满了等等。   软件程序在运行过程中,非常可能遇到刚刚提到的这些异常问题,我们叫异常,英文是:Exception,意思是例外。这些,例外情况,或者叫

全栈Java笔记 252

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

5月6号 -- java基础(异常处理机制详解)转

java异常处理机制详解 异常机制已经成为判断一门编程语言是否成熟的标准,异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。          Java异常机制主要依赖于try、catch、finally、throw、throws五个关键字。          1.try:它里面放置可能引发异常的代码          2.catch:后...

s306587279的专栏 110

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

利用Java提供的异常处理机制实现以下功能:

利用Java提供的异常处理机制实现以下功能: 检查用户输入的密码是否满足: 一、长度大于6 二、必须包含数字、大写字母和小写字母 //package text2; //import java.text.DecimalFormat; import java.util.Scanner; public class Main { public int flag; public void regist(String s) throws Exception { int len = s.length();

weixin_45726784的博客 195

java的异常处理机制

try{ 代码块1; }catch(XXException e){ 代码块2 } 这是基础的异常处理语法定义 代码块1里面写的是有可能报错的代码, XXException是有可能出现的错误,若是出了此种错误便会执行catch{}里的代码,若不是此种类型的错误,就不会走这个catch{} 常见的错误有: 空指针异常类:NullPointerException 类型强制转换异常:...

qq_37959072的博客 181

Java中的异常处理机制的简单原理和应用

Java中的异常处理机制的简单原理和应用          当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检

laowang2915的博客 815

JAVA异常处理

JAVA异常处理能够让你的程序更加方便、巧妙地处理错误。异常处理对于写出具有鲁棒性的JAVA程序、组件是非常重要的,但是这也经常被我们所忽视。当java程序中的一个错误发...

ifeves的博客 185

Java的异常处理机制

目录 1.异常 2.异常处理 3.Java的异常体系结构 4.处理异常的两种方式 4.1 try...catch...finally捕获异常 JDK1.7中捕获多个异常的新方案 4.2 throws抛出异常 5.throw和throws的区别 6.finally关键字 final、finally、finalize辨析 catch中的return语句与finally语句...

afsf12134的博客 244

Java基础系列六 Java异常处理

Java基础系列第六章 Java异常处理 Java异常概念、Throwable类、异常处理、自定义异常

886

Java 异常处理机制详解

在 Java 编程中,异常处理是一个至关重要的概念。它帮助我们处理程序执行过程中可能出现的错误或异常情况,从而提高程序的可靠性和稳定性。本文将详细介绍 Java 异常处理机制,包括异常的定义、分类、处理方式以及一些最佳实践。

专注Java和MySQL领域知识分享 1989

java的异常处理机制详解

Java异常的处理主要依赖于try,catch,finally,throws,throw这五个关键字。下面分别介绍它们:

jingwen的博客 1万+

《Java程序设计》实验指导——项目6 Java的异常处理

项目6 Java的异常处理实验目的实验性质实验内容 实验目的 理解 java 语言中独特的异常处理机制;掌握异常处理方法;正确地使用捕获异常和声明抛弃异常的两种异常处理的方法。 实验性质 验证性实验 实验内容 (1)分析调试教材的第4章中4.5节的实例 (2)编写程序:创建类Computer,该类有一个计算两个整数的最大公约数的方法,如果该方法的参数是负数,则该方法抛出自定义异常;对Computer类进行验证。 import java.util.Scanner; public class Second {

weixin_44652589的博客 821
上一篇: MyBatis-Plus-Generator 详细使用指南:基于 Spring Boot + Freemarker 模板引擎的代码生成器
下一篇: 7、Java 核心 API 与常用类库详解
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值