大家注意:关于网上广泛流传的面试题的答案的疑问?就剩这些分了......对不起少了点....

zhaoqiubo 2004-10-21 05:10:01
第二题,
问:Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?

答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但一个内部类可以作为一个接口,由另一个内部类实现。
疑:我认为答案应该是可以,可以。匿名内部类可以继承其他的类;只要通过A a = new A(){.....}就可以实现;当然也可以扩展接口;
-------------
第十一,
问:short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?

答:short s1 = 1; s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1) 。short s1 = 1; s1 += 1正确。
疑:为什么 s1 += 1;就没有错误,难道这样写就可以自动转型了吗?
------------
第十二题,
问:sleep() 和 wait() 有什么区别? 搞线程的最爱

答:sleep()方法是使线程停止一段时间的方法。在sleep 时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)“醒来”的线程具有更高的优先级 (b)正在运行的线程因为其它原因而阻塞。

  wait()是线程交互时,如果线程对一个同步对象x 发出一个wait()调用,该线程会暂停执行,被调对象进入等待状态,直到被唤醒或等待时间到。

疑:如果我们用sleep那么这个线程是不是可能永远就不能在启动了呢。。。???
-----------
第十五题,
问:Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

疑:如果改变了方法的返回值,那么这还能叫重载吗??
----------
第二十一题,
问:abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

答:都不能

疑:
public abstract class AbstractTest {
public static void a(){}
public static void b(){}
}
没有编译错误,他们都是static啊。。答案怎么是不能呢??
-----------
第26题
问: 当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

答:  不能,一个对象的一个synchronized方法只能由一个线程访问。

疑: 难道一个对象的一个synchronized方法被一个线程访问,这个对象的其他方法都不能被其他的线程访问吗,这和其他方法有什么关系吗?
-----------
第30题,
问: 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

答: 是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
疑: 请注意他的回答“参数的值就是对象的引用”,既然是这样为什么还是值传递呢?值传递和引用传递有什么区别呀?
...全文
1454 42 打赏 收藏 举报
写回复
42 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhaoqiubo 2005-03-11
  • 打赏
  • 举报
回复
申请加精华
raymanyoung 2005-01-30
  • 打赏
  • 举报
回复
第30题, 值转递
Class ... {
public void methodA ( MyClass b ) {
b.setWeight (1);
}
}

public class MyClass {
....
void aaa () {
MyClass a = new MyClass();
methodA();
}
}

运行之后 a 的值没变,变的是a 指向的 object 里面的值。
比如说张三是一个“人”的实例,“打仗”是一个method.
然后
打仗(张三);
然后张三断了一只手。但是“张三”这个名字对应的人没有变。
如果是引用传递,打完仗之后“张三”这个名字就可能忽然指的是李四了
xxzxzx 2005-01-30
  • 打赏
  • 举报
回复
收藏
raymanyoung 2005-01-30
  • 打赏
  • 举报
回复
二,可以继承
并不是说继承就一定要 class ChildClass extends ParentClass.
List list = new Vector();
list.add( new Object () {
public String toString() {};
} );
就是继承

三,那个答案完全搞错了. 这里 static nested class is nothing about C++. 大家有兴趣的自己查一下吧。详细解释很麻烦。

四。不止这些
例子: boolean x = a && b , y = a & b
如果 a == false , 那末在x中,b的值将不被检查。在 y 中无论如何b都要被检查

十六,题审错了
用equals()区分重复与否。没有问你什么方法来判断两个Set是否相等。
== 只用于判断两个引用是否指向同一实例。equals() 需要用户定义,区分两个实例逻辑上是否相等。
Long a = new Long(1);
Long b = new Long(1);
boolean x = (a == b) // x = false;
boolean y = (a.equals(b)) // y = true;

十八,error和exception有什么区别
"error 表示恢复不是不可能但很困难的情况下的一种严重问题。"
绝对不要试图catch error

"exception 。。。它表示如果程序运行正常,从不会发生的情况。"这句话有问题。
Exception 指的是可以补救的情况

二十二
“但前提是实体类必须有明确的构造函数“,莫名其妙
首先抽象类不会实体化,所以实体类有无构造函数无关紧要。
其次“有没有明确的构造函数“ 只是从代码角度看,如果没有明确构造函数编译器会加一个

二十九,不妥
按规定 如果 x.equals(y) == true, x.hashcode() == y.hashcode() 应该为 true. 问题就在,这个必须人为保障。也就是说,如果你有 x.equals(y) == true,但是 x.hashcode() != y.hashcode(),编译不会报错,也没有任何地方会检查。但是这是逻辑错误。
所以:“两个对象值相同(x.equals(y) == true),但却可有不同的hash code“,语法允许,但是这种情况有逻辑错误。
ProgrammerPro 2004-12-31
  • 打赏
  • 举报
回复
收藏
artie1116 2004-12-22
  • 打赏
  • 举报
回复
第二十一题,
问:abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?

答:都不能

