现在的位置: 首页 > 综合 > 正文

备战Java考试之收获

2014年03月22日 ⁄ 综合 ⁄ 共 6497字 ⁄ 字号 评论关闭

不得不说考试是能力提升的一个很给力的方法。为了在开始中取得好成绩,我们都会认真看书、刷题。然后就发现好多盲点。于是乎,我们就进步了。哈哈。

我把这次考试复习搜到的盲点例举如下,希望能帮到某些童鞋。呵呵。

一、Java继承机制是子类继承父类的所有属性和方法,包括私有属性和方法。这个和很多人的理解都不一样(包括我),其实课本上面也是说继承所有非私有属性和方法(其实课本错误不少),但是我去百度Google了一下,大体写了个验证代码,也没证明出啥来:

   1:  package blog.csdn.net.mzule;
   2:   
   3:  public class Main {
   4:      
   5:      public static void main(String[] args) {
   6:          SubClass sc = new SubClass();
   7:          sc.setI(33);
   8:          System.out.println(sc.getI());
   9:          System.out.println(sc.getSuperI());
  10:      }
  11:   
  12:  }
  13:   
  14:  class SuperClass {
  15:   
  16:      private int i;
  17:   
  18:      public int getI() {
  19:          return i;
  20:      }
  21:   
  22:      public void setI(int i) {
  23:          this.i = i;
  24:      }
  25:   
  26:  }
  27:   
  28:  class SubClass extends SuperClass {
  29:      
  30:      public int getSuperI(){
  31:          return super.getI();
  32:      }
  33:      
  34:  }

很不幸上面的代码输出的是33和33,郁闷的有些。

二、抽象类中还是得有构造函数的,因为抽象类的子类在实例化对象时都得调用父类的构造函数。

三、还是继承,子类的构造函数会隐式调用父类无参构造函数,当父类没有无参构造函数时候,子类的构造函数得显示调用父类的有参构造函数,或者在父类加一个空的非私有无参构造函数,不然不能通过编译。如下时正确的:

   1:  package blog.csdn.net.mzule;
   2:   
   3:  class SuperClass {
   4:   
   5:      public SuperClass(int i){
   6:          System.out.println("今晚去吃炒鱿鱼了");
   7:      }
   8:   
   9:  }
  10:   
  11:  class SubClass extends SuperClass {
  12:      
  13:      public SubClass(){
  14:          super(3);
  15:      }
  16:      
  17:  }

很不幸,当初我不知道有这一机制,星星同学遇到了这个问题,没能给他解答。

四、对一个数取余是可以得到小数的。

   1:  package blog.csdn.net.mzule;
   2:   
   3:  public class Main{
   4:      
   5:      public static void main(String[] args) {
   6:          System.out.println(100%3);
   7:          System.out.println(100%3.0);
   8:      }
   9:      
  10:  }

得到的结果是1和1.0 ,依旧很不幸,我错了,还好就1分。这个错误全不在我,课本上43页都说了“只有整数类型(int , long , short)的数据才可以进行取余操作,float 和 double 不能进行取余”,当时在自习室没有带电脑,就记下了,看到上面那题,我就费解了。其实如下代码都是正确的,课本什么的都是浮云,实践才是真道理:

   1:  package blog.csdn.net.mzule;
   2:   
   3:  public class Main {
   4:      public static void main(String[] args) {
   5:          System.out.println(1320.32432 % 232.32);
   6:          System.out.println(4353.43f % 432.32f);
   7:      }
   8:  }

五、被 final 修饰的形式参数在方法体内时不能修改的。这个我今天才知道,结果就考到了,哈哈。

   1:  package blog.csnd.net.mzule;
   2:   
   3:  public class Main{
   4:      
   5:      public void test(final int i){
   6:          i=3;
   7:      }
   8:      
   9:  }

上面的代码在Eclipse中会有 "he final local variable i cannot be assigned. It must be blank and not using a compound assignment” 错误。

这个之前我也遇到过,只是没有怎么注意,是在写 BirthdayManager 时候碰到的。

六、除了 _ 和字母,$ 也可以作为标识符开头,没人用的原因可能是会和内部类的编译过的字节码文件名有些可能不太会发生的误会。

七、数组时十分特殊的类,未知类名,但是在作为形参的时候传递的依旧是引用。二维数组的定义 int[][] i = new int[][3] 是错的,int [][] i =new int [2][] 和 int [][] i =new int [3][3]都是对的。额,我又错了,平时不用数组哇。

八、受小强指点,明白了Java中的 swtich 只接受整形和字符型,额,其实还有枚举的。

九、接口是可以有属性的,但是必须得是 public final static 修饰的,但是可以不写,这个是默认的。如果你尝试改变属性的访问控制符和(或)修饰符,在Eclipse中就会有”Illegal modifier for the interface field M.i; only public, static & final are permitted”警告。同时,方法也得必须是 public abstract 的,同样可以省略,我之前没有想过的,其实 abstract 都可以省略。下面的代码可以通过编译。

 
   1:  package blog.csdn.net.mzule;
   2:  interface Interface{
   3:      double i=12;//represent: public static final double i = 12;
   4:      void mm();//represent: public abstract void mm();
   5:  }

十、这个完全是应对考试的,for 循环、do{}while() 和 while 循环,都是可以没有循环体的。如下可以编译:

   1:  package blog.csdn.net.mzule
   2:  public class Main {
   3:      public static void main(String[] args) {
   4:          for(int i =0;i<2;i++){}
   5:          //while(2!=3){}
   6:          do{}while(2!=3);
   7:      }
   8:  }

---EOF---

某些变态的我就不讲了,没什么用。

抱歉!评论已关闭.