请简述集合和数组的异同点?
答案:
集合:
可以存储不同类型的元素(通常使用存储一种类型元素)
集合的长度可以改变
数组:
必须存储相同一类型的元素(Object类型数组除外)
数组的长度固定
请简述迭代器是一个什么玩意?
答案:迭代器就是对容器中的元素进行遍历,每次取出一个元素,然后对元素进行操作。
请简述常见的数据结构有哪些?
答案:线性表、链表、栈、队列、树、哈希表
请简述ArrayList、Vector、LinkedList三者的特点?
答案:
ArrayList:
底层数组结构;线程不同步,效率高;元素查找快、增删慢;
Vector:
底层数组结构;线程同步,安全;元素查找快、增删慢;
LinkedList:
底层链表结构,线程不同步,效率高;元素增删快、查找慢
请简述ArrayList、Vector、LinkedList,分别在什么时候使用?
答案:
程序是否要考虑线程安全?
是: Vector
否: 查找操作多还是增删操作多?
查找多:ArrayList
增删多:LinkedList
请简述并发修改异常产生的原因?如何解决?
答案:ConcurrentModificationException并发修改异常
在迭代器迭代的过程中,集合中的元素个数发生了改变,此时导致并发修改异常。
解决方式:
1. 通过列表迭代器自带的方法完成元素增删操作。
2. 通过for循环遍历集合,使用集合中的方法完成元素增删操作。
请说明StringBuffer与StringBilder二者之间的区别?
答案:
StringBuffer和StringBuilder类都表示内容可以被修改的字符串,StringBilder是线程不安全的,运行效率高,如果一个字符串变量是在方法里面定义,这种情况只可能有一个线程访问它,不存在不安全的因素了,则用StringBuilder。如果要在类里面定义成员变量,并且这个类的实例对象会在多线程环境下使用,那么最好用StringBuffer。
如何实现StringBuffer和String的相互转换?
答案:
StringBuffer 转换到 String的方式:
1. 通过String类的构造方法
2. 通过StringBuffer类中的toString()方法
3. 通过StringBuffer类中的substring()方法 (注:不常用)
String 转换到 StringBuffer的方式:
1. 通过StringBuffer类的构造方法
2. 通过StringBuffer类的append()、insert()方法
如何实现String和int数据的相互转换
答案:
String 转换到 int的方式:
1. 通过Integer类的构造方法
2. 通过Integer类的intValue()方法
3. 通过Integer类的parseInt()方法
4. 通过Integer类的valueOf()方法
Int 转换到 String的方式:
1. 通过String类的构造方法
2. 通过String类的valueOf()方法
3. 通过Integer类的toSting()方法
4. 通过与字符串""相连接
如何实现 基本数据类型 与 基本数据封装类 之间的相互转换
答案:
基本数据类型 转换到 封装类的方式:
1. 通过封装类的构造方法
2. 通过封装类的静态方法valueOf()
封装类 转换到 基本数据类型的方式:
1. 通过封装类的静态方法parseXxx()
2. 通过封装类的方法xxxValue()
请说明String与StringBuffer二者之间的区别?
答案:
Java平台提供了两个类:String和StringBuffer,他们可以存储和操作字符串,即包含多个字符的字符数据。String类表示内容不可以改变的字符串;而StringBuffer类表示内容可以被修改的字符串。
请解释 ==与equals()方法的区别?
答案:
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
equals方法是用于比较两个独立对象的内容是否相同
内部类有哪些访问特点?
答案:
1. 内部类可以直接访问外部类的成员,包括私有
2. 外部类要访问内部类的成员,必须先创建内部类对象
类是什么?类的组成是哪些?
答案:
类:可以理解为构造对象的一个蓝图或者模板,是抽象的概念。
类由成员变量和成员方法组成
对象是什么?什么时候需要使用对象?
答案:
对象:是以类为模型创建的具体实例,是对类的一种具体化。
当需要访问成员变量或成员方法的时候,需要使用对象
封装是什么?
答案:指隐藏对象的属性和实现细节,仅对外提供公共访问方式
继承是什么?
答案:
Java继承是面向对象的最显著的一个特征。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
Java继承是使用已存在的类的定义作为基础建立新类的技术。新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
多态是什么?
答案:
多态按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。
多态性是允许你将父对象设置成为何一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
简单的说,就是一句话: 允许将子类类型对象的引用 赋值给父类类型的引用
抽象类是什么?
答案:使用了关键字abstract声明的类叫做“抽象类”。如果一个类里包含了一个或多个抽象方法,类就必须指定成abstract(抽象)。“抽象方法”,属于一种不完整的方法,只含有一个声明,没有方法主体。
接口是什么?
答案:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
抽象类和接口的区别?
答案:
抽象类:含有abstract修饰的类即为抽象类,抽象类不能创建实例对象。含有abstract方法的类必须定义为抽象类,抽象类中的方法不必是抽象的。抽象类中定义抽象方法必须在具体子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
接口:可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
下面比较一下两者的语法区别
1. 抽象类可以有构造方法,接口中不能有构造方法。
2. 抽象类中可以有普通成员变量,接口中没有普通成员变量
3. 抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以使public、protected和默认类型,但接口中的抽象方法只能是public类型的,并且默认修饰即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
匿名对象是什么?怎么用?
答案:匿名对象,就是没有名字的对象。是对象的一种简化表示形式。
匿名对象的两种使用情况
1. 对象调用方法仅仅一次的时候
2. 作为实际参数传递
成员变量和局部变量的区别?
答案:
在类中的位置不同
成员变量 类中方法外
局部变量 方法内或者方法声明上
在内存中的位置不同
成员变量 堆内存
局部变量 栈内存
生命周期不同
成员变量 随着对象的存在而存在,随着对象的消失而消失
局部变量 随着方法的调用而存在,随着方法的调用完毕而消失
初始化值不同
成员变量 有默认的初始化值
局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。
构造方法的特点?构造方法的注意事项?
答案:
构造方法的特点:
方法名与类名相同
没有返回值类型,连void都没有
没有具体的返回值
构造方法注意事项:
如果我们没有给出构造方法,系统将自动提供一个无参构造方法
如果我们给出了构造方法,系统将不再提供默认的无参构造方法。
注意:这个时候,如果我们还想使用无参数构造方法,就必须自己给出。建议永远自己给出无参数构造方法。
方法重写是什么?注意事项是什么?
答案:
方法重写:指子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写
使用特点:
如果方法名不同,就调用对应的方法
如果方法名相同,最终使用的是子类自己的
需要注意的问题:
父类中私有方法不能被重写
子类重写父类方法时,访问权限不能更低
父类静态方法,子类也必须通过静态方法进行重写。(其实这个算不上方法重写,但是现象确实如此)