一、异常

1.1、异常定义

异常:--不正常,程序在运行时出现不正常情况

异常由来:其实也是现实生活中一个具体的事物,马可以通过JAVA的类的形式表现描述,并封装成类。

Java对不正常情况描述后的,对象体现。

异常:两种.

一种是严重的问题:java通过Error类进行描述

对于Error一般不编写针对必的代码对其进行处理

对与非严重的:java通过Exception类进行描述

对于Exception可以使用针对必的处理方式进行处理。

示例:

package com.day10.demo1;

public class Demo1 {

    public static void main(String[] args) {

        System.out.println(div(5,0));
System.out.println("over"); } public static int div(int a,int b){
return a/b;
} }

结果:

Exception in thread "main" java.lang.ArithmeticException: / by zero
at com.day10.demo1.Demo1.div(Demo1.java:14)
at com.day10.demo1.Demo1.main(Demo1.java:7)

算术异常,因为除数为0,所以,有异常了

1.2、异常体系结构

Java 提供了两类主要的异常:runtime exception 和checked exception。所有的checked exception 是从java.lang.Exception 类衍生出来的,而
runtime exception 则是从java.lang.RuntimeException 或java.lang.Error类衍生出来的。

它们的不同之处表现在两方面:机制上和逻辑上

runtime exceptions:

  • 在定义方法时不需要声明会抛出runtime exception
  • 在调用这个方法时不需要捕获这个runtime exception
  • runtime exception 是从java.lang.RuntimeException 或
  • java.lang.Error 类衍生出来的。

checked exceptions:

  • 定义方法时必须声明所有可能会抛出的checked exception
  • 在调用这个方法时,必须捕获它的checked exception,不然就得
  • 把它的exception 传递下去
  • checked exception 是从java.lang.Exception 类衍生出来的

从逻辑的角度来说,checked exceptions 和runtime exception 是有不同的使用目的的。

checked exception 用来指示一种调用方能够直接处理的异常情况。checked exception 迫使你捕获它并处理这种异常情况。

而runtime exception 则用来指示一种调用方本身无法处理或恢复的程序错误。

1.3、异常使用语句

