Java语法总结 - 异常

Obsidian笔记同步实战:基于Git的私有化部署与自动化管理 本文详细介绍了如何利用Git为Obsidian笔记构建私有化、自动化且免费的同步方案。通过安装配置Git与Obsidian-git插件,结合Gitee等远程仓库,实现笔记的版本管理、多设备同步与自动备份,打造安全可靠的知识管理体系。 阅读详情


软件开发中一个古老的说法是:80%的工作使用20%的时间。80%是指检查和处理错误所付出的努力。在许多语言中,编写检查和处理错误的程序代码很乏味,并使应用程序代码变得冗长。原因之一就是它们的错误处理方式不是语言的一部分。尽管如此,错误检测和处理仍然是任何健壮应用程序最重要的组成部分。

Java提供了一种很好的机制,用强制规定的形式来消除错误处理过程中随心所欲的因素:异常处理。它的优秀之处在于不用编写特殊代码检测返回值就能很容易地检测错误。而且它让我们把异常处理代码明确地与异常产生代码分开,代码变得更有条理。异常处理也是Java中唯一正式的错误报告机制。

第一部分    异常

1、抛出异常。所有的标准异常类都有两个构造器:一个是缺省构造器,一个是带参数的构造器,以便把相关信息放入异常对象中。
    throw new NullPointerException();
    throw new NullPointerException("t = null");

2、如果有一个或者多个catch块,则它们必须紧跟在try块之后,而且这些catch块必须互相紧跟着,不能有其他任何代码。C++没有这样的限制,所以C++的异常处理处理不好就会写得很乱,抛来拋去的。

3、使用try块把可能出现异常的代码包含在其中,这么做的好处是:处理某种指定的异常的代码,只需编写一次。作业没写完的同学到走廊罚站去,这符合我们处理问题的方式,不用挨个地告诉。

4、无论是否抛出异常,finally块封装的代码总能够在try块之后的某点执行。
例子:
    try {
        return ;    
    }
    finally{
        System.out.print("You can't jump out of my hand!");    
    }

甚至你在try块内用return语句想跳过去都不可以!finally内的输出语句还是执行了!别想逃出我的手掌心!

5、catch块和finally块是可选的,你可以只使用try。但是这么做有意思吗?

6、推卸责任。Java允许你推卸责任,没有必要从相应的try块为每个可能的异常都编写catch子句。Java2类库中很多方法都会抛出异常,就是是把异常处理的权限交给了我们用户。毕竟,Java不知道你的自行车被偷了之后,你会去报案还是会忍气吞声自认倒霉,或者偷别人的自行车。我们需要这种处理异常的自由度。

7、调用栈。调用栈是程序执行以访问当前方法的方法链。被调用的最后一个方法在栈的顶部,它将被最先执行完毕,然后弹出;第一个调用方法位于底部,也就是main函数。在catch子句中使用printStackTrace()方法打调用栈信息是比较常用的定位异常的方法。printStackTrace()继承自Throwable。

8、异常的传播。在一个方法A中,如果一个异常没有得到处理,它就会被自动抛到调用A方法的B方法中。如果B方法也没有处理这个异常,他就会被继续依次向上抛,直到main方法。如果main也没有理会它,那么异常将导致JVM停止,程序就中止了。你被同学揍了,先去告诉老师。老师不理你你就去告诉教导处主任,教导处主任也不管那只能告诉校长,校长还不管!没有比他更大的了,于是你崩溃了,学业中止了……下面这段程序记录了悲惨的辍学历史:
    class ExceptionDemo {
        static void student() throws Exception{
            teacher();
        }
        static void teacher() throws Exception{
            schoolmaster();
        }
        static void schoolmaster() throws Exception{
            throw new Exception();
        }
        public static void main(String[] args) {
            try {
            student();
        }
        catch (Exception e) {
            e.printStackTrace();
        }         
        }
    }
输出结果是:
java.lang.Exception
    at ExceptionDemo.schoolmaster(ExceptionDemo.java:9)
    at ExceptionDemo.teacher(ExceptionDemo.java:6)
    at ExceptionDemo.student(ExceptionDemo.java:3)
    at ExceptionDemo.main(ExceptionDemo.java:13)
