概述

顾名思义,通俗来说异常就是指,那些产生在我们本来斟酌和设定的计划以外的意外情况。

生活中总是会存在各种突发情况,如果没有做好准备,就让人措手不及。

你和朋友约好了明天1起去登山,半道上忽然乌云蔽日,下起了磅礴大雨。这就是所谓的异常情况。

你1下子傻眼了,然后看见朋友淡定的从背包里取出1件雨衣穿上,淫笑着看着你。这就是对异常的处理。

对1个OO程序猿来说,所做的工作就是:将需要处理的现实生活中的复杂问题,抽象出来编写成为程序。

既然现实生活中总是存在着各种突然的异常情况,那末对应其抽象出的代码,自然也是存在这样的风险的。

所以常常说:要编写1个完善的程序其实不只是简简单单的把功能实现,还要让程序具有处理在运行中可能出现的各种意外情况的能力。

这就是所谓的异常的使用。

体系

这就是Java当中异常体系的结构构成,从图中我们可以提取到的信息就是:

1、Java中定义的所有异常类都是内置类Throwable的子类。

2、Java中的异常通常被分为两大类:Error和Exception:

那末顾名思义,Error代表毛病,Exception代表异常;

Error用以指明与运行环境相干的毛病,JVM没法从此类毛病中恢复,此类异常无需我们处理;

Exception代表着可以被我们所处理的异常情况,我们需要掌握和使用的,正是该类型。

3、Exception最多见的两种异常类型分别是:

IOException:主要是用以处理操作数据流时可能会出现的各种异常情况。

RuntimeException:指产生在程序运行时期的异常,如数组越界,入参不满足规范等情况引发的程序异常。

工欲善其事,必先利其器

要理解Java中的异常使用,首先要明白几个关于异常处理的工具 - 异常处理关键字的使用。

1、throw:用以在方法内部抛出指定类型的异常。

void test(){ if(产生异常的条件){ thorw new Exception("抛出异常"); } }

2、throws:用以声明 1个方法可能产生的异常(通常都是编译时检测异常)有哪些。

