面向对象相关面试题

1.面向对象的优点?
(1)提高了代码的可扩展性。
(2)提高了代码的可维护性。
(3)面向对象的封装,继承,多态。
2. 接口与抽象类的区别?
(1)抽象类使用abstract修饰 ,接口使用interface修饰。
(2)抽象类可以有普通方法,有抽象方法的一定要有抽象类,接口不可有有普通方法只能有抽象类。
(3)抽象类可有有普通属性,接口只能是常量。
(4)抽象类和接口不能实例化,就是不能new,就是不能创建对象,因为不是具体的。
(5)抽象类有构造方法,接口没有构造方法。
(6)抽象类只支持单继承支持多实现,接口支持多继承。
3.类的组成和执行顺序?
(1)类的组成:属性 方法 静态块 非静态块。
(2)执行顺序:父类,子类,静态块,静态字段,非静态块,非静态字段,构造器,方法。
4.如何理解面向对象?
世间万物皆对象,对象有具体的的实例化,任何方法或者属性都要写在对象(类)里面,就是不断的创建对象使用对象指挥对象做事。
5.构造方法可否能被重写?
不能被重写,只有继承关系才能重写,构造方法不能被重写,但是能被重载6.String与StringBuffer,StringBuilder的区别?
(1)String是不可变的字符串常量对象,就是字符串序列底层实现是char数组,因为是数组所以定长(一但定义长度就固定不变)。
(2)StringBuffer线程安全的可变字符串,底层实现是一个“可变长的数组”,数据安全效率低。
(3)StringBuilder用作替换StringBuffer,JDK1.5新增类,线程不安全的可变字符串,效率高。
7.(= =)与equals()的区别?
(1)==:引用类型比较的是地址,基本类型比较的是值
(2)equals:底层比较的是地址(
public boolean equals(Object obj) {
return (this == obj);
}),重写equals方法比较的是内容。
8. 什么是拆箱和装箱?
JDK1.5提供了自动装箱和自动拆箱功能
(1)装箱就是自动将基本数据类型转换为包装器类型,就是可以把一个基本类型变量直接赋值给对应得包装类型变量,或者赋值给Object变量(Object是所有类的父类,子类对象可以直接赋值给父类变量);
(2)拆箱就是自动将包装器类型转换为基本数据类型,允许直接把包装类对象直接赋值给一个对应的基本类型变量。
9.final类有什么特点?
(1)final修饰的类不能被继承
(2)final修饰的方法不能被重写
(3)final修饰的属性不能被改变
10.谈谈final,finally,finalize的区别。
(1)final用于声明属性,方法和类,分别表示属性不可变,方法不可以覆盖,类不可继承。
(2)finally是异常处理语句结构的一部分,表示总是执行。
(3)finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。
11.GC是什么?为什么要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,java语音没有提供释放已分配内存的显示操作方法。
12.Set里的元素是不能重复的,那么用什么方法来区分重复与否,是用==还是equals()?他们有何区别?
Set里的元素是不能重复的,用iterator()方法来区分重复与否,equals()是判断两个的Set是否相等。
equals()和==方法决定引用值是否指向同一对象equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话放回真值
13.error和exception有什么区别?
(1)error表示恢复不是不可能但很困难的情况下的一种严重问题,比如说内存溢出。不可能指望程序能处理这样的情况。
(2)exception表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
14.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
都不可以:
abstract是抽象的,指的是方法只有声明而没有实现,他的实现要放入声明该类的子类中实现。
static是静态的,是一种属于类而不属于对象的方法或者属性
synchronized 是同步,是一种相对线程的锁。
native 本地方法,这种方法和抽象方法及其类似,它也只有方法声明,没有方法实现,但是它与抽象方法不同的是,它把具体实现移交给了本地系统的函数库,而没有通过虚拟机,可以说是Java与其它语言通讯的一种机制。
native,这个本身就和abstract冲突,他们都是方法的声明,只是一个把方法实现移交给子类,另一个是移交给本地操作系统。如果同时出现,就相当于即把实现移交给子类,又把实现移交给本地操作系统,那到底谁来实现具体方法呢!所以说不能两个一起使用
15.接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实现类(concrete class)?
接口可以继承接口,抽象类可以实现接口,抽象类可以继承实现类,但前提是实现类必须有明确的构造函数。
16.try{}里有一个return语句,那么紧跟在这个try后的finally{}里的语句会不会执行,什么时候被执行,在return前还是后?
会执行,在return前执行。
17.面向对象的特征有哪些方面?
(1)封装:封装是把对象的属性和实现细节隐藏起来,仅对外提供公共的访问方法(这些对象通过一个受保护的接口访问其他对象)。
(2)继承:多个类中存在相同的属性和行为时,将这些相同的内容抽取到一个单独的类中,那么多个类无需再定义这些属性和行为,只要继承这个类即可,继承这个类的为新类,新类称为原始类的派生类(子类)而原始类称为新类的基类(父类)。派生类可以从它的基类哪里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。可通过extends关键字实现继承。
(3)多态:多态性是指允许不同类的对象对同一消息作出响应,多态性语言具有灵活,抽象,行为共享,代码共享的优势,很好解决了应用程序函数同名的问题。
18.int和Integer有什么区别?
java提供了两种不同的类型:引用类型和基本类型,int是java的基本类型,integer是java为int提供的包装类。
19.描述一个JVM加载class文件的原理机制?
JVM中类的装载是由ClassLoader和它的子类来实现的,java ClassLoader是一个重要的java运行系统组件,它负责在运行时查找和装入类文件的类。
20.集合和数组的区别?
(1)数组存放基本类型和对象,集合类存放都是对象的引用,而非对象本身。
(2)数组长度固定无法动态改变,集合类容量动态改变。
(3)数组无法判断其中实际存有多少元素,length只是告诉了数组的长度是多少,定义了多长的长度后,即使没有存放那么多的元素,没有存放元素的空间就浪费了,而集合的size()可以知道元素的个数。
(4)集合以类的形式存在,具有封装,继承,多态等类的特征,通过简单的方法和属性即可实现各种复杂操作,大大提高了软件的开发效率

猜你喜欢

转载自blog.csdn.net/qq_42656707/article/details/81368070