21、静态嵌套类和内部类的不同?
答:静态嵌套类是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。//还是考的static的知识
下面的代码哪些地方会产生编译错误?
class Outer {
class Inner {}
public static void foo() { new Inner(); }
public void bar() { new Inner(); }
public static void main(String[] args) {
new Inner();
}
}
Java中非静态内部类对象的创建要依赖其外部类对象,foo和main方法都是静态方法,静态方法没有this,也就是说没有所谓的外部类对象,因此无法创建内部类对象,如果要在静态方法中创建内部类对象,可以:new Outer().new Inner();
22、抽象的方法是否可以被static,native,synchronized修饰?
不能,静态方法无法被重写,而抽象方法需要被子类重写;本地方法是由本地代码实现的,而抽象方法没有实现;synchronized关键字和方法实现的细节有关,抽象方法不涉及实现细节。
23、静态变量和实例变量的区别。
静态变量:被static修饰,也称为类变量,所以它属于类不属于对象。一个类不管创建了多少个对象,静态变量在内存中有且只有一个拷贝。静态变量可以实现让多个对象共享内存。
实体变量:必须依赖于某一实例,需要先创建对象然后通过对象才能访问到它//记住一个属于类,另一个属于对象
24、可以从一个静态方法内部发出对非静态方法的调用?
不对,静态方法只能访问静态成员,因为非静态方法的调用要先创建对象,在调用静态方法时可能对象并没有被初始化//写个静态方法自己试试呗
25、对象克隆
实现Cloneable接口并重写Object类中的clone()方法;
实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆
//话说clone对象好用不?
26、运行时异常与受检异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误,只要程序设计得没有问题通常就不会发生。受检异常跟程序运行的上下文环境有关,即使程序设计无误,仍然可能因使用的问题而引发。Java器要求方法必须声明抛出可能发生的受检异常,但是并不要求必须声明抛出未被捕获的运行时异常。异常和继承一样,是面向对象程序设计中经常被滥用的东西,在Effective Java中对异常的使用给出了以下指导原则:
- 不要将异常处理用于正常的控制流(设计良好的API不应该强迫它的调用者为了正常的控制流而使用异常)
- 对可以恢复的情况使用受检异常,对编程错误使用运行时异常
- 避免不必要的使用受检异常(可以通过一些状态检测手段来避免异常的发生)
- 优先使用标准的异常
- 每个方法抛出的异常都要有文档
- 保持异常的原子性
- 不要在catch中忽略掉捕获到的异常
列出一些你常见的运行时异常?
答:
- ArithmeticException(算术异常)
- ClassCastException (类转换异常)
- IllegalArgumentException (非法参数异常)
- IndexOutOfBoundsException (下标越界异常)
- NullPointerException (空指针异常)
- SecurityException (安全异常)
27、GC是什么?为什么要有GC?
GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc() 或Runtime.getRuntime().gc() ,但JVM可以屏蔽掉显示的垃圾回收调用。
垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低优先级的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。
//垃圾必须被回收掉,不管是生活还是·······
28、接口是否可以继承接口?抽象类能否可实现接口?抽象类是否可继承具体类?
接口可以继承接口,而且支持多重继承。抽象类可以实现接口,抽象类可继承具体类也可以继承抽象类。
29 、 .java源文件
一个.java源文件可以包含多个类,但一个源文件中最多只能有一个公开类而且文件名必须和公开类的类名完全保持一致。
30、匿名内部类(Anonymous Inner Class)是否可以继承其它类?是否可以实现接口?
可以继承其他类或实现其他接口,在Swing编程和Android开发中常用此方式来实现事件监听和回调。