void test() throws 异常1,异常2{ //这个方法可能产生异常1,异常2 throw new 异常1(); throw new 异常2();  }

3、try - catch:另外一种处理异常的方式,与throws不同的是,这类方式是指 "捕获并处理"的方式。

用try语句块包括可能产生异常的代码,catch用于捕获产生的异常,并在catch语句块中定义对捕获到的异常的处理方式。

try { //可能产生异常的代码 } catch (要捕获的异常类型 e) { //对捕获到的异常的处理方式 }

4、finally语句块:通常都是跟在try或try-catch以后进行使用,与其名字代表的1样。也就是定义终究的操作。

特点是被try语句块包括的内容中,是不是真的产生了异常。程序终究都将履行finally语句块当中的内容。

通经常使用于对资源的释放操作,例如:通过JDBC连接数据库等情况。

try { //获得资源 } catch (要捕获的异常类型 e) { //对捕获到的异常的处理方式 }finally{ //释放资源 }

趣解异常的实际使用

了解Java中异常类的实际利用之前,应当先了解两个概念,用以对最经常使用的异常做1个分类:

1、编译时被检测异常:

只要是Exception和其子类都是,除特殊子类RuntimeException体系。

所谓的编译时被检测异常也就是指在程序的编译器就会进行检测的异常分类。

也就是说,如果1个方法抛出了1个编译时检测异常,Java则要求我们必须进行处理。

既:通过throws对异常进行声明处理 或是 通过try-catch对异常进行捕获处理。

如果程序编译时检测到该类异常没有被进行任何处理,那末编译器则会报出1个编译毛病。

public class Test{ public static void main(String[] args) { try { Class clazz = Class.forName("Java"); System.out.println(clazz.getName()); } catch (ClassNotFoundException e) { System.out.println("没有找到该类"); } } }

上面代码中的ClassNotFoundException就是1种编译时检测异常,这个异常是由Class类当中的forName方法所抛出并声明的。

如果我们在使用该方法时没有对异常进行处理:声明或捕获,那末该程序就会编译失败。

通过这个例子想要说明的是:编译时被检测异常通常都是指那些“可以被我们预感”的异常情况。

正例如:我们通过Class.forName是想要获得指定类的字节码文件对象,所以我们自然也能够预感可能会存在:

与我们传入的类名参数所对应的类字节码文件对象不存在,查找不到的情况。

既然这类意外情况是可以被预感的,那自然就应当针对其制定1些应对方案。

项目建设完成以后的结构:

前面介绍了Shell脚本的基础和运算符等,今天再来看1下关于Shell脚本的输入与输出。

项目建设完成以后的结构:

echo

项目建设完成以后的结构:

cat

项目建设完成以后的结构:

tee

项目建设完成以后的结构:

Shell输入与输出的1些概念:

项目建设完成以后的结构:

标准输入、输出和毛病

项目建设完成以后的结构:

使用文件描写符

项目建设完成以后的结构:

输入输出命令的用法:

项目建设完成以后的结构:

该命令的作用是可以显示文本行或变量,或把字条串输入到文件.

项目建设完成以后的结构:

echo [option] string

项目建设完成以后的结构:

- -n 回车不换行,linux系统默许回车换行

项目建设完成以后的结构:

例子:

项目建设完成以后的结构:

#!/bin/bash #echotest echo -e "we aref testing echo command " echo -n "we are testing echo command" echo "OK" echo echo "we are testing echo command " echo "output this string to file">echo_output.txt 项目建设完成以后的结构:

jesson@jesson-HP:~/develop/workspace/shell_workspace$ chmod a+rx echotest.sh jesson@jesson-HP:~/develop/workspace/shell_workspace$ ./echotest.sh we are testing echo command we are testing echo commandOK we are testing echo command 项目建设完成以后的结构:

2. read

项目建设完成以后的结构:

用法:

项目建设完成以后的结构:

- 如果只指定1个变量,那末read将会把所有的输入赋给该变量,直至遇到第1个文件结束符或回车;如果给出了多个变量,它们按顺序分别被赋予不同的变量。shell将用空格作为变量之间的分隔符。

项目建设完成以后的结构:

readtest.sh

项目建设完成以后的结构:

给予权限,履行脚本:

项目建设完成以后的结构:

3. cat

项目建设完成以后的结构:

用法:

项目建设完成以后的结构:

例子:

项目建设完成以后的结构:

注意,cat命令是将输入的所有内容显示出来,如果需要分页显示,则可借助于管道|和more或less命令来实现。

项目建设完成以后的结构:

可以通过管道把1个命令的输出传递给另外一个命令作为输入。

项目建设完成以后的结构:

格式:command1 | command2

项目建设完成以后的结构:

jesson@jesson-HP:~/develop/workspace/shell_workspace$ ls -l 总用量 32 -rw-rw-r-- 1 jesson jesson 25 1月 22 20:16 cattest.sh -rw-rw-r-- 1 jesson jesson 27 1月 22 19:50 echo_output.txt -rwxrwxr-x 1 jesson jesson 209 1月 22 19:50 echotest.sh -rwxrw-r-- 1 jesson jesson 94 1月 15 21:20 helloworld.sh -rwxrw-r-- 1 jesson jesson 637 1月 17 17:07 parm.sh -rwxrwxr-x 1 jesson jesson 299 1月 22 20:10 readtest.sh -rwxr-xr-x 1 jesson jesson 47 1月 17 15:21 searchfile.sh -rw-rw-r-- 1 jesson jesson 141 1月 22 20:18 shelltest.bak jesson@jesson-HP:~/develop/workspace/shell_workspace$ ls -l | grep parm.sh -rwxrw-r-- 1 jesson jesson 637 1月 17 17:07 parm.sh jesson@jesson-HP:~/develop/workspace/shell_workspace$ df -k df: "/root/.gvfs": 权限不够 文件系统 1K-块 已用 可用 已用% 挂载点 /dev/sda9 29525076 12915484 15109792 47% / udev 2031604 4 2031600 1% /dev tmpfs 816612 860 815752 1% /run none 5120 0 5120 0% /run/lock none 2041528 792 2040736 1% /run/shm /dev/sda10 49135432 28230216 18409268 61% /home /dev/sda1 73400952 43260784 30140168 59% /media/00006A15000514EC /dev/sda5 138424040 123913684 14510356 90% /media/00010A370001FCE2 /dev/sda6 56504040 44425044 12078996 79% /media/000E2D72000188C0 /dev/sda7 138134868 32924076 105210792 24% /media/0008EEFF00004113 jesson@jesson-HP:~/develop/workspace/shell_workspace$ df -k | awk '{print $1}' df: "/root/.gvfs": 权限不够 文件系统 /dev/sda9 udev tmpfs none none /dev/sda10 /dev/sda1 /dev/sda5 /dev/sda6 /dev/sda7 jesson@jesson-HP:~/develop/workspace/shell_workspace$ df -k | awk '{print $1}' | grep -v "文件系统" df: "/root/.gvfs": 权限不够 /dev/sda9 udev tmpfs none none /dev/sda10 /dev/sda1 /dev/sda5 /dev/sda6 /dev/sda7 jesson@jesson-HP:~/develop/workspace/shell_workspace$ df -k | awk '{print $1}' | grep -v "文件系统"|grep dev df: "/root/.gvfs": 权限不够 /dev/sda9 udev /dev/sda10 /dev/sda1 /dev/sda5 /dev/sda6 /dev/sda7

项目建设完成以后的结构:

5. tee

项目建设完成以后的结构:

用法:

项目建设完成以后的结构:

- 如果希望在看到输出的同时,也将其存入1个文件,那末,这个命令就最适合,-a,表示追加的意思。

项目建设完成以后的结构:

例子:

项目建设完成以后的结构:

5. exec

项目建设完成以后的结构:

用法:

项目建设完成以后的结构:

-其中的command通常是1个shell脚本。

项目建设完成以后的结构:

输入输出的基本概念:

项目建设完成以后的结构:

在shell中履行命令时,每一个进程都和3个打开的文件相联系,并使用文件描写符来援用这些文件,由于文件描写符不容易记,shell同时也给出了相应的文件名。

项目建设完成以后的结构:

文件描写符

项目建设完成以后的结构:

0(缺省是屏幕,也能够是文件)

项目建设完成以后的结构:

1(缺省是键盘,也能够是文件或其他命令的输出)

linux php直接输出,linux学习之shell脚本 ------- 输入与输出相关推荐

  1. linux脚本调用db2存储过程,LINUX定时执行含有DB2存储过程的SHELL脚本

    <LINUX定时执行含有DB2存储过程的SHELL脚本>由会员分享,可在线阅读,更多相关<LINUX定时执行含有DB2存储过程的SHELL脚本(6页珍藏版)>请在人人文库网上搜 ...

  2. linux停止jar程序,Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法

    废话不多说了,先给大家上代码,具体代码如下所示: #!/bin/bash cd `dirname $0` CUR_SHELL_DIR=`pwd` CUR_SHELL_NAME=`basename ${ ...

  3. linux脚本查看系统内存,二个linux下查看内存使用情况的shell脚本()

    摘要 腾兴网为您分享:二个linux下查看内存使用情况的shell脚本(),政务易,悦作业,优化大师,王者荣耀等软件知识,以及单向历app,优路教育app,kimoji,开关电源设计软件,皮皮高清影视 ...

  4. linux启动脚本springboot,Linux 启动停止SpringBoot jar 程序部署Shell 脚本的方法

    废话不多说了,先给大家上代码,具体代码如下所示: #!/bin/bash cd `dirname $0` cur_shell_dir=`pwd` cur_shell_name=`basename ${ ...

  5. C++学习基础八——重载输入和输出操作符

    C++学习基础八--重载输入和输出操作符 一.重载输入操作符的要点: 1.返回值为istream &. 2.第一个参数为istream &in. 3.第二个参数为自定义类型的引用对象( ...

  6. android执行命令行取得结果,Android调用shell脚本并取得输出

    Android调用shell脚本并获得输出 前段时间做的HLS流媒体服务器可以正常工作了,但是它的启动需要在PC机命令行中进行或者在Android下载个Terminal IDE软件,在Android上 ...

  7. 量产150W 双路输出开关电源全套设计生产资料, 输入220VAC,输出24V5A+5V2A,,PCB及原理图使用AD设计

    量产150W 双路输出开关电源全套设计生产资料, 输入220VAC,输出24V5A+5V2A,PCB及原理图使用AD设计,pcb使用元件带3D模型, 采用NE1118B作为PWM控制IC, 单路24V ...

  8. linux脚本是什么语言,Linux学习之Shell脚本语言的优势是什么?

    当我们学习Linux技术的时候,会涉及各种各样的知识和内容,比如说shell脚本语言,我想很多人都会疑惑shell脚本语言有什么优势?为何学习Linux的时候必须学习呢?我们来看看吧. 当命令和程序语 ...

  9. linux shell脚本学习指南,shell脚本学习指南[二](Arnold Robbins Nelson H.F. Beebe著)

    该进入第四章了,刚才看到一个帖子标题:我空有一身泡妞的好本领,但可惜自己是个妞.汗-这个...音乐无国界嘛,这个不应该也没性别界么? 第四章文本处理工具 书中先说明了以下排序的规则,数值的就不用说了, ...

最新文章

  1. createtempfile 会自动回收么_靠退瓶押金能也赚到百万欧元 ,德国骗子的提款机=饮料瓶自动回收机...
  2. android android:process=,关于android:Android-appprocess的使用
  3. 2016百度编程题:钓鱼比赛
  4. 典型分类器评价指标及实例
  5. 云炬60s看世界20211117
  6. 关于项目重构,知道真相的程序员眼泪笑了出来
  7. mysql主从搭建配置(mysql version5.7.22)
  8. mac 下修改 jenkins 端口以及Jenkins的启动、关闭与更新
  9. 【学习 OpenCV】—— imgproc.hpp 核心api
  10. 1.vue前端项目实战-登录功能
  11. ResNet训练单通道图像分类网络(Pytorch)
  12. SDUT 3337 计算长方体、四棱锥的表面积和体积
  13. java 登陆qq_纯java的QQ登陆界面
  14. 计算机日历算法流程图,计算机日历
  15. 学习编程可以从事哪些行业
  16. 【树莓派】网络视频监控
  17. 利用Mininet环境-交换机转发实验整个过程
  18. 不是华为手机可以装鸿蒙,不是华为手机,也能用上鸿蒙系统
  19. 首席新媒体运营黎想教程:活动运营避坑指南,促销活动的正确使用
  20. Vim Editor

热门文章

  1. c语言doc是什么文件类型,c语言文件后缀意思.doc
  2. mysql联合主键,也就是两个数据字段一起做主键的情况
  3. 计算机管理器里不显示用户,电脑Administrator用户帐户不显示的解决方法
  4. Matlab实现云模型
  5. IDEA包死活引入不进来的问题
  6. 阿里巴巴2016算法岗实习招聘(西安)在线笔试整理
  7. 安装vmware虚拟机详细教程
  8. 21.深入浅出:直流电源的组成_单相整流滤波电路——参考《模拟电子技术基础》清华大学华成英主讲
  9. 理想汽车股权曝光:李想持股22.8% 有70%投票权
  10. list和tuple的区别: