请问下面"这一句话"怎么理解:
“如果命名类(或接口)的static字段的意思是初始化语句的求职可能突然通过受查的异常完成,则会发生编译时异常。"
-----------------------------
受查异常 :所谓受查异常,意味着客户必须处理或声明这个异常。换句话说,客户要想假装这个方法调用不是远程的,这是办不到的。
“如果命名类(或接口)的static字段的意思是初始化语句的求职可能突然通过受查的异常完成,则会发生编译时异常。"
-----------------------------
受查异常 :所谓受查异常,意味着客户必须处理或声明这个异常。换句话说,客户要想假装这个方法调用不是远程的,这是办不到的。
楼主【lord_is_layuping】截止到2008-07-04 18:32:24的历史汇总数据(不包括此帖):
发帖的总数量:122 发帖的总分数:1795
结贴的总数量:103 结贴的总分数:1635
无满意结贴数:28 无满意结贴分:636
未结的帖子数:19 未结的总分数:160
结贴的百分比:84.43 % 结分的百分比:91.09 %
无满意结贴率:27.18 % 无满意结分率:38.90 %
楼主加油
--以上出自-- Java编程规范(第三版)(美)高斯林(Gosling,J.)等编著,陈宗斌,沈金河 译 / 49.8 元
我也看不明白,
不过我猜一下,
大家看看对不对:如果一个类中有static字段,在这个static字段还没有被初始化之前,程序如果抛出了异常,而在这个异常处理中
又有对这个static字段的初始化,那么就会发生编译时异常完全是猜的!!!
一个一个直译过来的,这本书千万别买,买了后悔
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;public class TestOracle {
static Connection conn ;
static Statement stmt;
static ResultSet rs ;
static String exception1;
public static void main(String args[]) {
System.out.println("-----------------------");
String username = "oy";
String password = "oy";
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@192.168.1.201:1521:orcl1"; try {
Class.forName(driver);// .getInterfaces();
conn = DriverManager.getConnection(url, username, password);// 此行出错,无法从套接字读取更多数据
stmt = conn.createStatement(); String sql2 = "delete from g_online_customer t where t.personid='hly'";
stmt.executeQuery(sql2);
stmt.close();
conn.close();
System.out.println("success");
} catch (Exception e) {
e.printStackTrace();
System.out.println("sql exception!");
exception1="";//这里没有报编译错啊。
} System.out.println("--------------------------:~"); }}
exception1="";//这里没有报编译错啊。
这句为什么会报编译错误?楼主怎么理解的?
这里去下把,很好的,免费。
几个版本的都有html,doc,pdf的
field of a named class (or of an interface) can complete abruptly with a checked
exception.我理解的意思是:在给命名类(或者是接口)中静态字段的变量初始化赋值过程中,伴随着检查型异常赋值过程会
马上中断,会在编译时产生错误。public class Test { // 在静态变量的初始化过程中赋值
// get() 会抛出检查型异常
// 赋值过程会中断,并且会在编译时产生错误
public static int k = get(); public static int get() throws Exception {
return 0;
}
}
It is a compile-time error if the evaluation of a variable initializer for a static
field of a named class (or of an interface) can complete abruptly with a checked
exception本人的翻译:如果一个命名类(或接口)唐突的用一个会抛出受检查异常的语句,给一个static变量初始化并赋值,那么会有编译错误。public static Class clazz = ClassLoader.getSystemClassLoader().loadClass("test");
编译错误 Unhandled Exception ClassNotFoundExceptionpublic Class clazz = ClassLoader.getSystemClassLoader().loadClass("test");
编译通过
如果一个命名类(或一个接口)的静态域使用“可能因抛出可查异常而导致突然终止执行的”表达式初始化,会引起编译时错误。
在编译时,如果发现对静态变量初始化赋值使用可以抛出异常的方法时,报错!为何要编译报错呢?啊,编译器没有办法啊!借用一下火龙果(解释的很好)的例子:1 public class Test {
2
3 public static int k = get();
4
5 public static int get() throws Exception {
6 return new Exception("编译时");
7 }
8 }
因为静态变量是在类初始化的时候进行初始化赋值的,如果行3报错,它报给谁啊,没人要的孩子啊!
conn = DriverManager.getConnection(url, username, password);// 此行出错,无法从套接字读取更多数据
该行出错 毫无疑问 数据库问题orcl1是 oracle系统的东西,你仔细查查你数据库的配置。
int k =Test.getInt();
}
class Test{
public static int getInt() throws Exception {
return 1;
}
}
方法是public abstract的
如果只用一个接口好像无法模拟书中的状况.
大家如何理解?