Android 面试的一些坑

时间:2022-09-23 17:46:55

  谈谈final, finally, finalize的区别 :三者没有绝对的联系

一。final

如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。 将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在new一个对象时初始化(即只能在声明变量或构造器或代码块内初始化), 而在以后的引用中只能读取,不可修改。被声明为final的方法也同样只能使用,不能覆盖(重写)。

二。finally

在异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。

三。finalize

方法名。Java 技术允许使用 finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。 这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。 子类覆盖 finalize() 方法以整理系统资源或者执行其他清理工作。finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。 注意:finalize不一定被jvm调用,只有当垃圾回收器要清除垃圾时才被调用。

HashMap 和 Hashtable 的区别

HashMap是非同步的(Synchronized)线程不安全 可以接受为null的key和value Hashtable 是同步的(Synchronized)线程安全 不可以接受为null的key和value 结论: Hashtable和HashMap有几个主要的不同:线程安全以及速度。仅在你需要完全的线程安全的时候使用Hashtable, 而如果你使用Java 5或以上的话,请使用ConcurrentHashMap吧。

GC是什么?为什么要有GC?

GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,

忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,

Java语言没有提供释放已分配内存的显示操作方法。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc()或Runtime.getRuntime().gc(),但JVM可以屏蔽掉显示的垃圾回收调用。 


垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低优先级的线程运行不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,

程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。

在Java诞生初期,垃圾回收是Java最大的亮点之一,因为服务器端的编程需要有效的防止内存泄露问题,然而时过境迁,如今Java的垃圾回收机制已经成为被诟病的东西。移动智能终端用户通常觉得iOS的系统比Android系统有更好的用户体验,

其中一个深层次的原因就在于android系统中垃圾回收的不可预知性。


 Overload和Override的区别。Overload的方法是否可以改变返回值的类型?

Overload:重载

Override:重写


如果几个Overloaded的方法的参数列表不一样,它们的返回者类型当然也可以不一样。但我估计你想问的问题是:如果两个方法的参数列表完全一样,是否可以让它们的返回值不同来实现重载Overload。这是不行的

Overload和Override的区别。Overload的方法是否可以改变返回值的类型?


重载:同一个类中,方法名相同,参数列表不同。与返回值类型无关。

重写:存在于子父类,或者子父接口中,方法声明相同。

Overload的方法可以改变返回值的类型,因为它与返回值类型无关。