竹笋

注册

 

发新话题 回复该主题

15道类和对象面试题,全答对的人寥寥无几 [复制链接]

1#
辽宁白癜风医院 https://m-mip.39.net/baidianfeng/mipso_4753196.html

###

1.类与对象有哪些区别?

类是一个抽象的概念,是对某一事物的描述;而对象是类的实例,是实实在在存在的个体。

比如:“男人”就是一个类(一个概念),而老田(田维常)就是实实在在的一个“对象”。

注意:对象中又有类对象,即Class对象,但是类对象始终还是对象,不是类,这两个概念别搞混淆了。

2.Java中可以多继承吗?

Java中只能单继承,但可以实现多接口,并且支持多层继承。

3.Java中为什么不能实现多继承?

答:从技术的实现角度来说,是为了降低编程的复杂性。假设A类中有一个m()方法,B类中也有一个m()方法,如果C类同时继承A类和B类,那调用C类的m()方法时就会产生歧义,这无疑增加了程序开发的复杂性,为了避免这种问题的产生,Java语言规定不能多继承类,但可以实现多接口。

4.覆盖和重载有哪些区别?

重写(Override)从字面上看,重写就是重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下,对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。

重写总结:

1.发生在父类与子类之间

2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同

3.访问修饰符的限制一定要大于被重写方法的访问修饰符(publicprotecteddefaultprivate)

4.重写方法一定不能抛出新的检查异常或者比被重写方法的更加宽泛的检查型异常

重载(Overload)在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来判断重载。

重载总结:1.重载Overload是一个类中多态性的一种表现2.重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)3.重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。

5.为什么方法不能根据返回类型来区分重载?

答:因为在方法调用时,如果不指定类型信息,编译器就不知道你要调用哪个方法了。比如,以下代码:

因为max(1,2)没有指定返回值,编译器就不知道要调用哪个方法了。

6.说说构造方法的特点有哪些?

答:构造方法的特征如下:

构造方法必须与类名相同;构造方法没有返回类型(默认返回本类类型);构造方法不能被继承、覆盖、直接调用;类定义时提供了默认的无参构造方法;构造方法可以私有,外部无法使用私有构造方法创建对象。构造函数能不能被覆盖?能不能被重载?

构造函数可以重载,但不能覆盖。

7.以下程序执行的结果是?

结果是:

8.类加载顺序

整体

细分

以下程序执行的结果是?

结果是:00B

注意:在Java语言中,变量不能被重写。

9.Java中的this和super有哪些区别?

this和super都是Java中的关键字,起指代作用,在构造方法中必须出现在第一行,它们的区别如下。

基础概念:this是访问本类实例属性或方法;super是子类访问父类中的属性或方法。查找范围:this先查本类,没有的话再查父类;super直接访问父类。使用:this单独使用时,表示当前对象;super在子类覆盖父类方法时,访问父类同名方法。10.在静态方法中可以使用this或super吗?为什么?

在静态方法中不能使用this或super,因为this和super指代的都是需要被创建出来的对象,而静态方法在类加载的时候就已经创建了,所以没办法在静态方法中使用this或super。

11.静态方法的使用需要注意哪些问题?

静态方法的使用需要注意以下两个问题:

静态方法中不能使用实例成员变量和实例方法;静态方法中不能使用this和super。12.final修饰符的作用有哪些?

final也是很多面试喜欢问的地方,但我觉得这个问题很无聊,通常能回答下以下5点就不错了/p>

被final修饰的类不可以被继承被final修饰的方法不可以被重写被final修饰的变量不可以被改变.如果修饰引用,那么表示引用不可变,引用指向的内容可变.被final修饰的方法,JVM会尝试将其内联,以提高运行效率被final修饰的常量,在编译阶段会存入常量池中.除此之外,编译器对final域要遵守的两个重排序规则更好/p>

在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序.

经典使用场景:Integer,String等类中有使用到。

13.覆盖equals()方法的时候需要遵守哪些规则?

Oracle官方的文档对于equals()重写制定的规则如下。

自反性:对于任意非空的引用值x,x.equals(x)返回值为真。对称性:对于任意非空的引用值x和y,x.equals(y)必须和y.equals(x)返回相同的结果。传递性:对于任意的非空引用值x、y和z,如果x.equals(y)返回值为真,y.equals(z)返回值也为真,那么x.equals(z)也必须返回值为真。一致性:对于任意非空的引用值x和y,无论调用x.equals(y)多少次,都要返回相同的结果。在比较的过程中,对象中的数据不能被修改。对于任意的非空引用值x,x.equals(null)必须返回假。此题目不要求记忆,能知道大概即可,属于加分项题目。

14.在Object中notify()和notifyAll()方法有什么区别?

notify()方法随机唤醒一个等待的线程,而notifyAll()方法将唤醒所有在等待的线程。

如何使用clone()方法?

如果是同一个类中使用的话,只需要实现Cloneable接口,定义或者处理CloneNotSupportedException异常即可,请参考以下代码:

对象克隆是原型模式的经典实现。

15.java中对象的创建方式有哪几种?

java中提供了以下四种创建对象的方式/p>

new创建新对象通过反射机制采用clone机制通过序列化机制

分享 转发
TOP
发新话题 回复该主题