本帖最后由 ricenotes 于 2009-07-01 18:12:30 编辑

解决方案 »

  1.   

    1.作用域 当前类 同一package 子孙类 其他package 
      public √ √ √ √ 
      protected √ √ √ × 
      friendly √ √ × × 
      private √ × × × 
      不写时默认为friendly 2.总体来说arraylist   和   vector   是没有区别的   
        
      j2se   doc上面很清楚地说   
      The   arraylist   class   is   roughly   equivalent   to   Vector,   except   that   it   is   unsynchronized.   
      及多个线程同时使用一个arraylist时,当又一个线程改变了arraylist的内容时   
      需要用Collections.synchronizedList来同步   
        
      hashtable   and   hashmap   
      1.   hashtable   is   synchronized   hashmap   is   not   
      2.   hashmap   的   iterator   是failsafe的   而hashtable   的   enumerator   不是   
      就是说你初始化了你的hashmap.iterator()以后   如果改变了hashmap的内容   
      (iterator.remove()除外)iterator   会   throw   一个ConcurrentModificationException   
      这也是vector.enumerator()和arraylist.iterator()的区别   
      3.   hashmap可以使用null当内容hashtable不行   3. 可以,中文是包括在unicode中的,而char可以被赋值为任何一个unicode码,(char实际是一个16位无符号整数,正好是为双字节的unicode设计的)4.  多线程有3种方法:   
      1.   
      class   mt   implements   Runnable   
      {   
              public   void   run(){...}//run()由Runnable定义,就是你要执行的代码   
              ...   
      }   
      ...   
      new   Thread(new   mt()).start();   
      2.   
      class   mt   extends   Thread   
      {   
              public   void   run(){...}   
              ...   
      }   
      ...   
      new   mt().start();   
      3.   
      class   mt   extends   TimerTask   
      {   
              public   void   run(){...}   
              ...   
      }   
      ...   
      new   Timer().schedule(new   mt(),1000,200);//等待1秒钟后每2毫秒执行一次   
        
      后两种方法在本质上和第一种一样,因为Thread   和   TimerTask   都implements   Runnable   
      但显然第一种方法最好,因为mt   还可以extends其他类   
      至于同步,只要在你要同步的方法前加synchronized,然后适当用一下wait()   和   notify()5.  答:父类: package test; public class FatherClass { 
    public FatherClass() 

    System.out.println("FatherClass Create"; 

    } 子类: package test; 
    import test.FatherClass; 
    public class ChildClass extends FatherClass 

    public ChildClass() 

    System.out.println("ChildClass Create"; 
    } public static void main(String[] args) { FatherClass fc = new FatherClass(); ChildClass cc = new ChildClass(); } 
    } 输出结果: C:>java test.ChildClass FatherClass Create FatherClass Create ChildClass Create 6.  使用匿名内部类课使代码更加简洁、紧凑,模块化程度更高。内部类能够访问外部内的一切成员变量和方法,包括私有的,而实现接口或继承类做不到。然而这个不是我说的重点,我说的很简单,就是匿名内部类的两种实现方式:第一种,继承一个类,重写其方法;第二种,实现一个接口(可以是多个),实现其方法。下面通过代码来说明:Java代码 
    public class TestAnonymousInterClass{   
        public static void main(String args[]){   
            TestAnonymousInterClass test=new TestAnonymousInterClass();   
            test.show();   
        }   
        //在这个方法中构造了一个匿名内部类   
        private void show(){   
            Out anonyInter=new Out(){// 获取匿名内部类实例   
                   
                void show(){//重写父类的方法   
                    System.out.println("this is Anonymous InterClass showing.");   
                }   
            };   
            anonyInter.show();// 调用其方法   
        }   
    }    
      
    // 这是一个已经存在的类,匿名内部类通过重写其方法,将会获得另外的实现   
    class Out{   
        void show(){   
            System.out.println("this is Out showing.");   
        }   
    }  public class TestAnonymousInterClass{
    public static void main(String args[]){
    TestAnonymousInterClass test=new TestAnonymousInterClass();
    test.show();
    }
    //在这个方法中构造了一个匿名内部类
    private void show(){
    Out anonyInter=new Out(){// 获取匿名内部类实例

    void show(){//重写父类的方法
    System.out.println("this is Anonymous InterClass showing.");
    }
    };
    anonyInter.show();// 调用其方法
    }
    } // 这是一个已经存在的类,匿名内部类通过重写其方法,将会获得另外的实现
    class Out{
    void show(){
    System.out.println("this is Out showing.");
    }
    } 程序运行的输出结果为:
    this is Anonymous InterClass showing.
       所以在这里看出,匿名内部类有了自己的实现。其实很简单,使用匿名内部类是因为我这地方需要有点什么特殊的实现,所以我就在这地方把具体实现也给了出来了。然后我就在这地方获取它的实例,调用它的方法。   接口的方式,只要把父类换成接口就行了,没必要给出代码了。    使用匿名内部类时我们不要忘了我们的目的,我们只是在这地方想对某个类有特殊的实现。而不要想得太多,在匿名内部编写其它的方法。在匿名内部类中编写的自己的方法是不可见的。此种做法是毫无意义的,当然一般也不会这么做。在这里只是告诉初学者对于匿名内部类不要想的太多,而要这么想:匿名内部类就是重写父类或接口的方法。  匿名内部类是没有名字的,所以我们没办法获得其类型,而只能把它当作超类或接口类型来使用。
     7. 在Java中,浮点数据类型的默认值为double型,所以float型的数值必须在后面带f以便区别。 8. 不会.9.  1. 如果try块中所有语句正常执行完毕,那么就不会有其他的“动做”被执行,整个try-catch程序块正常完成。 2. 如果try语句块在执行过程中碰到异常V,这时又分为两种情况进行处理: ² 如果异常V能够被与try相应的catch块catch到,那么第一个catch到这个异常的catch块(也是离try最近的一个与异常V匹配的catch块)将被执行;如果catch块执行正常,那么try-catch程序块的结果就是“正常完成”;如果该catch块由于原因R突然中止,那么try-catch程序块的结果就是“由于原因R突然中止(completes abruptly)”。 ² 如果异常V没有catch块与之匹配,那么这个try-catch程序块的结果就是“由于抛出异常V而突然中止(completes abruptly)”。 3. 如果try由于其他原因R突然中止(completes abruptly),那么这个try-catch程序块的结果就是“由于原因R突然中止(completes abruptly)”。 3.3 try-catch-finally程序块的执行流程以及执行结果 
    try-catch-finally程序块的执行流程以及执行结果比较复杂。 
    10. java中的继承是单继承,   
        
      为了实现多继承方法,   
        
      需要使用基类作为子类的成员变量,   
        
      这样,基类的方法就可以在子类中使用了。   
        
      但是,这样做不是很符合继承的逻辑。呵呵,折中的办法而已11.   一、抽象类:
          抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。
           二、接口:
          接口是引用类型的,类似于类,和抽象类的相似之处有三点:
           1、不能实例化;
           2、包含未实现的方法声明;
           3、派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他成员);       另外,接口有如下特性:
    接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。
          三、抽象类和接口的区别:
          1.类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类.而接口只是一个行为的规范或规定,微软的自定义接口总是后带able字段,证明其是表述一类类“我能做”.抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中. 
          2.接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法;     
          3.一个类一次可以实现若干个接口,但是只能扩展一个父类     
          4.接口可以用于支持回调,而继承并不具备这个特点.     
          5.抽象类不能被密封。   
          6.抽象类实现的具体方法默认为虚的,但实现接口的类中的接口方法却默认为非虚的,当然您也可以声明为虚的. 
          7.(接口)与非抽象类类似,抽象类也必须为在该类的基类列表中列出的接口的所有成员提供它自己的实现。但是,允许抽象类将接口方法映射到抽象方法上。   
          8.抽象类实现了oop中的一个原则,把可变的与不可变的分离。抽象类和接口就是定义为不可变的,而把可变的座位子类去实现。   
          9.好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。   
         10.尽量避免使用继承来实现组建功能,而是使用黑箱复用,即对象组合。因为继承的层次增多,造成最直接的后果就是当你调用这个类群中某一类,就必须把他们全部加载到栈中!后果可想而知.(结合堆栈原理理解)。同时,有心的朋友可以留意到微软在构建一个类时,很多时候用到了对象组合的方法。比如asp.net中,Page类,有Server Request等属性,但其实他们都是某个类的对象。使用Page类的这个对象来调用另外的类的方法和属性,这个是非常基本的一个设计原则。   
         11.如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法.
       
          四、抽象类和接口的使用:
          1. 如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单的方法来控制组件版本。
          2.如果创建的功能将在大范围的全异对象间使用,则使用接口。如果要设计小而简练的功能块,则使用接口。
          3.如果要设计大的功能单元,则使用抽象类.如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。   
          4.抽象类主要用于关系密切的对象;而接口适合为不相关的类提供通用功能。12. 不会.
      

  2.   

    这些都是java的基础知识, 我对java并不精通,所以并没有答完.
      

  3.   

    对java并不精通,还答这么好,佩服!