Java和php中的try-catch分析
描述:对一个健壮的系统来讲,异常处理是必不可少的一部分,针对异常的管理,主要就是异常的捕获和处理操作,然而在php中使用try-catch的时候,我个人感觉没有java中的舒服,因为在php中try-catch时,你要手动throw异常才能达到你预期的异常处理效果,而java不同,你无需去手动throw异常,在try区域中,会自动捕获异常,并处理。
php:try-catch实例
1:创建一个可抛出一个异常的函数
function testError(){
$s=2/0;
throw new Exception("Value must be 1 or below");//这里必须进行手动throw异常才行
return true;
}
2:在 "try-catch" 代码块中捕获异常
try {
testError();
echo '当一个整数除以一个0后,如没有手动throw异常的话,仍然会执行到这里。';
}catch(Exception $e) {
echo 'Error Message: ' .$e->getMessage();
}
注:执行上面的测试程序后会出现下面提示:
看到上面的一些提示后,我们作为开发人员就明白了大致是什么错误导致的这个异常,但是作为一个健壮的系统来讲,这些提示是不应该显示给用户的,提供给用户看到的是一些友好的提示信息,我们真正让用户可见的就是红框中的信息(这里是测试输出的信息,可以在此做其他友好处理),除了红框中的信息,其他都是不需要显示的,我们只需要把php.ini中的display_errors = On关闭即可,即display_errors = Off。关闭后重启一下apache,再访问一下刚才的测试程序,就会只显示上面红框中的提示信息了。
这里主要验证一下php中try-catch时必须手动throw才行,验证如下:
把异常函数中throw这一句进行注释掉,然后在运行测试一下,则会出现下面的提示:
“当一个整数除以一个0后,如没有手动throw异常的话,仍然会执行到这里”
这意味着当程序出现异常时,在try-catch中没有被捕获处理,反而下面的代码页照常给执行了,这不是我们想要的;我们再次把刚才注释掉的throw一句给去掉后,就可以正常的捕获处理异常了。
java:try-catch实例:
public class TestTry{
public static void testError(){
int i=3,n=0;
int s=i/n;
}
public static void main(String[] args){
try{
TestTry.testError();
System.out.println("Goto here");
}catch(Exceptione){
System.out.println("ErrorMessage:"+e);
}
}
}
执行上面的验证程序后:Error Message:java.lang.ArithmeticException: /by zero
注:可以看出以上java验证程序中的try-catch模块没有手动去throw,而是在try区域会自动捕获处理。
下一步将深入研究一下php的异常处理机制,如何才能进行自动操作。
转载于:https://my.oschina.net/mapsh/blog/598135
Java和php中的try-catch分析的更多相关文章
- Java程序开发中的简单内存分析
首先说明内存总体分为了4个部分, 包括 1.stack segment (栈区存储基本数据类型的局部变量,对象的引用名) 2.heap segment(堆区,一般用于存储java中new 出来的对象) ...
- 【Java学习笔记之三十三】详解Java中try,catch,finally的用法及分析
这一篇我们将会介绍java中try,catch,finally的用法 以下先给出try,catch用法: try { //需要被检测的异常代码 } catch(Exception e) { //异常处 ...
- [转载]java中try 与catch的使用
留着以后看 原文地址:与catch的使用">java中try 与catch的使用作者:碌碌如玉 try{ //代码区 }catch(Exception e){ //异常处理 } 代码区 ...
- 【Java】NIO中Selector的select方法源码分析
该篇博客的有些内容和在之前介绍过了,在这里再次涉及到的就不详细说了,如果有不理解请看[Java]NIO中Channel的注册源码分析, [Java]NIO中Selector的创建源码分析 Select ...
- Java 并发包中的读写锁及其实现分析
1. 前言 在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时 刻可以允许多个读线程访问,但是在写线程访问时,所有 ...
- Java并发编程中线程池源码分析及使用
当Java处理高并发的时候,线程数量特别的多的时候,而且每个线程都是执行很短的时间就结束了,频繁创建线程和销毁线程需要占用很多系统的资源和时间,会降低系统的工作效率. 参考http://www.cnb ...
- Java 中 try、catch、finally 语句块的执行顺序
假设代码顺序书写如下:try → catch → finally → 其他代码 则: 1.正常执行顺序:try → catch → finally → 其他代码 2.try,catch和finally ...
- Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析
目录 0.前言 1.TemporalAccessor源码 2.Temporal源码 3.TemporalAdjuster源码 4.ChronoLocalDate源码 5.LocalDate源码 6.总 ...
- Java中的内存泄漏分析说明
Java语言的一个关键的优势就是它的内存管理机制.你只管创建对象,Java的垃圾回收器帮你分配以及回收内存.然而,实际的情况并没有那么简单,因为内存泄漏在Java应用程序中还是时有发生的. 下面就解释 ...
随机推荐
- 自动由@3x图片生成@2x和@1x的图片 - Xcode插件
原文:http://www.cocoachina.com/bbs/read.php?tid=277187 生成@3x图片对应的@2x和@1x版本--RTImageAssets 关键字:Xcode插件, ...
- Light of future-冲刺集合
table th:nth-of-type(1) { width: 85px; } table th:nth-of-type(2){ width: 80px; } table th:nth-of-typ ...
- 阿里云服务器扩展分区和文件系统_Linux数据盘
官方文档永远是最好的 https://help.aliyun.com/document_detail/25452.html?spm=a2c4g.11186623.6.786.5fde4656Ln6AO ...
- mongodb 指令
db.xxx.stats() 查看表的大小 db.xxx.remove({'endtime':{'$lte':ISODate('2018-10-01')}}) 删除小于等于固定时间的数据. db.us ...
- Linux ssh登录出错
今天登录远程主机的时候,出现了以下错误: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOT ...
- 队列的含义以及C语言实现顺序队列
队列,和栈一样,也是一种对数据的"存"和"取"有严格要求的线性存储结构. 什么是队列 与栈结构不同的是,队列的两端都"开口",要求数据只能从 ...
- Windows Server 2016 Storage Replication
Storage Replication是Windows Server 2016中新增的一项功能,它是利用windows server自带的块存储复制技术 首先,我们简答粗暴的交代一下部署需求: 1.该 ...
- Linux c++ vim环境搭建系列(2)——Ubuntu18.04.4编译安装llvm clang
2. 源码编译安装llvm clang 参考网址: https://llvhttps
- Web三维编程入门总结之二:面向对象的基础Web3D框架
本篇主要通过分析Tony Parisi的sim.js库(原版代码托管于:https://github.com/tparisi/WebGLBook/tree/master/sim),总结基础Web3D框 ...
- ASP.NET MVC学习——控制器传递数据到view的简单案例
从控制传数据到view端的方法: 方法一:修改Control数据,添加ViewBag 1.ViewBag.+ 任意变量名 = "你想要输入的数据" 2.在Control对应的csh ...