7.当然是B,因为方法改变的是i的指向了一个新的对象而不是原来i所指向对象的值!!11. Container  is a Component 应该也是对的12. 匿名类当然不能声明其它属性,因为写法是
Comparator cmp = new Comparator() {
....
}//这样在这里你什么特别的属性都不能声明的
13. 静态类是可以实例化的18. Java默认是认为浮点数的,所以 B错误29. 不是比较函数,这个是赋值语句,
在     byte [] array1, array2[];其实array2是 byte[][]类型的!!!57.  setX, setY是private的,其它类根本不能调用!
在调用setXY的过程中,如果刚好在调用了setX(i)这个方法后,另外一个线程调用了check就会返回true95. 同1,方法改变的仍然是s的指向,而不是原来s所指向的对象的内容

解决方案 »

  1.   

    12. 匿名类最多实现一个接口
    18. 浮点默认是double的
    29.数组的equals比较的是地址
    95.String是不变类,生成了就不可以改变
      

  2.   

    95的问题
    public static void modify (String s)中的s只是形参
    与 String s = new string (“Hello”);中s 存储的值一样,但地址不同,所以你改变
    public static void modify (String s)中的s形参的值,只是改变了存储在形参s所在内存地址的存储的值,与 String s = new string (“Hello”);中s 无关.
    类似c++处理这类问题是,传的参数一般为引用.直接更改实参地址中存储的值.
    1题与此类似.
      

  3.   

    题目蛮有意思。。不过95题同意 ChDw(米) 的观点,
    8. public static void modify (String s) {
    9. s += “world!”;
    10. }
    在modify中,s的地址是改变了。。因为s=s+"world";s实际上是指向另一块地址(系统生成的);
    String 相加 相当于  s=StringBuffer(s).append(world).toString();
      

  4.   

    95是因为字符串是不可更改的,作连接实际上是创建了一个新的字符串,方法里的s就指向了这个新地址,因此,原先的s是不变的,这个明白了。
    11和57中的c为什么不对
      

  5.   

    7、值传递,所以不改变i的值,答案是B
    11、is a 是继承关系,has a是组合包含关系,所以就是D和E
    12、看看资料就知道了
    13、静态类可以实例化
      

  6.   

    18、1.0默认为double类型,不能赋给float变量
    29、注意byte [] arry1, array2[];声明后,array2是二维数组,不是一维的,所以不能被一维数组array1赋值
    57、setXY没有同步,所以可能出现x和y不一致的情况,也就是public synchronized Boolean check() (return x !=y;)可能返回true,其他都是同步不可能出现x和y不一致的情况
    95、S是引用传递而且具有不可变性,modify之后变成了另一个对象,所以原来的s的还是原来的值
      

  7.   

    我再说一遍:
    11题不明白,觉得是has a,而不是is a,根本没出现继承
    57:我觉得一个类的实例变量怎么可能因为多线程而出现true的情况呢,多线程都是修改一些共同的变量,而不能修改其它类的实例变量,类的实例变量只能由自己的线程去改变。所以这道题我到现在也是乱糟糟的
     
    <<<<<<<<<<<<<<<其它的题大家就不要回答了,已经明白了。>>>>>>>>>>>>>>>>>>>>>>>>>>
      

  8.   

    57:这个题目很简单呀,当一个线程调用setXY的时候,执行完setX后,还没有执行setY
    这个时候x=1,y=0。这个时候另一个线程调用check就返回true了。
      

  9.   

    setX和setY都是private的,外面根本无法调用
      

  10.   

    11.应该不是从是否继承来看吧,要不然前面几个不就是is a关系
    动物是一个物种,容器是一种组件,应该是满足is a 关系的。
      

  11.   

    is a是继承关系,并不是一定要extends或implement才算是is a关系ABC显示是语法错误,interface不能用extends表示继承关系,而是用implementD. public class Species { }
    public class Animal (private Species species;)好好理解一下吧 Animal is a SpeciesE. interface Component { }
    Class Container implements Component (
    Private Component[ ] children;
    )使用了implement,所以是is a关系
      

  12.   

    is a关系不一定就要用继承呀?一个是客观存在,一个是主观实现.两者不一定相符吧
      

  13.   

    modify (String s)中的s只是形参,对传递一个的副本进行操作,只是改变了引用指针指向
    与 String s = new string (“Hello”);中s 存储的值一样,但地址不同
      

  14.   

    举个例子:
    两个人有父子关系但是你不知道
    父子关系是客观存在,但是你不知道,难道就说他们不能是父子?D中是具有is a关系的,你不声明继承难道就没有这种关系,再说父子给儿子打工也是有可能的(就表现为一种关系了).
      

  15.   

    大家觉得底下这个程序会返回true吗?
    说说看法
    ///////////////////////////////////////////////////class Test {
    private int x; private int y; private synchronized void setX(int i) {
    x = i;
    System.out.println("->CunrrentT: "+Thread.currentThread()+" | x =>"+x);
    } private synchronized void setY(int i) {
    y = i;
    System.out.println("->CunrrentT: "+Thread.currentThread()+" | y =>"+y);
    } public void setXY(int i) {
    setX(i);
    setY(i);
    } public synchronized boolean check() {
    return x != y;
    }
    }public class SynTest implements Runnable{
    private Test test;
    public SynTest(Test test){
    this.test=test;
    }
    public void run(){
    for (int i = 0; i < 10; i++) {
    test.setXY(i);

    try{
    Thread.sleep(1000);
    }catch(InterruptedException e){
    e.printStackTrace();
    }
    }
    }

    public static void main(String[] args) {
    Test t=new Test();
    SynTest st=new SynTest(t);
    Thread t1=new Thread(st);
    Thread t2=new Thread(st);
    t1.start();
    t2.start();
    for(int j=0;j<20;j++){
    System.out.println("Check:="+t.check()+"\n");

    try{
    Thread.sleep(100);
    }catch(InterruptedException e){
    e.printStackTrace();
    }

    }
    }
    }