### Java面试题高频集锦详解 #### 一、面向对象的四大特征 **1. 抽象** - **定义**:抽象是指从一类事物中提取共同的、本质性的特征,而忽略非本质的特征的过程。在Java编程中,抽象可以通过接口(interface)和抽象类(abstract class)来实现。 - **作用**:简化问题复杂度,便于理解和实现。 - **示例**:设计一个“动物”类时,可以抽象出“动物”具有的共同属性(如名字、年龄等)和行为(如吃、睡等),而不关注具体某一种动物的特点。 **2. 继承** - **定义**:继承是指一个类(子类)继承另一个类(父类)的特性和行为的能力。子类可以继承父类的所有非私有属性和方法,并且可以根据需要扩展或覆盖父类的方法。 - **作用**:提高代码复用性和可维护性。 - **示例**:假设有一个“动物”类作为父类,那么可以创建“狗”、“猫”等子类,这些子类都继承了“动物”的属性和方法。 **3. 封装** - **定义**:封装是将对象的状态信息(数据成员)和行为(成员方法)包装在一起,隐藏内部的实现细节,只暴露对外的接口。 - **作用**:增强安全性和降低耦合度。 - **示例**:可以通过设置属性的访问修饰符为`private`,并通过公有的getter和setter方法来访问这些属性。 **4. 多态** - **定义**:多态是指允许不同类的对象对同一消息作出响应。多态分为编译时多态(如方法重载)和运行时多态(如方法重写)。 - **作用**:提高程序的灵活性和可扩展性。 - **示例**:可以通过定义一个父类的引用指向子类对象,然后调用方法,根据对象的实际类型来确定执行哪个子类中的方法。 #### 二、String是否为基本数据类型 - **结论**:`String`不是基本数据类型,而是引用类型。Java的基本数据类型包括`byte`、`int`、`char`、`long`、`float`、`double`、`boolean`和`short`。 - **解释**:`String`是Java中的一个类,位于`java.lang`包下。由于它是final类,无法被继承,这意味着不能创建`String`的子类。 #### 三、int和Integer的区别 - **类型区别**:`int`是原始类型,而`Integer`是`int`的封装类。 - **内存分配**:对于`int`,每个值都会直接分配内存;而对于`Integer`,它是在堆上创建的对象,包含一个`int`类型的字段。 - **默认值**:`int`的默认值为`0`,而`Integer`的默认值为`null`。 - **应用场景**:在需要进行算术运算时通常使用`int`;而在需要对象引用或者集合中存放整数时使用`Integer`。 #### 四、String和StringBuffer的区别 - **可变性**:`String`对象是不可变的,一旦创建就不能改变其内容;`StringBuffer`对象是可变的,可以在原有基础上进行修改。 - **线程安全性**:`StringBuffer`中的所有方法都是同步的,适合在多线程环境中使用;而`String`不适合用于多线程环境。 - **性能**:频繁修改字符串时,使用`StringBuffer`比拼接多个`String`对象更高效。 #### 五、运行时异常与一般异常的区别 - **定义**:运行时异常(如`NullPointerException`、`ArrayIndexOutOfBoundsException`等)通常是由于程序逻辑错误导致的,这类异常不需要显式处理;非运行时异常(如`IOException`)通常需要捕获并处理。 - **处理方式**:运行时异常可以被程序捕获处理,也可以让它们抛出;而非运行时异常需要在方法签名中声明,或者在程序中捕获处理。 - **例子**:`IOException`属于非运行时异常,必须在调用方法中处理;而`NullPointerException`属于运行时异常,可以选择处理或不处理。 #### 六、Servlet的生命周期及与CGI的区别 - **Servlet的生命周期**: - **初始化**:容器加载Servlet,创建其实例,调用`init()`方法进行初始化。 - **服务**:容器调用`service()`方法处理客户端请求,`service()`方法内部会根据请求方法的不同调用相应的`doGet()`、`doPost()`等方法。 - **销毁**:容器卸载Servlet时,调用`destroy()`方法释放资源。 - **Servlet与CGI的区别**: - **效率**:Servlet在启动时只需加载一次,之后处理请求无需重复加载;而CGI程序每次请求都需要重新加载,效率较低。 - **线程安全性**:Servlet可以利用多线程处理并发请求;而CGI程序每个请求需要启动一个进程,难以处理高并发场景。 - **开发难度**:Servlet基于Java语言,开发更为方便;而CGI程序需要编写C或Perl等脚本语言,相对复杂。
剩余13页未读,继续阅读
- 粉丝: 4
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助