可以看出函数的调用栈,一级一级地哭诉……

9、异常的层次结构及Error。
        Object
        Throwable
    Error        Exception
Throwable继承自Object,Error和Exception继承自Throwable。Error比较特殊,它对应于我们常说的不可抗拒的外力,房屋中介的合同上总有一条,如遇不可抗拒的外力本合同中止,返还乙方押金。我不安地问:不可抗拒的外力指什么?中介回答:比如战争、彗星撞击地球等。对Java来说Error是指JVM内存耗尽等这类不是程序错误或者其他事情引起的特殊情况。一般地,程序不能从Error中恢复,因此你可以能眼睁睁地看着程序崩溃而不必责怪自己。严格来讲,Error不是异常,因为它不是继承自Exception。

10、谁之错?一般地,异常不是我们程序员的错,不是程序设计上的缺陷。比如读取一个重要文件,这个文件被用户误删了;正上着网呢,网线被用户的宠物咬断了。为了程序的健壮性,我们尽量考虑出现可能性大的异常,并处理,但我们不能穷尽。

11、异常的捕获之一。catch子句的参数是某种类型异常的对象,如果抛出的异常是该参数的子类,那么这个异常将被它捕获。也就是说被抛出的异常不会精确地寻找最匹配的捕获者(catch子句),只要是它的继承结构的直系上层就可以捕获它。

按照这个逻辑,catch(Exception e) 不就能捕获所有的异常吗?事实上,确实如此。 但是一般地,不建议使用这种一站式的异常处理。因为这样就丢失了具体的异常信息,不能为某个具体的异常编写相应的异常处理代码,失去了异常处理的意义。从哲学角度来讲,具体问题要具体分析,能治百病的万能药一般都是无效的保健品。

Java在此处为什么这么设计呢?因为有另一种机制的存在,请看下条分解。

12、异常的捕获之二。当抛出一个异常时,Java试图寻找一个能捕获它的catch子句,如果没找到就会沿着栈向下传播。这个过程就是异常匹配。Java规定:最具体的异常处理程序必须总是放在更普通异常处理程序的前面。这条规定再合理不过了,试想如果把catch(Exception e)放在最上面,那么下面的catch子句岂不是永远不能执行了?如果你非要把更普遍的异常处理放在前面,对不起,通不过编译!虽然编译器不会这样报错:“It is so stupid to do like that!”……

13、捕获或声明规则。如果在一个方法中抛出异常,你有两个选择:要么用catch子句捕获所有的异常,要么在方法中声明将要抛出的异常,否则编译器不会让你得逞的。
方案一:处理异常
    void ex(){
        try{
            throw new Exception();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
方案二:抛出去
    void ex() throws Exception{
        throw new Exception();
    }
比较一下行数就知道了,在代码的世界里推卸责任也是那么简单,一个throws关键字包含了多少人生哲理啊……现实生活中我们有很多角色,儿女、父母、学生、老师、老板、员工……每个人都占了几条。可是你能尽到所有责任吗?按照古代的孝道,父母尚在人世就不能远行。各种责任是有矛盾的,顾此失彼啊。

但是这条规则有个特例。一个继承自Exception名为RuntimeException的子类,也就是运行时异常,不受上述规则的限制。下面的代码完全能编译,只不过调用之后在运行时会抛出异常。
    void ex(){
        throw new RuntimeException();
    }

14、throw和thrwos关键字。throw用在方法体中抛出异常,后面是一个具体的异常对象。throws用在方法参数列表括号的后面,用来声明此方法会抛出的异常种类,后面跟着一个异常类。

15、非检查异常。RuntimeException、Error以及它们的子类都是非检查异常,不要求定义或处理非检查异常。Java2类库中有很多方法抛出检查异常,因此会常常编写异常处理程序来处理不是你编写的方法产生的异常。这种机制强制开发人员处理错误,使得Java程序更加健壮,安全。

16、自定义异常类型。觉得现有的异常无法描述你想抛出的异常,ok!Java允许你自定义异常类型,只需要继承Exception或者它的子类,然后换上有个性的名字。
    class NotEnoughMoney extends Exception {
        public NotEnoughMoney() {}
        public NotEnoughMoney(String msg) { super(msg); }
    }
希望大家在生活里不要抛出类似的异常。

17、重新抛出异常。一个很无聊的话题,纯粹的语法研究,实际意义不大。当catch子句捕获到异常之后可以重新抛出,那么它所在的方法必须声明该异常。
    void ex() throws Exception{
        try {
            throw new Exception();
        }
        catch (Exception mex) {
            throw me;
        }    
    }

18、异常处理机制的效率。待补充……

19、终止与恢复模型。异常处理理论上有两种模型:
一、终止模型。错误很关键且无法挽回,再执行下去也没意义,只能中止。“罗密欧,我们分手吧!”“好吧,朱丽叶!”
二、恢复模型。经过错误修正重新尝试调用原来出问题的方法。“罗密欧,我们分手吧!”“朱丽叶,我错了!请再原谅我一次吧!”“好的,再原谅你最后一次!”
显然我们更喜欢恢复模型,但在实际中,这种模式是不易实现和维护的。
例子:用户输入了非法的字符,分别按照两种模式处理
一、终止模型。输出出错信息而已,一旦用户手一抖眼一花你的代码就崩溃了
    double number;
    String sNumber = "";
    try {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        sNumber = bf.readLine();
        number = Double.parseDouble(sNumber);    
    } catch (IOException ioe) {
        System.err.println("some IOException");
    } catch (NumberFormatException nfe) {
        System.err.println(sNumber + " is Not a legal number!");
    }
    //System.out.println(number);

二、恢复模型。小样!不输入正确的数据类型就别想离开!
    double number = 0;
    String sNumber = "";
    while(true){
        try {
            BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
            sNumber = bf.readLine();
            number = Double.parseDouble(sNumber);
            break;    //如果代码能执行到这一行,就说明没有抛出异常
        } catch (IOException ioe) {
            System.err.println("some IOException");
        } catch (NumberFormatException nfe) {
            System.err.println(sNumber + " is Not a legal number!");
        }
    }
    System.out.println(number);

直到用户输入正确的信息才会被该代码放过。这是一种简单的恢复模型的实现,挺耐看的,我很喜欢!

20、try、catch、finally内变量的作用域和可见性。
在try块内定义的变量,它在catch或者finally块内都是无法访问到的,并且在整个异常处理语句之外也是不可见的。
补充一点初始化:第一个例中最后一句被注释掉了。number是在运行时由用户输入而初始化的,但是在编译时刻并没有初始化,编译器会抱怨的。

21、输出异常信息。捕捉到异常之后,通常我们会输出相关的信息,以便更加明确异常。
    catch (Exception mex) {
        System.err.println("caught a exception!");
    }
用标准错误流System.err比System.out要好。因为System.out也许会被重定向,System.err则不会。

22、更高级的话题我会补充上的,但是我的肚子抛出了Hungry异常,我必须catch然后调用eat()方法补充能量。昨晚的鱿鱼盖浇饭很好吃……
3D美术14——max——fbx导入max后直接生成bip人形骨骼插件 最近经常会从unity里反八FBX到max里进行2次修改。 但是非常尴尬的事情就是,就是用max做的fbx,你在反导入回来,BIP骨骼都会变成预制体。这个时候有一个方法补救。那就是在导入的时候调整一下参数。(如下图) 把这里调整成设置为骨骼。就还可以了。 但是,如果你不是用max做的FBX。呵呵,那么你一定很头大,因为完全没有用。 所以,这个时候就要上插件了。 Autofbxtobip v.1.1 这个插件适用于2015及其以上版本。 在这之前我还用过一款叫BIPPY,但是效果相当感人,照着这个图片调整 阅读详情

相关推荐

金蝶云星空API实战:从零到一,用Postman打通业务数据流

本文详细介绍了如何使用Postman调试金蝶云星空API,从创建第三方应用到实战调试技巧,帮助开发者快速打通业务数据流。文章重点讲解了API配置的关键细节、常见问题排查方法以及自动化测试方案,提升开发效率与准确性。

weixin_33712987的博客 522

C# 如何获取错误所在行数

三种思路,一种是利用error.StackTrace,第二种是try-catch找到错误行数, 第三种是: System.Diagnostics.Debug.WriteLine() + DebugView工具 一、error.StackTrace代码 ex.StackTrace.Substring(ex.StackTrace.IndexOf("行号"), ex.StackTrace.L

liuhhaiffeng的专栏 1万+

FoundationPose实战:从零部署到Demo运行全记录

本文详细记录了FoundationPose从零部署到Demo运行的全过程,包括Ubuntu环境配置、项目部署、依赖安装及常见问题解决方案。特别针对复现过程中的关键步骤如CUDA版本选择、Eigen3安装等提供了实用技巧,帮助开发者高效完成FoundationPose的部署与调试。

weixin_27102543的博客 269

exception java 行数_java中定位当前异常的位置(行数)

案例:有时候我们需要把自己捕获的异常,保存下来 那么就要精确的定位到哪一行报错public static StringBuffer getTraceInfo(Exception e) {StringBuffer sb = new StringBuffer();StackTraceElement[] stacks = e.getStackTrace();for (int i = 0; i < ...

weixin_36470210的博客 2723

【matlab】使用alexnet进行特征提取

1.下载alexnet工具箱 在命令栏输入alexnet,若不报错说明已经安装,若出现错误按照提示去下载工具箱; 下载地址:https://ww2.mathworks.cn/matlabcentral/fileexchange/59133-deep-learning-toolbox-model-for-alexnet-network (1)需要先注册(十分简单),登陆,下载; (2)下载完成之后,...

jingjingliang1995的博客 5847

2025_NIPS_Grounded Reinforcement Learning for Visual Reasoning

尽管基于思维链的强化学习已在数学、编程等任务中显著提升语言模型性能,但视觉推理面临额外复杂性——需模型引导视觉注意力、解读感知输入,并将抽象推理锚定到空间证据上。本文提出ViGoRL(视觉接地强化学习),这是一种通过强化学习训练的视觉语言模型,能将每个推理步骤明确锚定到特定视觉坐标。受人类视觉决策启发,ViGoRL学会生成空间接地的推理轨迹,在每个步骤引导视觉注意力聚焦任务相关区域。当需要细粒度探索时,我们提出的多轮强化学习框架允许模型随着推理展开动态缩放至预测坐标。

c_cpp_csharp的专栏 59

使用try-catch捕获Java中的异常详解

我们使用了两个catch块来分别处理数组越界异常和其他异常,最后一个catch块捕获所有Exception类型的异常,这是一种常见的做法,可以处理未知类型的异常情况。在上述示例中,我们尝试打开和读取一个文件(“example.txt”),如果文件不存在或者读取过程中出现IO异常,程序将会捕获IOException并输出异常信息。try块中的代码是可能抛出异常的代码块,catch块中的代码是异常处理代码。在实际开发中,可能会遇到多种类型的异常,可以使用多个catch块来分别处理不同类型的异常。

省赚客开发者博客 1724

YOLOv11改进 - 卷积Conv | GCNet之金箍棒块GCBlock : 重参数化捕获全局依赖 | CVPR 2025

文介绍了GCBlock在YOLOv11中的结合应用。GCBlock是GCNet的核心组件,能高效捕获特征图中的全局依赖关系,融合了非局部网络和挤压 - 激励网络的优势,降低计算成本并保障模型性能。其遵循“上下文建模 - 特征变换 - 特征融合”框架,通过全局平均池化、全连接层等操作生成注意力权重。我们将GCBlock集成进YOLOv11,替代原有的部分卷积模块,实现更高效的全局上下文建模。实验证明,YOLOv11-GCBlock在目标检测任务中表现出色,展现了GCBlock在深度学习中的广泛应用前景。

魔改工程师的博客 908

Java 里的异常(Exception)详解及其常见报错

java里的异常的分类. 见下图: Throwable / \ Error Exception / / \ xxxxxx xxx...

qq_43711194的博客 2214

03 Token、Embedding、上下文窗口:开发者必须懂的三个基本概念

Token、Embedding 和上下文窗口是大模型应用开发的三个基础概念。本文从成本、速度、检索和上下文设计四个角度讲清它们的工程意义,帮助开发者理解为什么同一段内容会超限、变贵,为什么 RAG 能做语义检索。

老于的笔记的专栏 413

芯片原厂linux驱动开发的分享

大家好,我是XX,来自湖南XX学院,电子信息18级,也曾在创新基地控制组学习过两三年,毕业后就职于一家芯片原厂的解决方案部,担任驱动工程师的职位,算上实习期,我的工作时长已有两年。在此我想将这两年期间学习与积累到的一些经验输出出来,与大家一同分享。知识面有限,只能简单介绍一些驱动开发方向的一些经验,且由于经验尚浅,文中难免会有一些疏漏和错误之处,还请大家积极地批评指正。

嵌入式技术开发 852

Java基础语法(十)—— 认识异常

文章目录Java基础语法(十)—— 认识异常一、初始异常1.算数异常2.数组下标越界异常3.空指针异常4.异常的处理方式5.异常的好处二、异常的基本语法三、Java异常体系四、自定义异常类 Java基础语法(十)—— 认识异常 本次内容介绍大纲 接上篇博客——Java基础语法(九)——String 类 一、初始异常 经常有同学看到异常来问了,异常到底是什么? 而在我们之前的学习中,我们其实已经接触到了Java当中的异常。 1.算数异常 首先我们遇到的第一个异常是我们在讲除号运算符时遇到的——算数异常。

rain67的博客 7820

C#里使用DataGridView来创建二级列表头的例子

本文介绍了在WinForms的DataGridView中实现二级表头的技术方案。该方案通过自定义绘制方法,在原始列头上方叠加一级合并表头,形成清晰的层级结构。核心实现包括:1)使用CellPainting事件分层绘制表头;2)处理滚动偏移实现表头同步滚动;3)通过列宽变化事件保持表头宽度同步;4)采用双缓冲技术优化显示效果。方案支持水平滚动、列宽调整等功能,通过Level1Header类管理表头层级关系,使代码结构清晰。最终实现了信息分类明确、显示美观的二级表头效果。

大坡3D软件开发 373

Java语法学习异常

总的来说异常分为Error和Exception两大类Exception又分为运行时异常和编译时异常下面是常见的分类对于在一个方法(假设叫f1),调用另一个方法(f2),f2抛出了异常,那此时在f1中我们要判断该异常是编译异常(图1)还是运行异常(图2),对于编译异常,要求我们必须处理(要么举行抛出,要么try-catch),而对于运行异常我们可以不做处理(但是最后可能还是要在处理)

2403_82385265的博客 2310

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Java语法之异常

java的异常

2201_75880772的博客 1033

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【Java 基础语法】学会异常处理,祝你国庆快乐

前言: 前些章节的知识点有时会涉及到异常的知识,如果没有专门学习过异常的小伙伴可能看的有点疑惑。今天这节就是为了讲解异常,让我们来了解什么是异常,它的作用是啥,怎么使用异常。 文章目录1. 异常的背景1.1 邂逅异常1.2 异常和错误1.3 Java 异常的体系(含体系图)1.4 异常的核心思想1.5 异常的好处2. 异常的基本用法2.1 捕获异常2.1.1 基本语法2.1.2 示例一2.1.3 示例二(含使用调用栈)2.1.4 示例三(可以使用多个 catch 捕获不同的异常)2.1.5 示例四(可以使用

吞吞吐吐大魔王的博客 1718

深度学习工具包 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")

JAVA语法之异常以及异常处理

JAVA语法之异常以及异常处理目录一、异常是什么二、异常的分类三、为什么要处理异常四、怎么处理异常五、自定义异常 一、异常是什么        阻止当前方法或作用域,就是异常。        通俗的说,异常就是使得程序正常流程中断的事件。        比如当我们试图打开某个文件,就可能存在异常,文件损坏,文件不存在等等。二、异常的分类        异常都继承于Throwable类。这个类主要由...

进击的虾米! 1297

Java7多异常捕获的语法特性

本文总结了Java7中多异常捕获的语法特性。Java7允许在单个catch块中捕获多个异常,简化了异常处理代码,提高了可读性和可维护性。文章介绍了多异常捕获的基本语法、嵌套异常处理方式以及throws关键字的使用方法,建议开发者在遵循编码规范的前提下合理运用这些特性,在简化代码的同时避免过度处理异常。该特性为处理复杂异常情况提供了更灵活的机制。

searchboy2025的博客 29

java异常 笔试面试考点2: 异常处理语法

  java异常处理本质 Java的异常处理本质上是抛出异常和捕获异常。 抛出异常:明确异常类型,创建异常对象,并抛出交给上层环境处理。 捕获异常:在方法抛出异常之后,运行时系统将转为寻找合适的异常处理器(exception handler)。        潜在的异常处理器是异常发生时依次存留在调用栈中的方法的集合。当异常处理器所能处理的异常类型与方法抛出的异常类型相符时,即为合适的异常处...

efei7968的博客 545

如何使用Java的Checked异常语法

相反,它迫使你在关键错误点做出明确的决定:你能在这里恢复吗?更安全的方法是使用try-with-resources(Java 7+),它自动调用。块里,或者只打一行日志吞下,结果出了问题就找不到源头了。例如,打开文件后,只有在文件打开后。Java必须用try-catch处理哪些异常?子类,属于unchecked,编译器不在乎。),投掷更合理——让调用方决定如何处理。编译器将迫使您捕获或声明子类异常。块必须按“子类在前,父类在后”进行编译。——不处理,代码直接编译失败。在块里读,没有关流,即使被捕获。

sillyoung的博客 147

[Java基本语法] 异常

程序先执行 try 中的代码如果 try 中的代码出现异常, 就会结束 try 中的代码, 看和 catch 中的异常类型是否匹配.如果找到匹配的异常类型, 就会执行 catch 中的代码如果没有找到匹配的异常类型, 就会将异常向上传递到上层调用者.无论是否找到匹配的异常类型, finally 中的代码都会被执行到(在该方法结束之前执行).如果上层调用者也没有处理的了异常, 就继续向上传递.

无需多言 1382

Java SE基础语法——异常

本文主要对异常是什么、有什么作用、异常的处理机制、如何自定义一个异常进行了一个比较深入的总结。

m0_63313590的博客 397

java核心语法——异常

Java程序过程中,出现的不正常的情况,出现的错误,成为异常 异常就是对象,描述那些不正常的情况,包含了这些i情况的原因、类型、描述以及位置,这些内容都封装在异常对象中 异常也是一种处理异常情况的机制,可以进行跳转、捕获、结束程序

Today_He的博客 208

java异常处理语法_java异常语法-java异常例子-嗨客网

Java异常语法教程我们已经了解到了Java异常语法语法try{//do something}catch(异常类型){}catch(异常类型){}catch(异常类型){}finally{ //可要可不要}参数参数描述trytry 是包含逻辑处理的开始,业务逻辑在 try 代码块里面执行,如果有异常会被 catch 住catchcatch 是如果 try 代码块中的异常类型是 catch 里面的...

weixin_42133680的博客 185

Java中switch参数传null会引起异常——Java 语法糖

问题 switch 参数不能是null,swicth(null)会报java.lang.NullPointerException异常 查找原因 为什么会这样呢,查找一下原因: 找到编译后的class文件,就明白了 总结: switch 是一个语法糖。switch语句是先计算 param 变量的排序值,然后与枚举常量的每个排序值进行对比。 源码中的switch(param) 调用了String 的hashCode方法。 switch 方法只支持int 类型的匹配,其他基本类型都会被语法糖转换为整型来做判断

qq_43842093的博客 1万+
上一篇: 关于Hibernate的unsaved-value
下一篇: 全面分析Java的垃圾回收机制
zljjava
博客等级 码龄15年 155粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值