描述:对一个健壮的系统来讲,异常处理是必不可少的一部分,针对异常的管理,主要就是异常的捕获和处理操作,然而在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分析的更多相关文章

  1. Java程序开发中的简单内存分析

    首先说明内存总体分为了4个部分, 包括 1.stack segment (栈区存储基本数据类型的局部变量,对象的引用名) 2.heap segment(堆区,一般用于存储java中new 出来的对象) ...

  2. 【Java学习笔记之三十三】详解Java中try,catch,finally的用法及分析

    这一篇我们将会介绍java中try,catch,finally的用法 以下先给出try,catch用法: try { //需要被检测的异常代码 } catch(Exception e) { //异常处 ...

  3. [转载]java中try 与catch的使用

    留着以后看 原文地址:与catch的使用">java中try 与catch的使用作者:碌碌如玉 try{ //代码区 }catch(Exception e){ //异常处理 } 代码区 ...

  4. 【Java】NIO中Selector的select方法源码分析

    该篇博客的有些内容和在之前介绍过了,在这里再次涉及到的就不详细说了,如果有不理解请看[Java]NIO中Channel的注册源码分析, [Java]NIO中Selector的创建源码分析 Select ...

  5. Java 并发包中的读写锁及其实现分析

    1. 前言 在Java并发包中常用的锁(如:ReentrantLock),基本上都是排他锁,这些锁在同一时刻只允许一个线程进行访问,而读写锁在同一时 刻可以允许多个读线程访问,但是在写线程访问时,所有 ...

  6. Java并发编程中线程池源码分析及使用

    当Java处理高并发的时候,线程数量特别的多的时候,而且每个线程都是执行很短的时间就结束了,频繁创建线程和销毁线程需要占用很多系统的资源和时间,会降低系统的工作效率. 参考http://www.cnb ...

  7. Java 中 try、catch、finally 语句块的执行顺序

    假设代码顺序书写如下:try → catch → finally → 其他代码 则: 1.正常执行顺序:try → catch → finally → 其他代码 2.try,catch和finally ...

  8. Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析

    目录 0.前言 1.TemporalAccessor源码 2.Temporal源码 3.TemporalAdjuster源码 4.ChronoLocalDate源码 5.LocalDate源码 6.总 ...

  9. Java中的内存泄漏分析说明

    Java语言的一个关键的优势就是它的内存管理机制.你只管创建对象,Java的垃圾回收器帮你分配以及回收内存.然而,实际的情况并没有那么简单,因为内存泄漏在Java应用程序中还是时有发生的. 下面就解释 ...

随机推荐

  1. Python 参数使用总结

    Python 中参数的传递非常灵活,不太容易记住理解,特整理如下备忘: 普通参数 即按照函数所需的参数,对应位置传递对应的值,可以对应 Java 中的普通参数 def max(a, b): if a ...

  2. 怎么用scratch做大鱼吃小鱼

    行走代码不说了.出鱼代码大概就是 棋子被点击时 重复执行 移到x:从()到()任意选一个数,y一样 克隆自己 等待你想要的秒数.吃鱼代码就是 当作为克隆体启动是 重复执行 如果碰到()那么 删除克隆体 ...

  3. Tcl编程第三天,数学运算

    1.tcl语言没有自己的数学计算,如果想要使用数学公式,必须得用C语言的库.使用方法如下. #!/usr/bin/tclsh set value [expr 8/5] puts $value set ...

  4. 数据结构和算法(Golang实现)(26)查找算法-哈希表

    哈希表:散列查找 一.线性查找 我们要通过一个键key来查找相应的值value.有一种最简单的方式,就是将键值对存放在链表里,然后遍历链表来查找是否存在key,存在则更新键对应的值,不存在则将键值对链 ...

  5. 区块链 Hyperledger Fabric v1.0.0 环境搭建

    前言:最近项目涉及到超级账本,在有些理论知识的基础上,需要整一套环境来. 这是一个特别要注意的事情,笔者之前按照网络上推荐,大部分都是推荐ubuntu系统的,于是下载Ubuntu系统(16.04.5和 ...

  6. 王者荣耀英雄全皮肤4K高清大图,python爬虫帮你保存下来

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取t.cn ...

  7. Nightmare BFS

    Ignatius had a nightmare last night. He found himself in a labyrinth with a time bomb on him. The la ...

  8. Pytorch实现MNIST手写数字识别

    Pytorch是热门的深度学习框架之一,通过经典的MNIST 数据集进行快速的pytorch入门. 导入库 from torchvision.datasets import MNIST from to ...

  9. PHP函数:array_key_exists

    array_key_exists()  - 检查数组里是否有指定的键名或索引. 注意:array_key_exists() 仅仅搜索第一维的键. 多维数组里嵌套的键不会被搜索到. 说明: rray_k ...

  10. Git把本地代码推送到远程github仓库

    运用Git版本控制系统进行代码的管理,以便于团队成员的协作,由于之前是使用svn来进行版本控制,所以对于Git使用还有待熟练掌握.Git与svn类似,个人认为两者之间比较直观的区别就是 Git 不需要 ...