首页
学习
活动
专区
圈层
工具
发布

Java从入门到精通十(java异常)

这种异常就是一般在程序编译的时候不会检查的,比如越界,编译的时候时是不会进行检查的。这种错误会出现在程序运行的过程中。...运行时异常类常见异常类说明 :IOException 当发生某种 I/O 异常时,抛出此异常。此类是失败或中断的 I/O 操作生成的异常的通用类。...这个是属于编译时异常的。 当然并不是说,只能进行捕获编译时异常,运行时异常照样可以进行提前的预知捕获。 空指针异常就是一个运行时异常,但是编译的时候是不会检查的。一般这个原因就是对象的引用出现问题。...需要注意的是throw只能抛出一个实例。 ---- 其实很多时候会在处理异常的时候有时候感觉会用不上,但是你会感觉很多时候一些程序会用到它。这是什么用处呢? 声明一个可能出现的异常。...我在div方法外部进行了异常的声明,说明这个方法这里可能会出现异常,于是在主函数你调用这个方法的时候你必须进行处理,不然编译时不会通过的。

1.9K40

【Python3之异常处理】 转

TypeError 传入对象类型与要求的不符合 UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,导致你以为正在访问它 ValueError...RuntimeWarning 可疑的运行时行为(runtime behavior)的警告 SyntaxWarning 可疑的语法的警告 UserWarning 用户代码生成的警告 ?...二、异常处理 1.异常处理的定义 python解释器检测到错误,触发异常(也允许程序员自己触发异常) 程序员编写特定的代码,专门用来捕捉这个异常(这段代码与程序逻辑无关,与异常处理有关) 如果捕捉成功则进入另外一个处理分支...,执行你为其定制的逻辑,使程序不会崩溃,这就是异常处理 2.异常处理的意义 python解析器去执行程序,检测到了一个错误时,触发异常,异常触发后且没被处理的情况下,程序就在当前异常处终止,后面的代码不会运行...(): print('输入的是空格,就执行我这里的逻辑') elif len(num1) == 0: print('输入的是空,就执行我这里的逻辑') else: print('

2.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    11 . Python3之异常,调试和测试

    最后,编写测试也很重要,有了良好的测试,就可以在程序修改后反复运行,确保程序符合我们编写的测试. ---- 什么是异常?...异常就是程序运行时发生错误的信号(在程序出现错误时,会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中错误出发的异常如下: 而错误分成两种: 1.语法错误(...可疑的运行时行为(runtime behavior)的警告 SyntaxWarning 可疑的语法的警告 UserWarning 用户代码生成的警告 异常处理 为了保证程序的健壮性和容错性,即在遇到错误时程序不会崩溃...什么时候用异常处理 有的同学会这么想,学完了异常处理后,好强大,我要为我的每一段程序都加上try…except,干毛线去思考它会不会有逻辑错误啊,这样就很好啊,多省脑细胞===》2B青年欢乐多...这种以测试为驱动的开发模式最大的好处就是确保一个程序模块的行为符合我们设计的测试用例。在将来修改的时候,可以极大程度地保证该模块行为仍然是正确的。

    2.3K40

    Nullable Reference Types 可空引用类型

    可空引用类型 Null Reference Type 所以,C# 8的可空引用类型就出现了。...很显然,我们期待person这个参数它不可以是null的。 但是在C# 8之前,如果我们这样调用该方法,那么在编译时是不会报错的: ? 而如果运行程序,那么结果就是: ?...例子: 有两个类,Person类的Address属性的类型是另外一个类: ? 现在可以看到,这些属性都出现了波浪线的警告,如果我们build一下这个项目,那么也会出现很多警告: ?...这个叹号的作用仅仅是去掉了警告,它没有改变任何运行时的状况,如果Address为null,那么这句话仍然会抛出NullReferenceException。...类成员又出现了警告。 而回到方法里,我把叹号和问号都去掉之后,也不会出现警告了,因为它认为所有的成员都不会是null了: ?

    1.1K30

    Java中有关Null的9件事

    对于Java程序员来说,null是令人头痛的东西。时常会受到空指针异常(NPE)的骚扰。连Java的发明者都承认这是他的一项巨大失误。Java为什么要保留null呢?...因为如果你对null不注意,Java将使你遭受空指针异常的痛苦,并且你也会得到一个沉痛的教训。精力充沛的编程是一门艺术,你的团队、客户和用户将会更加欣赏你。...就像你在这里看到的这样,我将myObj定义为静态引用,所以我可以在主方法里直接使用它。注意主方法是静态方法,不可使用非静态变量。...,将null强制转换成任何引用类型都是可行的,在运行时期都不会抛出空指针异常。...但是如果将null赋值给包装类object,然后将object赋给各自的基本类型,编译器不会报,但是你将会在运行时期遇到空指针异常。这是Java中的自动拆箱导致的,我们将在下一个要点看到它。

    89320

    Java中有关Null的9件事

    对于Java程序员来说,null是令人头痛的东西。时常会受到空指针异常(NPE)的骚扰。连Java的发明者都承认这是他的一项巨大失误。Java为 什么要保留null呢?...因为如果你对null不注意,Java将使你遭受空指针异常的痛苦,并且你也会得到一个沉痛的教训。精力充沛的编程是一门艺术,你的团队、客户和用户将会更加欣赏你。...就像你在这里看到的这样,我将myObj定义为静态引用,所以我可以在主方法里直接使用它。注意主方法是静态方法,不可使用非静态变量。...,将null强制转换成任何引用类型都是可行的,在运行时期都不会抛出空指针异常。...但是如果将null赋值给包装类object,然后将object赋给各 自的基本类型,编译器不会报,但是你将会在运行时期遇到空指针异常。这是Java中的自动拆箱导致的,我们将在下一个要点看到它。

    80720

    Java中有关Null的9问题

    Java中有关Null的9问题 对于Java程序员来说,null是令人头痛的东西。时常会受到空指针异常(NPE)的骚扰。连Java的发明者都承认这是他的一项巨大失误。...因为如果你对null不注意,Java将使你遭受空指针异常的痛苦,并且你也会得到一个沉痛的教训。精力充沛的编程是一门艺术,你的团队、客户和用户将会更加欣赏你。...就像你在这里看到的这样,我将myObj定义为静态引用,所以我可以在主方法里直接使用它。注意主方法是静态方法,不可使用非静态变量。...,将null强制转换成任何引用类型都是可行的,在运行时期都不会抛出空指针异常。...但是如果将null赋值给包装类object,然后将object赋给各自的基本类型,编译器不会报,但是你将会在运行时期遇到空指针异常。这是Java中的自动拆箱导致的,我们将在下一个要点看到它。

    1.8K50

    ProGuard 在 Android 上的使用姿势

    在您的项目中开启 ProGuard 只需简单到添加如下几行代码在您的主应用模块的 build.gradle 文件中: buildTypes { /* you will normally want to...当您只从 XML 资源引用您的代码会时(通常使用底层的反射),这个情况也会发生。 在一次 Android 典型的构建过程中,AAPT(处理资源的工具)会生成一个额外的 ProGuard 规则文件。...这些警告的一个原因就是,您的构建路径中没有加入需要依赖的 JARs,如使用了 provided (仅编译时)依赖。而有时候,在 Android 上这些代码的依赖在运行时并不会被真正的调用。...重要的是去理解为什么您会收到这些警告以及您在构建时是否真的缺少这些类。 现在您可能会尝试使用 -ignorewarnings 选项直接忽略所有的警告,但这通常不是个好注意。...您可能需要了解一下 Progard的 notes (优先级低于警告的消息),它可以帮您发现一些反射相关的问题。虽然它不会打断您的构建,但是在运行时可能会闪退。

    4K40

    成员可能是null的

    但是在C# 8之前,如果我们这样调用该方法,那么在编译时是不会报错的: image.png 而如果运行程序,那么结果就是: image.png 打开null检查 而在Visual Studio...例子: 有两个类,Person类的Address属性的类型是另外一个类: image.png 现在可以看到,这些属性都出现了波浪线的警告,如果我们build一下这个项目,那么也会出现很多警告:...“,表示Address肯定不是null: image.png 这个叹号的作用仅仅是去掉了警告,它没有改变任何运行时的状况,如果Address为null,那么这句话仍然会抛出NullReferenceException...而回到方法里,我把叹号和问号都去掉之后,也不会出现警告了,因为它认为所有的成员都不会是null了: image.png 但是还要记住,这个只是在编译时进行的检查,如果成员为null,还是会抛出异常的...往构造函数里传递null 那么往构造函数里面传递null会出现什么情况呢?试一下: image.png 提示还是比较智能的,有警告,它说无法把null这个字面值转化为非null的引用类型。

    85831

    Java基础知识详细总结

    这种异常的特点是Java编译器会检查它,也就是说,当程序中可能出现这类异常,要么用try-catch语句捕获它,要么用throws子句声明抛出它,否则编译不会通过。...这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。...运行时异常的特点是Java编译器不会检查它,也就是说,当程序中可能出现这类异常,即使没有用try-catch语句捕获它,也没有用throws子句声明抛出它,也会编译通过。...@Deprecated,使用了注解为它的元素编译器将发出警告,因为注解@Deprecated是不赞成使用的代码,被弃用的代码。 @SuppressWarnings,关闭不当编译器警告信息。...如何保证多个线程操作主内存的数据完整性是一个难题,Java内存模型也规定了工作内存与主内存之间交互的协议,首先是定义了8种原子操作: lock:将主内存中的变量锁定,为一个线程所独占 unclock:将

    84530

    Python基础 | 新手学Python时常见的语法错误和异常

    语法错误又称解析错误,是我们在刚接触学习Python 时最容易遇到的错误,区区别于异常而言,语法错误非程序执行时的逻辑错误; 即使语句或表达式在语法上是正确的,但在尝试执行时,它仍可能会引发错误,而这个在执行时检测到的逻辑错误被称为异常...2.异常 异常是在程序执行过程中发生的逻辑错误,大多数异常并不会被程序处理,大多数异常并不会被程序处理,此时会显示如下所示的错误信息: In [4]: 1/0 Traceback (most recent...错误消息的开头部分以堆栈回溯的形式显示发生异常的上下文:通常它会包含列出源代码行的堆栈回溯;但是,它将不会显示从标准输入读取的行。 ?...,我们使用 Control+C 或 Delete时,就会出现中断程序的提示,我常常在程序执行过程中想复制部分打印信息的时候错使用 Control+C想着复制却使得程序中断的情况。...可疑的运行时行为(runtime behavior)的警告 SyntaxWarning 可疑的语法的警告 UserWarning 用户代码生成的警告

    8.5K41

    #21 Python异常

    ,如果不想在发生异常时终止程序,则需要使用try来捕捉它,先来看最简单的使用方法: 1 name = 'MinuteSheep' # 初始化变量name 2 print(name) # 将变量name...'我是KeyError') 11 12 13 # 运行结果: 14 MinuteSheep 15 我是NameError 长上面代码可以看出,当有多个except语句时,会从第一个except语句开始匹配...其实,Python中,所有异常都有一个共同的基类BaseException,它包含所有的异常,常规异常的基类是Exception 当不清楚会出现什么异常的时候,直接捕捉Exception基本上都是可以捕捉到的...断言是用来检测条件是否正确的。有这么一句话:与其让程序在运行时出错,不如让其出现错误条件时出错。...断言语句的关键字为:assert 基本用法:assert 条件 当条件正确时,什么也不返回;当条件错误时,抛出AssertionError In [5]: assert 9>5 # 条件正确时,什么也不返回

    1.5K20

    Java面试题-基础篇四

    主函数调用子函数并得到结果的过程,好比主函数准备一个空罐子,当子函数要返回结果时,先把结果放在罐子里,然后再将程序逻辑返回到主函数。...所谓返回,就是子函数说,我不运行了,你主函数继续运行吧,这没什么结果可言,结果是在说这话之前放进罐子里的。 5、final, finally, finalize的区别。...java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 7、error和exception有什么区别?...也就是说,它表示如果程序运行正常,从不会发生的情况。 8、简单说说Java中的异常处理机制的简单原理和应用。...异常是指java程序运行时(非编译)所发生的非正常情况或错误,与现实生活中的事件很相似,现实生活中的事件可以包含事件发生的时间、地点、人物、情节等信息,可以用一个对象来表示。

    61530

    Java面试题-基础篇三(干货)

    主函数调用子函数并得到结果的过程,好比主函数准备一个空罐子,当子函数要返回结果时,先把结果放在罐子里,然后再将程序逻辑返回到主函数。...所谓返回,就是子函数说,我不运行了,你主函数继续运行吧,这没什么结果可言,结果是在说这话之前放进罐子里的。 35、final, finally, finalize的区别。...java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 37、error和exception有什么区别?...也就是说,它表示如果程序运行正常,从不会发生的情况。 38、简单说说Java中的异常处理机制的简单原理和应用。...,它把程序中发生的每个异常也都分别封装到一个对象来表示的,该对象中包含有异常的信息。

    63210

    Python Logging 模块完全解

    Python 中的 logging 模块可以让你跟踪代码运行时的事件,当程序崩溃时可以查看日志并且发现是什么引发了错误。...你也可以在 logging 中包含 traceback 信息。不管是小项目还是大项目,都推荐在 Python 程序中使用 logging。本文将简单清晰地介绍如何使用 logging 模块。...在小程序中,可能靠这个就足够了。 但问题是,当你处理有很多个模块的大项目时,就需要一个更加灵活的方法。 为什么? 因为代码需要经历开发、调试、审查、测试或者上线等不同阶段。...答案是日志信息不会被打印出来。 为什么?要知道这个需要先了解 logging 的级别。...因此,logging.info()中的信息不会被打印出来。这也是为什么 basicConfig 被设为INFO。

    1.4K20

    华山论剑之契约式编程与防御式编程

    我相信这两种程序猿都有自己的理由,第一种程序简洁明了,代码逻辑干净,但一旦出错,就会崩溃,第二种程序耐操,随你数据怎么错,我都能不Crash,但代码中到处存在非空判断,臃肿、重复。...OK,《代码大全》给我们提供了一个定义——『防御式编程』,说白了,就是『人类都是不安全、不值得信任的,所有的人,都会犯错误,而你写的代码,应该考虑到所有可能发生的错误,让你的程序不会因为他人的错误而发生错误...断言 断言,是一种在开发阶段使用的,让程序在运行时进行自检的代码,断言为真,那么程序运行正常,断言为假,那么程序运行异常退出。等等,防御式编程不是说好的要兼容异常吗,为什么会退出?...所以我觉得防御式编程用久了,会不会开始怀疑人生,果然,在往后翻几页,作者也给出了建议。 ? 借用奇异博士的一句台词——『你TM居然把警告写在咒语的下一页』!...契约所约束的,是『一个为了确保程序正常运行的条件』,一旦契约被损毁,只有一个原因,那就是程序出了Bug,例如一个数据字段,在我处理的时候,必须保证是不为空的,那么谁来保证这一点呢,一定是我的调用方(或者说是其它模块

    1.4K30

    python异常报错详解

    该filename属性是None使用3个参数以外的其他异常创建的。的errno和strerror属性也None当实例与其他大于2个或3个参数创建。...异常MemoryError 当操作内存不足时提起,但情况可能仍然会被抢救(通过删除某些对象)。相关联的值是一个字符串,指示什么样的(内部)操作用完了内存。...异常SystemError 当翻译发现内部错误时,提出了这种情况,但情况并不那么严重,导致它放弃了所有的希望。相关联的值是一个字符串,表示出现错误(低级别)。...调用sys.exit()被转换为异常,以便清理处理程序(finally语句的子句try)可以被执行,并且调试器可以执行脚本而不会失去控制的风险。os....异常RuntimeWarning 关于可疑运行时行为的警告的基类。 异常FutureWarning 关于将来会在语义上改变的构造的警告的基类。

    6.3K20

    异常1.异常简介2.捕获异常3.异常的传递4.抛出自定义的异常5.异常处理中抛出异常

    1.异常简介 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。 一般情况下,在Python无法正常处理程序时就会发生一个异常。 异常是Python对象,表示一个错误。...当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。 看如下示例: ? 运行结果: ?...说明: ·此程序看不到任何错误,因为用except捕获到了IOError异常,并添加了处理的方法 ·pass表示实现了相应的实现,但什么也不做;如果把pass改为print语句,那么就会输出其他信息...说明: test.txt文件中每一行数据打印,但是我有意在每打印一行之前用time.sleep方法暂停2秒钟。这样做的原因是让程序运行得慢一些。在程序运行的时候,按Ctrl+c中断(取消)程序。...__init__()的说明 这一行代码,可以调用也可以不调用,建议调用,因为__init__方法往往是用来对创建完的对象进行初始化工作,如果在子类中重写了父类的__init__方法,即意味着父类中的很多初始化工作没有做

    2.6K30
    领券