分享

SCJP攻略 ---之--- 陷阱曝光

 软件团队头目 2006-12-13
1)   Two   public   classes   in   the   same   file.   (illegal)  
        同一个文件里有两个public类。(非法)  
  (2)   Main   method   calling   a   non-static   method.   (illegal)  
        在main(String[]   args)方法内调用一个非静态方法。(非法)  
  (3)   Methods   with   the   same   name   as   the   constructor(s).   (这种题常有)  
        与Constructor(s)有相同名字的方法。    
  class   A{    
  A(){   //是构造函数   }    
  void   A(){   //不是构造函数,只是个普通函数(方法)   }    
  }    
  (4)   Thread   initiation   with   classes   that   do   not   have   a   run()   method.   (常考之题)  
        初始化了一个没有run()方法的线程类。  
  class   A   implements   Runnable{    
  //下面这句被注释后则编译不通过    
  //public   void   run(){"running"}    
  }    
  (5)   Local   inner   classes   trying   to   access   non-final   vars.   (illegal)  
        内部类尝试访问非final变量(非法)  
  (6)   Case   statements   with   values   out   of   permissible   range.   (byte,int,   short,   chat)  
        选择语句case中,没有使用允许的值。如(byte,int,short,char)等  
  (7)   Math   class   being   an   option   for   immutable   classes   !!   (totally   wrong!)  
        Math类作为不可改变类。(完全错误)       (请提意见)  
  (8)   instanceOf   is   not   same   as   instanceof.  
        instanceOf   不是   instanceof。  
  (9)   Private   constructors.   (legal)  
        私有   的Constructor。   (合法)  
  (10)   An   assignment   statement   which   looks   like   a   comparison.    
          一个   赋值语句   看起来像   比较语句。      
          比如说if(a=true),和if(a==true)。对于这种题眼睛亮一点。  
  (11)   System.exit()   in   try-catch-finally   blocks.   (finally   不会执行)  
          System.exit()在try-catch-final块中的退出语句。   (finally不会执行)  
  (12)   Order   of   try-catch-finally   blocks   matters.(若顺序错:   error:   No   try   before   catch)  
  (13)   main()   can   be   declared   final.   (OK)  
          main()方法   可以声明为   final.  
  (14)   -0.0   ==   0.0   is   true.    
  (15)   A   class   without   abstract   methods   can   still   be   declared   abstract  
          没有   抽象方法的类,仍然可以定义为抽象类。  
  (16)   RandomAccessFile   descends   from   Object   and   implements   DataInput   and   DataOutput.    
          RandomAccessFile   类继承Object,并且实现了DataInput和DataOutput接口。  
  (17)   Map   does   not   implement   Collection.    
          Map   并不实现   Collection.  
  (18)   Dictionary   is   a   class,   not   an   interface.    
          Dictionary   是一个类,不是接口。  
  (19)Collection是一个接口,但   Collections却是一个辅助类。  
  (20)   Class   declarations   can   come   in   any   order.  
            (也就是说:   class   Child   extends   Parents{}  
                                  class   Parents{}  
              这种顺序是可以的.)  
          可以以任何顺序申明类。  
  (21)   Forward   references   to   variables   gives   compiler   error.把   reference   给   变量,会产生编译错误。  
  (22)   Multi   dimensional   arrays   can   be   sparce.  
  (这句话是说:   多维数组中子数组不一定必须有一定个数的元素,比如我们把一个二维数组看成一个矩阵,那么行与列中的  
   
  元素可以不完整,可以不对齐.)  
  (23)   Arrays,   whether   local   or   class-level,   are   always   initialized.  
          数组,无论是当前的,还是类等级的,都会被初始化。  
   
  (24)   Strings   are   initialized   to   null,   not   empty   string.  
          String   是被初始化为   null,不是空字符。  
   
  (25)   An   empty   string   is   NOT   the   same   as   a   null   string.  
          一个空字符串   不是   一个null字符。  
   
  (26)   A   declaration   cannot   be   labelled.  
          一个声明语句不能被标记。  
  例:  
  label   就是   标记  
  如:  
  int   i=10;  
  i++;  
  ++i;  
  b:   i++;  
  (27)   "continue"   must   be   in   a   loop(for,   do,   while).   It   cannot   appear   in   case   constructs.  
          “continue”已经要在一个循环里(如for,do,while),它不能在case语句中出现。  
  (28)   Primitive   array   types   can   never   be   assigned   to   each   other,   eventhough   the   primitives   themselves   can    
   
  be   assigned.  
        (也就是说:   ArrayofLongPrimitives   =   ArrayofIntegerPrimitives   会编译出错,  
          但   longvar   =   intvar   是合法的)    
           
        Primitive(int,char,long等)数组是不能互相赋值的,即使它们本身可以。  
            解释见jiayuan所说。  
   
  (29)   A   constructor   can   throw   any   exception.    
          一个Constructor可以抛出任何异常。  
   
  (30)   Initilializer   blocks   are   executed   in   the   order   of   declaration.  
          初始化块是按照声明的顺序执行的。(请提意见)  
   
  (31)   Instance   initializer(s)   gets   executed   ONLY   IF   the   objects   are   constructed.  
          实例初始化语句块只有在它建立后才会被执行。  
   
  (32)   All   comparisons   involving   NaN   and   a   non-Nan   would   always   result   false.   (对大多数朋友来说这可是个盲点  
   
  噢)  
          所有关于   NaN(Not   a   Number)   和   non-NaN   的比较,都返回false.  
          这条很重要。  
   
  (34)   integer   (and   long   )   operations   /   and   %   can   throw   ArithmeticException   while   float   /   and   %   will   never,    
   
  even   in   case   of   division   by   zero.  
          integer和long   操作   /和%   的话,   会抛出ArithmeticException,    
            但是   float形不会,即使是除以0。  
  (35)   ==   gives   compiler   error   if   the   operands   are   cast-incompatible.  
          ==会产生编译错误,如果两边   不兼容的话。  
   
  (36)   You   can   never   cast   objects   of   sibling   classes(   sharing   the   same   parent   ),   even   with   an   explicit    
   
  cast.  
            你永远不可能   转化具有同一个超类的类的对象,即使是刻意转化。(请提意见)  
   
  例:  
  class   A  
  class   sonA   extends   A  
  class   daughterA   extens   A  
  对这种情况:  
  sonA   和   daughterA   之间不能相互转化。  
  即:sonA   son   =   (sonA)   daughterA();是非法的。  
  而:sonA   son   =   (sonA)   A();是合法的。  
  A   father   =   (A)   sonA()也是合法的  
   
   
  (37)   .equals   returns   false   if   the   object   types   are   different.It   does   not   raise   a   compiler   error.  
          equals()   返回   false   如果对象类型不同,但不产生   编译错误。  
   
  (38)   No   inner   class   can   have   a   static   member.(but   static   inner   class   can)  
          没有内部类   可以拥有   静态成员。(但静态内部类可以)  
   
  (39)   File   class   has   NO   methods   to   deal   with   the   contents   of   the   file.(also   the   existing   directory)  
          File类没有   任何   处理文件内容的方法。(当然,存在的目录也一样)  
     
  (40)   InputStream   and   OutputStream   are   abstract   classes,   while   DataInput   and   DataOutput   are   interfaces.  
          InputStream   和   OutputStream   是   抽象类,    
            但是   DataInput   和   DataOutput是   接口。  
   
  当然以上这些都是从题目中总结出来的技巧,其实书上也都有,大家还是多看看书噢.    
  41)if   和while后面的表达式结果只能是逻辑型的  
  如if(1),while(0)都是非法的  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多