1. abstract class 和 interface 有什么区别?
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一
个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能
创建 abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向
具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它
们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现
该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通
过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只
可以定义 static final 成员变量。接口的实现与子类相似,除了该实现类不能从接口
定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方
法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,
它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口
类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
2. 当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此对象
的其它方法?
不能,一个对象的一个 synchronized 方法只能由一个线程访问。这就避免了数据改变,
运用多线程技术都会用到 synchronized 方法,防治由于多线程带来的数据改变
3. 编程题: 用最有效率的方法算出 2 乘以 8 等於几?
public class Count{
public static void main(String args[]){
int i = 2<<3;
System.out.println("2 乘以 8 等于"+i)
; }
}
因为计算机是二进制的。所以你用位运算是最快的是最小效率的,其实一个程序效不效
率,应该看他的时间复杂度 O(time)。如果你用 2×8 他的时间复杂度是 O(N),而 2<<3
他的时间复杂度是 O(logN).这样你就可以知道他们运行的快慢了。
4. 两个对象值相同(x.equals(y) = = true),但却可有不同的 hash code,这句话对不对?
不对,有相同的 hash code。
5. 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返
回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方
法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对
象的引用是永远不会改变的。
6. 编程题: 写一个 Singleton 出来。
Singleton 模式主要作用是保证在 Java 应用程序中,一个类 Class 只有一个实例存在。