try{
// 有可能出现异常的语句
}catch(异常类 异常对象){
// 编写异常的处理语句
}[ catch(异常类 异常对象){
// 编写异常的处理语句
} catch(异常类 异常对象){
// 编写异常的处理语句
} …. ]
[finally{
一定会运行到的程序代码 ;
}

主要搭配:try-catch、try-catch-finally、try-finally三种形式

1.4、使用try--catch

没有使用异常

package com.day10.exception.demo1;

public class Demo1 {

    public static void main(String[] args) {

        int x=5;
int y=0;
int index=div(x,y);
System.out.println("执行完成"); }
public static int div(int a,int b){
return a/b;
}
}

结果:

Exception in thread "main" java.lang.ArithmeticException: / by zero

最后输出语句没有执行

使用try--catch

package com.day10.exception.demo1;

public class Demo1 {

    public static void main(String[] args) {

        int x=5;
int y=0;
try {
int retsult=x/y;
} catch (Exception e) { e.printStackTrace();
} System.out.println("执行完成"); } }

结果:

java.lang.ArithmeticException: / by zero
at com.day10.exception.demo1.Demo1.main(Demo1.java:10)
执行完成

异常代码块后面的代码被执行了。

try-中的代码发生异常后,跳转到相就的 catch块中,捕获异常,完成后,执行异常块后面的代码

1.5、try-catch-finally

package com.day10.exception.demo1;

public class Demo1 {

    public static void main(String[] args) {

        int x=5;
int y=0;
try {
int retsult=x/y;
System.out.println("执行到我说明没有异常");
} catch (Exception e) {
System.out.println("发生异常了");
e.printStackTrace();
}finally{
System.out.println("我一定会被执行");
} System.out.println("执行完成"); } }

结果:

发生异常了
我一定会被执行
执行完成
java.lang.ArithmeticException: / by zero
at com.day10.exception.demo1.Demo1.main(Demo1.java:10)

1.6、finally中的代码不执行

package com.day10.exception.demo1;

public class Demo1 {

    public static void main(String[] args) {

        int x=5;
int y=0;
try {
int retsult=x/y;
System.out.println("执行到我说明没有异常");
} catch (Exception e) {
System.out.println("发生异常了");
e.printStackTrace();
System.exit(0); //或者-1
}finally{
System.out.println("我一定会被执行");
} System.out.println("执行完成"); } }
发生异常了
java.lang.ArithmeticException: / by zero
at com.day10.exception.demo1.Demo1.main(Demo1.java:10)

1.7、如果有return 怎么执行

try中有return

package com.day10.exception.demo1;

public class Demo2 {

    public static void main(String[] args) {

        System.out.println(getException());
}
public static int getException(){ try {
int x=5;
System.out.println("try return");
return x;
} catch (Exception e) {
System.out.println("catch return");
}finally{
System.out.println("finally return");
}
return 0;
} }

结果:

try return
finally return
5

try中的return并不会影响finally中的代码执行

catch中有return

package com.day10.exception.demo1;

public class Demo2 {

    public static void main(String[] args) {

        System.out.println(getException());
}
public static int getException(){
int x=5;
try {
int result=x/0;
System.out.println("try return");
return x;
} catch (Exception e) {
System.out.println("catch return");
return ++x;
}finally{
System.out.println("finally return");
}
} }

结果:

catch return
finally return
6

catch中的return也不会影响finally中的执行,但是返回结果会是catch中的return结果,会将try中的结果覆盖

finally中有return

package com.day10.exception.demo1;

public class Demo2 {

    public static void main(String[] args) {

        System.out.println(getException());
}
public static int getException(){
int x=5;
try {
int result=x/0;
System.out.println("try return");
return x;
} catch (Exception e) {
System.out.println("catch return");
return ++x;
}finally{
System.out.println("finally return");
return ++x;
}
} }

结果:

catch return
finally return
7

finally中的return也不会影响finally中的执行,但是返回结果会是finally中的return结果,会将try和catch中的结果覆盖

1.8、多个catch块

exception异常 一定要放在最扣,不然下方的异常无法执行到,只会执行父类执行而子类的异常不会被捕获

package com.day10.exception.demo1;

import java.util.InputMismatchException;
import java.util.Scanner;
/*
* 求2个整数的商 当异常发生时,程序如何处理
*/
public class Demo2 { public static void main(String[] args) { // 从键盘获得输入
try {
Scanner input = new Scanner(System.in);
System.out.println("请输入被除数:");
int num1 = input.nextInt();
System.out.println("请输入除数:");
int num2 = input.nextInt();
int result = num1 / num2;
System.out.println(num1 + "与" + num2 + "的商: " + result);
} catch (InputMismatchException e) {
System.out.println("输入的不是数字");
e.printStackTrace(); } catch (ArithmeticException e) {
System.out.println("除数不能为0");
e.printStackTrace();
} catch (Exception e) {
System.out.println("其它错误!");
e.printStackTrace();
} finally {
System.out.println("谢谢使用!");
} } }

结果1:

请输入被除数:
fsd
输入的不是数字
谢谢使用!
java.util.InputMismatchException

结果2

请输入被除数:
9
请输入除数:
0
除数不能为0
谢谢使用!
java.lang.ArithmeticException: / by zero

结果3:

请输入被除数:
7
请输入除数:
3
7与3的商: 2
谢谢使用!

1.9、自定义异常

自定义异常只需要继承Exception类就

定义异常类,只需要继承Exception类即可。

当然可以继承其它的如:Exception,Throwable,RuntimeException及其子类,其中继承Exception,Throwable,效果,如果不要求调用者一定要处理抛出的异常可以继承RuntimeException及其子类
调用时只需要throw new 自定义异常名(信息)
package com.day10.exception.demo1;
/**
* 自定义异常
* @author denny
*
*/
public class MyException extends Exception { public MyException() {
super();
} public MyException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace); } public MyException(String message, Throwable cause) {
super(message, cause); } public MyException(String message) {
super(message); } public MyException(Throwable cause) {
super(cause);
} }

上面为算定义异常,使用构造方法重载即可

1.10、throw和throws抛出异常

使用上面的算定义异常

package com.day10.exception.demo1;

public class Person {

    private String name;
private int age;
private String gender; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
if (age >= 0 && age <= 150) {
this.age = age;
} else {
try {
throw new MyException("年龄只能在0-150岁之间");
} catch (MyException e) {
e.printStackTrace();
}
}
} public String getGender() {
return gender;
} public void setGender(String gender) throws MyException {//
if(gender.equals("男")||gender.equals("女")){
this.gender = gender;
}else{
throw new MyException("性别只能是男或者女!");
/*
throw可以在方法体内抛出异常,但必须捕获或者
在方法体上用throws抛出
*/
}
}
public void printSelf(){
System.out.println("姓名:"+this.name+" 性别:"+this.gender+" 年龄:"+this.age);
} }

测试类

package com.day10.exception.demo1;

public class PersonTest {

    public static void main(String[] args) {
Person p=new Person(); try {
p.setName("张三");
p.setAge(200);
p.setGender("人妖");
} catch (MyException e) {
e.getMessage();//获取异常信息
}finally{ } } }

结果:com.day10.exception.demo1.MyException: 年龄只能在0-150岁之间

因为在执行age赋值时,已经发生异常,所以下面的性别赋没有执行

package com.day10.exception.demo1;

public class PersonTest {

    public static void main(String[] args) {
Person p=new Person(); try {
p.setName("张三");
p.setAge(20);
p.setGender("人妖");
p.printSelf();
} catch (MyException e) {
//System.out.println(e.getMessage());//获取异常信息
e.printStackTrace();
}finally{ } } }

结果:

com.day10.exception.demo1.MyException: 性别只能是男或者女!

二、包

2.1、包的含义

对文件进行分类管理,类似于windows中的文件夹,同一包同一层

给类提供多层命名空间,同一个文件夹文件名不相同,层次关系,

写在程序文件的第一行

类名的全称是包名.类名.

包也是一种封装形式

2.2、包的定义

package 包名,

包名必须小写,可以使用.小数点来定义多层次包

必须放在代码的第一行

javac -d  .   java文件名.java  .代表当前文件夹目录

包的出现可以把java的class文件和源文件相分离,只需要将 class文件复制出来运行就可以

定义包名不要重复

2.3、包的导入

import 包名.类名

2.4、包与包之间的访问权限

