A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李柯 中级黑马   /  2012-4-15 13:28  /  1667 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Exception和RuntimeException都是异常为什么一个需要try catch,而一个不需要?
它们在使用的时候区别在哪?

5 个回复

倒序浏览
回复 使用道具 举报
因为RuntimeException 是Exception个比较特殊的子类对象。
RuntimeException 如果在函数内部抛出该异常,函数上不用声明,编译一样通过。
如果函数上声明了该异常,那么在函数内部不抛出该异常,编译一样通过。

这就是RuntimeException 的特别之处。
回复 使用道具 举报
RuntimeException是Exception的子类,主要区别在于:
Java编译器要求函数必须声明抛弃可能发生的Exception,但并不要求必须声明抛弃未被捕获的RuntimeException.
回复 使用道具 举报
RuntimeException,也就是运行时异常,表示你的代码本身存在BUG,你去try-catch的就毫无意义,这就需要你去修改代码。Exception是RuntimeException的父类,除RuntimeException外,他的其他子类都可以try-catch.
回复 使用道具 举报
一、PreparedStatement的预编译机制,使其与Statement有着显著的区别
       (1)PrepareStatement语句,在经过编译器编译后,被缓存下来,下次调用相同的预编译语句时,就不需要再次编译,只要将参数直接传入编译过的语句执行代码中就能够执行。这并是说只有一个Connection中多次执行的预编译语句被缓存,而是对于整个DB中,只要预编译的语句语法和缓存中匹配,那么在任何时候都可以不需要再次编译而直接执行。
       (2)PreparedStatement提高了安全性
        Statement语句不安全的 简单示例:String sql = "select * from tb where name='"+appName+'"";利用appName参数值的输入,来生成恶意的sql语句,如:将[' or '1'='1']传入进来,就将句子的原意完全转变。
         PreparedStatement的预编译机制使你传入的任何内容不会和原来的语句发生任何匹配的关系,这样,你可以对传入数据的过滤省心许多。
二、PreparedStatement可以比较好地解决系统的本地化问题。
      譬如,在一个原始的英语系统上装好了sqlserver,那么它缺省的字符集是ANSI的Latin字符集;现在我们要将此系统作中文系统用,装好各种语言包,设置好location等等,我们期望用java写的application能够正常显示中文;但是,如果我们使用Statement往sqlserver里面插入中文得到将是编码丢失的问号等;这是因为更改设置以后,我们的字符集是gb2312,而sqlserver字符集没有变,中文串插入数据库中导致什么呢? latin字符集显然只有gb2312的一部分字符,如此导致编码丢失,无法正常显示。
三、谈谈PreparedStatement的缺点
   在执行SQL语句出错的时候,我们没有办法看到完整的SQL语句,甚至看不到设置的参数,这样,对调试带来的不便性。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马