java经典面试题集锦(三)

  • 来源:网络
  • 更新日期:2020-07-07

摘要:一、String、StringBuffer与StringBuilder的区别(相关教程推荐:java面试题)String的值是不可变的,这就导致每次对String的操作都会生成新的String对象。StringBuffer 和 StringB

一、String、StringBuffer与StringBuilder的区别

(相关教程推荐:java面试题)

String的值是不可变的,这就导致每次对String的操作都会生成新的String对象。

StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的未使用对象

速度快慢为:StringBuilder > StringBuffer > String

StringBuilder 类和 StringBuffer 之间的最大不同在于 StringBuilder 的方法不是线程安全的。

看图:

(推荐教程:java入门程序)

二、所有的类都继承于object类,你用过的object类的直接子类有哪些,object类常用的方法有哪些?

Boolean

Character

Class

ClassLoader

Compiler

Enum

String

System

Thread

Object类的常用方法

toString();

equals();

hashCode();

三、什么是泛型,怎么使用的,有什么好处?

是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。

参数化类型,把类型当作参数一样的传递。是一种设计模式,非常好的支持了多态,比如各种容器。

好处:

把运行时期的问题提前到了编译期间,避免了强制类型转换。

四、java对象序列化为什么要使用serialversionUID?

1、什么要序列化对象

把对象转换为字节序列的过程称为对象的序列化

把字节序列恢复为对象的过程称为对象的反序列化

2、对象的序列化主要有两种用途:

(1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;

(2)在网络上传送对象的字节序列。

3、为什么要使用SerialversionUID

如果用户没有自己声明一个serialVersionUID,接口会默认生成一个serialVersionUID,如果对象发生新增字段,则系统分配的serialversionUID会发生变化,导致反序列化异常。

(视频教程推荐:java视频教程)

五、反射的优缺点

1、优点

反射提高了Java程序的灵活性和扩展性,降低耦合性,提高自适应能力。它允许程序创建和控制任何类的对象,无需提高硬编码目标类。

反射是其他一些常用语言,如C、C++、Fortran或者Pascal等不具备的。

Java反射技术应用领域很广,如软件测试、JavaBean等。

许多流行的开源框架例如Struts、Hibernate、Spring在实现过程中都采用了该技术。

2、缺点

(1)性能第一 Performance Overhead

反射包括了一些动态类型,所以JVM无法对这些代码进行优化。因此,反射操作的效率要比那些非反射操作低得多。我们应该避免在经常被 执行的代码或对性能要求很高的程序中使用反射。

(2)安全限制 Security Restrictions

使用反射技术要求程序必须在一个没有安全限制的环境中运行。如果一个程序必须在有安全限制的环境中运行,如Applet,那么这就是个问题了。。

(3)内部暴露 Exposure of Internals

由于反射允许代码执行一些在正常情况下不被允许的操作(比如访问私有的属性和方法),所以使用反射可能会导致意料之外的副作用。代码有功能上的错误,降低可移植性。反射代码破坏了抽象性,因此当平台发生改变的时候,代码的行为就有可能也随着变化。