请问下面"这一句话"怎么理解:
 
“如果命名类(或接口)的static字段的意思是初始化语句的求职可能突然通过受查的异常完成,则会发生编译时异常。"
-----------------------------
受查异常 :所谓受查异常,意味着客户必须处理或声明这个异常。换句话说,客户要想假装这个方法调用不是远程的,这是办不到的。

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【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 %                  
    楼主加油
      

  2.   

    原文如下: 1. 如果命名类(或接口)的static字段的意思是初始化语句的求值可能突然通过受查的异常完成,则会发生编译时异常。2.如果命名类的实例变量初始化语句可能抛出一个受查异常,那么,除非该异常或其子类之一是在其类的每个构造函数的throws子句中显式声明的,并且该类至少具有一个显式声明的构造函数,否则会发生编译时错误。3.匿名类中的实例变量初始化语句可以抛出任何异常。
    --以上出自--  Java编程规范(第三版)(美)高斯林(Gosling,J.)等编著,陈宗斌,沈金河 译 / 49.8 元 
      

  3.   

    我晕了,这句话也太强了吧,不知道是哪本LJ书上的LJ语言啊?
    我也看不明白,
    不过我猜一下,
    大家看看对不对:如果一个类中有static字段,在这个static字段还没有被初始化之前,程序如果抛出了异常,而在这个异常处理中
    又有对这个static字段的初始化,那么就会发生编译时异常完全是猜的!!!
      

  4.   

     Java编程规范(第三版)(美)高斯林(Gosling,J.)等编著,陈宗斌,沈金河 译 / 49.8 元这书没看过,不过看了它的这三句话,我就不会再买了还有啊,有一本叫<spring高级框架>的书,红皮的,那本书也完全是天书,我感觉好像是译者照着英文单词
    一个一个直译过来的,这本书千万别买,买了后悔
      

  5.   

    import java.sql.Connection;
    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("--------------------------:~"); }}
      

  6.   

    翻译质量实在...实在了。
    exception1="";//这里没有报编译错啊。
    这句为什么会报编译错误?楼主怎么理解的?
      

  7.   

    用金山就可以当翻译了,就可以赚钱了,hoho~
      

  8.   

    楼主别看这个版本了,连书名都翻译错了,原书名《The Java Language Specification》译为《Java语言规范》,我有官方英文原版的PDF,楼主需要我给你 Email 一份。
      

  9.   

    http://java.sun.com/docs/books/jls/
    这里去下把,很好的,免费。
    几个版本的都有html,doc,pdf的
      

  10.   

    James Gosling要是知道中国有人把他们呕心沥血的书,翻译成这样,估计会怒了。
      

  11.   

    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.我理解的意思是:在给命名类(或者是接口)中静态字段的变量初始化赋值过程中,伴随着检查型异常赋值过程会
    马上中断,会在编译时产生错误。public class Test {    // 在静态变量的初始化过程中赋值
        // get() 会抛出检查型异常
        // 赋值过程会中断,并且会在编译时产生错误
        public static int k = get();    public static int get() throws Exception {
            return 0;
        }
    }
      

  12.   

    原文
    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");
    编译通过
      

  13.   

    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.
    如果一个命名类(或一个接口)的静态域使用“可能因抛出可查异常而导致突然终止执行的”表达式初始化,会引起编译时错误。
      

  14.   

    呵呵!来迟了!意译一下这句了:
    在编译时,如果发现对静态变量初始化赋值使用可以抛出异常的方法时,报错!为何要编译报错呢?啊,编译器没有办法啊!借用一下火龙果(解释的很好)的例子:1  public class Test {

    3    public static int k = get();
    4
    5    public static int get() throws Exception {
    6        return new Exception("编译时");
    7    }
    8 }
    因为静态变量是在类初始化的时候进行初始化赋值的,如果行3报错,它报给谁啊,没人要的孩子啊!
      

  15.   

    行6写错了,找段可以报错的可以返回int的替换
      

  16.   

    这是不是人话么~~~~翻译的人可能就不懂java
      

  17.   

    我也不是太明白,但是大概意思看懂了,异常分为检查类异常和非检查类异常,你的问题说的就是所谓的检查类异常,该类异常有所规定,必须要用try..catch把有可能抛出该类异常的语句包起来,或者用throws语句显示的声明该类异常
      

  18.   

    火龙果  说的很清楚了.  白话点意思就是说  get()方法有异常的时候  静态变量就会终止执行.
     conn = DriverManager.getConnection(url, username, password);// 此行出错,无法从套接字读取更多数据
    该行出错 毫无疑问 数据库问题orcl1是 oracle系统的东西,你仔细查查你数据库的配置。
      

  19.   

    无语。现在的作者太不负责任了,实在有辱原作啊。还好我从来不买任何计算机的书,网上提供的足够了。受查异常:再次Faint。java中的就两种异常,指的这是Checked Exception?这个来讲讲两种异常的区分吧,可能大家也都知道了。Checked Exception是继承自java.lang.Exception 的。这个异常要么抛到上一层,要么就在本层try..catch掉,总之是必须要进行处理的,如果你不处理的话,首先在编译时就不会通过。而UnChecked Exception是继承自java.lang.RuntimeException的,这种异常属于运行时异常,可以解决,也可以不解决,总之就是无所谓了。两种异常都有自己的特色和优缺点,在使用的时候需要加以注意即可。目前我比较推荐使用后者,spring就是一个很好的例子。这样也不会对原有的代码造成侵入和破坏代码结构。至于本文中的例子,我的理解就是:因为static是初始化的时候装入的,而这个时候执行了一个Checked Exception,但你自己本身没有进行try..catch处理,也没有办法进行throw,所以必然会报错。具体例子上面已经提供了。这种情况使用RuntimeException是没问题的。呵呵,外文书恐怕还是要看原文了,很多作者本身不是开发人员,或者对翻译的语言根本都不熟悉,懂个P,鄙视下作者。
      

  20.   

    关于两种异常的讨论,网上有很多。包括java的开发者自身也开始怀疑Checked Exception的正确性了,呵呵。所以,不是非要做验证抛出的地方,尽量别用这个玩意。
      

  21.   

    难道只能通过调用其他类中的方法实现?如下:interface InterfaceTest {
        int k =Test.getInt();
    }
    class Test{
        public static int getInt() throws Exception {
            return 1;
        }
    }
      

  22.   

    接口中的属性是public static final的
    方法是public abstract的
    如果只用一个接口好像无法模拟书中的状况.
    大家如何理解?
      

  23.   

    这句话的意思是:不允许静态变量在初始化时抛出异常的,也就是说不可以这么做。或者只能像 39 楼所说的,把检查型异常在方法里捕获,再在 catch 块中抛出运行期异常。