基础学习day10--异常、包的更多相关文章

  1. Java基础学习补充 -- 异常处理和log4j日志

    Java中的异常处理 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的. Java中所有异常的基类Throwable:Throwable又分为Error类和Excepti ...

  2. 【转】零基础学习Fiddler抓包改包

    看到一篇讲关于Fiddler抓包工具的讲解,个人感觉写得很仔细,但是作者说禁止转载,那就放个链接Mark一下 http://tmq.qq.com/2016/12/fiddler_packet_capt ...

  3. python基础学习1 -异常捕获

    #!/usr/bin/env python # -*- coding:utf-8 -*- #-------try-except try: file_name = input("请输入需要打开 ...

  4. [腾讯 TMQ] 零基础学习 Fiddler 抓包改包

    本文转载于https://testerhome.com/topics/7159 一.Fiddler1.1.简介Fiddler是一款HTTP协议调试代理工具,它能够抓取记录本机所有HTTP(S)请求,通 ...

  5. java基础学习日志--异常案例

    package test7; public class InvalidScroreException extends Exception { public InvalidScroreException ...

  6. python基础学习Day10 函数形参的动态参数、*args **kwargs 命名空间 global 与 nonlocal

    一.函数形参的动态参数 原因:为了拓展,对于实参数量不固定,故需要万能参数,即动态参数, *args   **kwargs # def sum1(*args): # 在函数定义时,在*位置参数,聚合. ...

  7. Python入门基础学习(模块,包)

    Python基础学习笔记(五) 模块的概念:模块是python程序架构的一个核心概念 每个以拓展名py结尾的python源代码文件都是一个模块 模块名同样也是一个标识符,需要符合标识符的命名规则 在模 ...

  8. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  9. Yaf零基础学习总结4-Yaf的配置文件

    在上一节的hello yaf当中我们已经接触过了yaf的配置文件了, Yaf和用户共用一个配置空间, 也就是在Yaf_Application初始化时刻给出的配置文件中的配置. 作为区别, Yaf的配置 ...

  10. Node.js系列基础学习-----回调函数,异步

    Node.js基础学习 Node.js回调函数 Node.js异步编程的直接体现就是回调,异步编程依托回调来实现,但不是异步.回调函数在完成任务后就会被调用,Node有很多的回调函数,其所有的API都 ...

随机推荐

  1. Android 2.1 和 Android 4.4 工程目录超详细对比及详解

    在搭建Android开发环境及简单地建立一个HelloWorld项目后,本篇将通过HelloWorld项目来介绍Android项目的目录结构.本文的主要主题如下: 1.1.HelloWorld项目的目 ...

  2. UVAoj 11324 - The Largest Clique(tarjan + dp)

    题意:给定一个有向图,寻找一个点数最大集合,使得这个集合中的任意两个点 u,v, 都有u->v 或者 v->u 或者u<==>v 思路:首先将强连通分量通过tarjan算法求出 ...

  3. Sass学习之路:Sass、Compass安装与命令行

    导言 CSS不是一门真正意义上的编程语言,很多编程语言理所当然的特性(比如变量),都不被支持.同时再开发模块化的web项目的时候,也要避免相互干扰.为了弥补CSS的这些不足,就产生了CSS预处理器,S ...

  4. Flatic – 超齐全的 Web 元素界面素材库免费下载

    Flatic 是一个庞大的用户界面工具包,包含数以百计的网页元素,这将有助于你在 Photoshop 中轻松设计整个网站.成套的图标和动作都已包含在套件中.该素材包包括超过100个 PSD 元素.您可 ...

  5. iOS-金额小写转大写

    一.目的 1. 金额小写转化成大写. 如 123456.65 --> 壹拾贰万叁仟肆佰伍拾陆元陆角伍分 2. 只能处理13位数的金额,并且只能处理到小数点后两位. 二.代码 #import &q ...

  6. [数据库]sql之行顺序

    这个文章主要是防止我忘了sql的执行顺序,解释的东西我都没怎么看懂.数据库渣如我- 逻辑查询处理阶段简介 FROM:对FROM子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联 ...

  7. js-弹出窗口

    一.JS最常用三种弹出对话框 1.对话框 //弹出对话框并输出一段提示信息 function ale() { //弹出一个对话框 alert("提示信息!"); } 2.询问框 / ...

  8. 阅读《深入理解JavaScript定时机制》

    鸟哥的这篇<深入理解JavaScript定时机制>从javascript线程角度分析了setTimeout和setInterval两个定时触发器的实现原理. 看完的体验就是主要要记住两点: ...

  9. 转载:第四弹!全球首个微信小程序(应用号)开发教程!通宵吐血赶稿,每日更新!

    感谢大家支持!博卡君周末休息了两天,今天又回到战斗状态了.上周五晚上微信放出官方工具和教程了,推荐程序猿小伙伴们都去试一试,结合教程和代码,写写自己的 demo 也不错. 闲话不多说,开始更新! 第七 ...

  10. [Architect] Abp 框架原理解析(5) UnitOfWork

    本节目录 介绍 分析Abp源码 实现UOW 介绍 UOW(全称UnitOfWork)是指工作单元. 在Abp中,工作单元对于仓储和应用服务方法默认开启.并在一次请求中,共享同一个工作单元. 同时在Ab ...