草庐IT

try-finally

全部标签

java - 有没有更简洁的方法来使用 try-with-resource 和 PreparedStatement?

这是Main.java:packagefoo.sandbox.db;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;publicclassMain{publicstaticvoidmain(String[]args){finalStringSQL="select*fromNVPAIRwherename=?";try(Connectionconnection=DatabaseManager.getConnectio

java - 如何将字符串转换为 float 并避免在 java 中使用 try/catch?

在某些情况下,我需要将字符串转换为float或其他一些数字数据类型,但有可能得到一些不可转换的值,例如“-”或“/”,我无法验证所有值事先删除它们。我想避免在这件事上使用try/catch,有没有其他方法可以在java中进行正确的转换?类似于C#TryParse的东西? 最佳答案 我能想到的最简单的事情是java.util.Scanner。然而,这种方法需要为每个字符串创建一个新的Scanner实例。Stringdata=...;Scannern=newScanner(data);if(n.hasNextInt()){//check

java - 如果在 finally block 中抛出异常,是否最终完全执行

所以我这里有一些代码,但我不确定在reader.close()方法抛出异常时它会如何react。publicvoidsomeMethod(Strings)throwsIOException{BufferedReaderreader=Files.newBufferedReader(filePath,cs);listRWLock.readLock().lock();try{//miscellaneouscodeinvolvingreading}finally{reader.close()listRWLock.readLock().unlock()}}ListRWLock是一个Reentra

java - 我们能否在发生异常的try block 中获取LineNumber和ColumnNumber

我有以下代码,可以打印发生错误的全类名、类名、方法名。此外,我能够打印行号,但打印的行号是初始化变量“LineNumber”的行。如何在发生错误的tryblock中打印准确的LineNumber和ColumnNumber?try{SQLQuery}catch(Exceptione){StringfullClassName=Thread.currentThread().getStackTrace()[1].getClassName();StringclassName=fullClassName.substring(fullClassName.lastIndexOf(".")+1);Str

java - 为什么 final 是 Java 中局部变量的唯一修饰符?

classTest{publicstaticvoidmain(String[]args){privateintx=10;publicinty=20;protectedintz=30;staticintw=40;finalinti=50;}}此处唯一适用的修饰符是final;对于其他修饰符,程序给出编译器错误。这是为什么?请详细说明。 最佳答案 简而言之-在这种情况下,其他修饰符都没有意义。说一个变量是public、private、protected或static在上下文中根本没有意义一旦方法退出,将超出范围(并被垃圾收集)的局部变量

java - Java 1.6 中的 Try-with-resources 等价物

我有以下代码:publicclassMain{publicstaticvoidmain(String[]args)throwsSQLException{try(Connectionconn=DBUtil.getConnection(DBType.HSQLDB);Statementstmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);ResultSetrs=stmt.executeQuery("SELECT*FROMtours");){DBUtil.getConnec

Java 7 -> Java 8 : AES Causes exception: "BadPaddingException: Given final block not properly padded" in conjunction with BufferedReader & ZipStreams

我们使用以下语句实例化密码:Ciphercipher=Cipher.getInstance("AES");SecretKeySpeckey=newSecretKeySpec(cipherKey,"AES");这在Java7(1.7_45)中有效,但在Java8(1.8_25)中不再有效。我们将cipher传递给CipherInputStream并使用流来读取/写入数据。实际异常发生在close期间。编辑:快速查看JDK代码会发现BadPaddingException被重新抛出,在7中它被忽略了:JDK7:CipherInputStream.close:try{this.cipher.d

java - 关键字 final 对 JVM 有什么影响吗?

这个问题在这里已经有了答案:DoesuseoffinalkeywordinJavaimprovetheperformance?(14个答案)关闭7年前。现在,我最近遇到了一条建议,建议您应尽可能广泛地使用关键字final。这很好,可以防止程序员开枪打自己的腿——也就是说,重新分配不应重新分配的变量。但是,它还有其他目的吗?也就是说,JVM能否使用有关最终变量的信息以某种方式优化字节码,使其运行得更快(构建更好的流水线或在多线程环境中使用它)?或者只是一种语法糖,可以最大限度地减少代码开发过程中出错的可能性?

java try catch 异常后还会继续执行吗

1、有try-catch语句块,并且throw在catch语句块里,那么try语句块中引发异常(报错)的那一行代码的后续代码都不执行并且catch语句块后的代码也都不执行(遇到finally除外)。(见情形一和情形二)2、有try-catch语句块,并且throw在try语句块里,那么try语句块中引发异常(报错)的那一行代码的后续代码都不执行,但是catch语句块后的代码会继续执行。(见情形三)3、有try-catch语句块,但是没有throw语句,那么try语句块中引发异常(报错)的那一行代码的后续代码都不执行,但是catch语句块后的代码会继续执行。(见情形四)4、有try-catch语

java - 为什么 Java 的 BigDecimal 类没有声明为 final?

在检查Java的源代码时BigDecimal类,令我惊讶的是它未声明为最终类:ClassBigDecimalpublicclassBigDecimalextendsNumberimplementsComparableImmutable,arbitrary-precisionsigneddecimalnumbers.(来自OracleDocs)这是否有特定原因,或者开发人员只是忘记添加该关键字?不将不可变类声明为final是一种好习惯吗?BigInteger也是如此,但不适用于String这被宣布为最终的。 最佳答案 引自https: