java常见面试题整理

作者 tarena 创建于2014-10-29 12:08:00 修改者tarena 修改于2017-07-14 07:06:35字数17374
文档摘要:所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。
关键词:
面向对象的特征有哪些方面? 封装,继承,多态 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 继承是指子类获得父类的属性和方法。如狗是动物的一种,也可以说够继承了动物的特性,或者说狗是动物的子类。 多态是指一个方法只能有一个名称,但可以有许多形态,也就是程序中可以定义多个同名的方法,用"一个接口,多个方法"来描述.可以通过方法的参数和类型引用 五大原则:单一职责原则SRP 开放封闭原则OCP 替换原则LSP 依赖原则DIP 接口分离原则ISP 成员变量和局部变量的区别 * A:在类中的位置不同 * 成员变量:在类中方法外 * 局部变量:在方法定义中或者方法声明上 * B:在内存中的位置不同 * 成员变量:在堆内存(成员变量属于对象,对象进堆内存) * 局部变量:在栈内存(局部变量属于方法,方法进栈内存) * C:生命周期不同 * 成员变量:随着对象的创建而存在,随着对象的消失而消失 * 局部变量:随着方法的调用而存在,随着方法的调用完毕而消失 * D:初始化值不同 * 成员变量:有默认初始化值 * 局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。 静态变量和成员变量的区别 * 静态变量也叫类变量 成员变量也叫对象变量 * A:所属不同 * 静态变量属于类,所以也称为为类变量 * 成员变量属于对象,所以也称为实例变量(对象变量) * B:内存中位置不同 * 静态变量存储于方法区的静态区 * 成员变量存储于堆内存 * C:内存出现时间不同 * 静态变量随着类的加载而加载,随着类的消失而消失 * 成员变量随着对象的创建而存在,随着对象的消失而消失 * D:调用不同 * 静态变量可以通过类名调用,也可以通过对象调用 * 成员变量只能通过对象名调用 this和super的区别和应用 * A:this和super都代表什么 * this:代表当前对象的引用,谁来调用我,我就代表谁 * super:代表当前对象父类的引用 * B:this和super的使用区别 * a:调用成员变量 * this.成员变量 调用本类的成员变量,也可以调用父类的成员变量 * super.成员变量 调用父类的成员变量 * b:调用构造方法 * this(...) 调用本类的构造方法 * super(...) 调用父类的构造方法 * c:调用成员方法 * this.成员方法 调用本类的成员方法,也可以调用父类的方法 * super.成员方法 调用父类的成员方法 排序都有哪几种方法?请列举 排序的方法有:插入排序(直接插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(直接选择排序、堆排序),归并排序,分配排序(箱排序、基数排序) 快速排序的伪代码。 String, StringBuffer StringBuilder的区别。 String的长度是不可变的; StringBuffer的长度是可变的,如果你对字符串中的内容经常进行操作,特 别是内容要修改时,那么使用StringBuffer, 如果最后需要String,那么使用 StringBuffer的toString()方法;线程安全; StringBuilder是从 JDK 5 开始,为StringBuffer该类补充了一个单个线程 使用的等价类;通常应该优先使用 StringBuilder 类,因为它支持所有相同的 操作,但由于它不执行同步,所以速度更快。 Overload 和 Override 的区别。Overloaded 的方法是否可以改变返回值的类 型? 答:方法的重写 Overriding 和重载 Overloading 是 Java 多态性的不同表现。重 写 Overriding 是父类与子类之间多态性的一种表现,重载 Overloading 是一个 类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参 数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用 子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定 义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方 法的重载(Overloading)。Overloaded 的方法是可以改变返回值的类型。 final, finally的区别? 答:final:修饰符(关键字);如果一个类被声明为 final,意味着它不能再 派生出新的子类,不能作为父类被继承,因此一个类不能既被声明为 abstract 的,又被声明为 final 的;将变量或方法声明为 final,可以保证它们在使用中 不被改变;被声明为 final 的变量必须在声明时给定初值,而在以后的引用中只 能读取,不可修改;被声明为 final 的方法也同样只能使用,不能重载。 finally:再异常处理时提供 finally 块来执行任何清除操作;如果抛出一 个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如 果有的话)。 常见的几个运行异常。 java.lang.nullpointerexception(空指针异常) java.lang.classnotfoundexception(指定的类不存在) java.lang.arithmeticexception(数学运算异常) java.lang.arrayindexoutofboundsexception(数组下标越界异常) IOException(输入输出异常) 数组操作的两个常见小问题越界和空指针 * A:案例演示 * a:ArrayIndexOutOfBoundsException:数组索引越界异常 * 原因:你访问了不存在的索引。 * b:NullPointerException:空指针异常 * 原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。 * int[] arr = {1,2,3}; * arr = null; * System.out.println(arr[0]); JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗? 答:Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。 用try来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的"异常"的类型。 throw语句用来明确地抛出一个"异常"。 throws用来标明一个成员函数可能抛出的各种"异常"。 Finally为确保一段代码不管发生什么"异常"都被执行一段代码。 可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,"异常"的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种"异常"进行处理,堆栈就会展开,直到遇到有处理这种"异常"的try语句。 服务器收到用户提交的表单数据,到底是调用Servlet的doGet()还是doPost()方法? 答:HTML的