疑:
public abstract class AbstractTest {
public static void a(){}
public static void b(){}
}
没有编译错误,他们都是static啊。。答案怎么是不能呢??
/////////////////////////////////////////
这不是抽象方法,应该是:
public abstract class AbstractTest {
public abstract void a();
public abstract void b();
}/////////////////////////////
第30题,
问: 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

答: 是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
/////////////////////////////////////////////////////////

对于对象型变量,作为方法参数传入方法时就不一样了,因为:
对象由constructor创建后,返回一个二进制值,称为对象引用(是一个值)。
当我们把对象存入一个变量或作为参数传入方法时,只是把对象引用传入变量或传入参数。
不能改变原参数的值,但是我们通过传入参数调用对象的方法,将会对原始数据产生影响
public class ArgPass2{
public void modifyIt(int [] values )
{
values[0] ++ ;
System.out.println(values[0]);
}
public static void main(String [] arg)
{
ArgPass2 ap = new ArgPass2();
int[] myValues = {1};
ap.modifyIt(myValues);
System.out.println(myValues[0]);
}
}
不知道这个例子是否能说明问题
zhaoqiubo 2004-12-13
  • 打赏
  • 举报
回复
to To doordie(实践) :
把继承的类改为这样,更容易说明问题,如下:

public class AClass{
public AClass(){
System.out.println("是否继承!");
}
public void printSomeThings(){
}
}
运行结果为:
是否继承!
I'm here! I Print myself!


zhaoqiubo 2004-12-13
  • 打赏
  • 举报
回复
to foreseer(柳下不惠) :

我不想再玩文字游戏了...改变方法的返回值都出错了,还谈什么重载呢??
zhaoqiubo 2004-12-13
  • 打赏
  • 举报
回复
To doordie(实践) :

您在您的大作中提到:
“匿名类可以实现接口,以下代码在j2sdk1.4.1编译运行成功.
注意是"实现"而不是"继承", 匿名类不存在继承的说法.”

请看以下代码:Jdk1.4.2_03调试通过;
public class Test {
public static void main(String a[]) {
AClass is=new AClass(){
public void printSomeThings(){
System.out.println("I'm here! I Print myself!");
}
};
is.printSomeThings();
}
}

public class AClass{
public void printSomeThings(){
}
}

这个匿名类就是扩展了AClass,所以我说,匿名类存在继承的说法.请批评指正..
dory 2004-11-19
  • 打赏
  • 举报
回复
原题在哪??
foreseer 2004-11-19
  • 打赏
  • 举报
回复
to zhaoqiubo(小熊杰利米) 第15题: java中的重载可以返回值不同,但不能只有返回值不同! 也就是说,在参数有不同的情况下,可以改变返回值。 但是如果方法名和参数都相同,只有返回值不同,那就会出错。这既不是重载,也不是重写。 所以答案是对的。
meiswangyu 2004-11-17
  • 打赏
  • 举报
回复
11题:s1 += 1这个是自动转型的
12题:sleep()是被停止指定的时间,在等待期满后优先度满足的情况下是自动执行把(不要打我!)
26提:我想应该是其他方法应该是不能被其他线程访问把,因为被访问的synchronized方法有可能会改变其他方法的,比如说值什么的
doordie 2004-11-17
  • 打赏
  • 举报
回复
回第二题:
匿名类可以实现接口,以下代码在j2sdk1.4.1编译运行成功.
注意是"实现"而不是"继承", 匿名类不存在继承的说法.

public class Test {
public static void main(String a[]) {
AInterface is=new AInterface(){
public void printSomeThings(){
System.out.println("I'm here! I Print myself!");
}
};
is.printSomeThings();
}
}
interface AInterface{
public void printSomeThings();
}
xmbareheaded 2004-11-16
  • 打赏
  • 举报
回复
好贴啊!
jayde 2004-11-16
  • 打赏
  • 举报
回复
gz
haoahoxueJAVA 2004-11-13
  • 打赏
  • 举报
回复
好帖!

收之!
JoeChen 2004-11-13
  • 打赏
  • 举报
回复
列为强贴!
showerXP 2004-11-11
  • 打赏
  • 举报
回复
第30题,
问: 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

答: 是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
疑: 请注意他的回答“参数的值就是对象的引用”,既然是这样为什么还是值传递呢?值传递和引用传递有什么区别呀?


是引用传递。因为时引用传递,所以函数体的对象与函数体外传入对象其实是一个对象(就是一个人两个名字的情况)。当然函数体内对象的改变会影响到函数体外的对象的改变。
gongdath 2004-11-11
  • 打赏
  • 举报
回复
up
zhaoqiubo 2004-11-10
  • 打赏
  • 举报
回复
to Arhero(BigBoy) 实际上构造匿名内部类,是必须扩展父类或实现接口的,只不过没有写出来而已。
加载更多回复(22)
相关推荐
发帖
Java

4.9w+

社区成员

Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
帖子事件
创建了帖子
2004-10-21 05:10
社区公告
暂无公告