技术标签: java JAVA基础知识 intellij-idea java-ee
目录
异常是程序在编译或执行的过程中可能出现的问题,语法错误不算在异常体系
提前处理异常,程序会更加安全
Error:
系统级别问题、JVM退出等,代码无法控制
Exception:
Java.lang包下,称为异常类,它表示程序本身可以处理的问题
Runtime Exception及其子类:
运行时异常,编译阶段不会报错(如空指针,数组索引越界异常)
除Runtime Exception之外所有异常:
编译时异常,编译期必须处理的,否则程序不能通过编译(如日期格式化)
编译阶段不会报错,运行时才会提示错误
public static void main(String[] args) {
//数组索引越界异常:ArrayIndexOutOfBoundsException
int[] arr = {1, 2, 3};
System.out.println(arr[3]);
//空指针异常:NullPointerException,直接输出没问题,但是调用空指针的变量功能就会报错
String name = null;
System.out.println(name); //可以输出
System.out.println(name.length()); //报错
//类型转换异常:ClassCastException
Object o = 12;
String s = (String) o;
//数学操作异常:ArithmeticException
int c = 10/0;
//数字转换异常:NumberFormatException
String number = "a2";
Integer i = Integer.valueOf(number);
}
编译阶段就报错,必须要处理
如下图,日期解析异常
通常我们不对代码可能出现的异常进行处理,Java就会默认处理我们的异常,如下:
默认会在出现异常的代码处,自动创建一个异常对象:ArithmeticException
异常会从方法中出现的抛给调用者,调用者抛给JVM虚拟机
虚拟机收到异常对象后,先在控制台输出异常栈信息数据
直接从出现异常的地方关闭程序
添加throws ***到方法签名
规范写法throws Exception
将方法内部出现的异常抛给本方法调用者
throws仅仅是将函数中可能出现的异常向调用者声明,而自己则不具体处理。
throws声明:如果一个方法内部的代码会抛出检查异常(checked exception),而方法自己又没有完全处理掉或并不能确定如何处理这种异常,则javac保证你必须在方法的签名上使用throws关键字声明这些可能抛出的异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理,否则编译不通过。
public static void main(String[] args) throws ParseException {
parseTime("2015-10-10 10:10:10");
}
public static void parseTime(String data) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
Date d = sdf.parse(data);
}
监视捕获异常,用在方法内部,可以将方法内部出现的异常直接捕获处理
发生异常的方法自己独自完成异常处理,程序还能继续往下执行
public static void main(String[] args) {
parseTime("2015-10-10 10:10:10");
}
public static void parseTime(String data) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
Date d = sdf.parse(data);
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
方法将异常通过throws抛给调用者,调用者收到异常后捕获处理。
public static void main(String[] args) {
try {
parseTime("2015-10-10 10:10:10");
System.out.println("成功");
} catch (ParseException e) {
e.printStackTrace();
System.out.println("失败");
}
}
public static void parseTime(String data) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
Date d = sdf.parse(data);
}
可以不进行处理,编译阶段不会报错,但建议处理,在最外层捕获
public static void main(String[] args) {
System.out.println("开始");
try {
int d = 10/0;
} catch (Exception e) {
throw new RuntimeException(e);
}
System.out.println("结束");
}
JAVA无法为所有的问题提供异常类,如果企业想通过异常的方式来管理某个业务问题,就需要自定义异常类了。
按照国际惯例,自定义的异常应该总是包含如下的构造函数:
一个无参构造函数
一个带有String参数的构造函数,并传递给父类的构造函数。
一个带有String参数和Throwable参数,并都传递给父类构造函数。
一个带有Throwable 参数的构造函数,并传递给父类的构造函数。
注意:如果自定义异常是为了提示,在使用的时候,一定要用try..catch,不要直接用throw往外抛。
定义一个异常类继承Exception
重写构造器
public class Ageilleagaleception extends Exception{
public Ageilleagaleception (){
}
public Ageilleagaleception(String message){
super(message);
}
}
在出现异常的地方用throw new自定义对象抛出
public static void checkAge(int age) throws Ageilleagaleception {
if(age < 0 || age > 200){
throw new Ageilleagaleception(age+"is illegal");
}else {
System.out.println("年龄正确");
}
}
自定义运行时异常
定义一个类继承RuntimeException
重写构造器
在出现异常的地方用throw new自定义对象抛出
程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常
异常处理不能替代简单的测试,不要过分的细化异常
文章浏览阅读3.4k次。名称说明cpu个数:是指物理上,也及硬件上的核心数;核数:是逻辑上的,简单理解为逻辑上模拟出的核心数;线程数:是同一时刻设备能并行执行的程序个数,如果没有超线程技术,一个CPU核心对应一个线程。线程数越多,越有利于同时运行多个程序,因为线程数等同于在某个瞬间CPU能同时并行处理的任务数。AMD线程数:线程数..._cpu核数和线程数的关系
文章浏览阅读172次。这份Android面试真题涵盖了图片,网络和安全机制,网络,数据库,插件化、模块化、组件化、热修复、增量更新、Gradle,架构设计和设计模式,Android Framework 、Android优秀三方库源码等。适合中高级工程师。一、图片1、图片库对比2、LRUCache原理3、图片加载原理4、自己去实现图片库,怎么做?5、Glide源码解析6、Glide使用什么缓存?7、Glide内存缓存如何..._glide adapter 泄漏
文章浏览阅读694次。本篇有点发牢骚的感觉,呵呵,如果你的工作环境不舒服,就和我一起发发牢骚吧,否则可以略过本篇。软件开发人员的劳动成果是什么?软件。往细了说,就是代码。代码是如何产生的?是我们经过思考得出的解决问题的方法,然后通过敲击键盘和点击鼠标产生的文件。所以代码只是一种表现形式,最重要的是我们思考问题得出的方法。如何让我们花更多的时间去思考、验证和修正解决问题的方法,而不是纠缠于其他非思考的外部活动,这是本_超安静的工作环境
文章浏览阅读1.2w次,点赞5次,收藏20次。简介-meta是什么meta-data是应用的清单文件AndroidManifest.xml中application,activity,activity-alias,provider,receiver,service下的子标签,比intent-filter多些父标签.像友盟这些统计服务一般只需要一个AppID等,只需要定义在Application中,如果你想给某个组件添加meta-data,那..._meta-data
文章浏览阅读9.1k次。四知回--Windows 10文件浏览器多标签浏览插件 Windows10 文件浏览器本身是单窗口的,打开多个目录时会打开多个浏览器窗口,切换和使用均不方便。之前看有提到clover这个软件可以多标签浏览;尝试了一下,简直是中国软件的典范,不停的弹出广告窗口,实在受不了了。 找了这个不弹窗安心用的小软件可以多标签浏览。先看下效果功能打开后,使用的还是Windows..._windows 文件夹多开插件
文章浏览阅读2.2k次。http://blog.chinaunix.net/uid-20535506-id-1931559.html《Linux下Sniffer程序的实现》这篇文章对其关系表述的比较准确。 另外一篇英文参考Inside the Linux Packet Filter 很深入 http://www.linuxjournal.com/article/48521,LINUX中PF_PAC_linux bpf和libpcap
文章浏览阅读4.6k次,点赞7次,收藏30次。生成hex文件KEIL中默认生成的是axf文件。如果想要生成hex文件,则只需要简单地勾一下:生成bin文件要生成bin文件,则需要用到fromelf。Keil自带了一个小工具,可以通过执行指令来将AXF文件转换为BIN文件这就需要调用一个外部程序fromelf.exe来将AXF文件转换为BIN格式文件。fromelf.exe文件的位置在安装目录Keil_v5\ARM\ARMCC\bin或者Keil_v5\ARM\ARMCLANG\bin目录下。在Options..._fromelf.exe在哪?
文章浏览阅读1.8k次。写这篇分享的初衷:我想把我自己的一些经验分享给大家,希望新人们能少走一些弯路。这篇文章的由来:2011/11/24 团队内部 求职经验分享 整理后所得。—————————————我是分割线—————————————————我的求职结果:新太实习offer,淘宝实习offer腾讯offer,深信服offer—_程序员技术分享讲什么
文章浏览阅读398次。概述 Stream API(java.util.stream.*) Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。 使用Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。也可以使用 Stream API 来并行执行操作。 Stream API 提供了一种高效且易于..._java8 stream
文章浏览阅读7k次,点赞10次,收藏38次。目录cmake编译opencv时速度过慢或超时mingw32-make时报错错误一 [modules\core\CMakeFiles\opencv_core.dir\build.make:1494: modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj] Error 1错误二 [modules\core\CMakeFiles\opencv_core.dir\build.make:1708: bin/libopencv_co..._-- ffmpeg: download: opencv_videoio_ffmpeg.dll很慢
文章浏览阅读1k次。Java是如何实现跨平台的?目录Java是如何实现跨平台的?各个版本特性:JAVA SE7Java 7 更新[編輯]JAVA SE8Java 8 更新Java SE 9跨平台是怎样实现的呢?这就要谈及Java虚拟机(Java Virtual Machine,简称 JVM)。JVM也是一个软件,不同的平台有不同的版本。我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件。Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然..._jvm版本
文章浏览阅读4.6k次,点赞2次,收藏3次。摘要:做html布局的时候经常用到图标和文字的混排,使用的时候经常要调很长时间,今天来总结一下。_html头部怎么把字体和图标放在一起