10道经典Java面向对象面试题 - 极悦
首页 课程 师资 教程 报名

10道经典Java面向对象面试题

  • 2020-11-11 17:46:36
  • 2119次 极悦

面向对象一直是Java里面的重点学习内容,也是Java语言的重要特性之一。面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。本文为大家送出小编精心准备的福利——10道经典Java面向对象面试题。


1、super()与 this()的区别?

This():当前类的对象,super 父类对象。

Super():在子类访问父类的成员和行为,必须受类继承规则的约束

而 this 他代表当前对象,当然所有的资源都可以访问.

在构造函数中,如果第一行没有写 super(),编译器会自动插入.但是如果父类没有不带参数的构

造函数,或这个函数被私有化了(用 private 修饰).此时你必须加入对父类的实例化构造.而 this 就

没有这个要求,因为它本身就进行实例化的构造.

而在方法中 super 和 this 使用的方法就差不多了.只不过 super 要考虑是否能访问其父类的资源。


2、如何声名一个静态块?静态块有什么好处

在类中方法外声明 static关键字+代码块,对于一些必须要初始化的代码,必须是写在静态块里面,如果写在构造器里面,有多个构造器的时候不一定执行初始化.


3、作用域 public,protected,private,以及不写时的区别?

Public:不同包、同一包、类内都可用

Private:类内

Protected: 不同包的子类、同一包、类内都可用

不写时:同一包


4、什么是 java 序列化,如何实现 java 序列化?(写一个实例)

序列化:

可以将一个对象保存到一个文件,所以可以通过流的方式在网络上传输,可以将文件的内

容读取,转化为一个对象。

处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行

读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作

时所引发的问题。

序列化的实现:

将需要被序列化的类实现 Serializable 接口,该接口没有需要实现的方法,implements

Serializable 只是为了标注该对象是可被序列化的,然后使用一个输出流(如:

FileOutputStream) 来构造一个 ObjectOutputStream( 对象流 ) 对 象 , 接 着 , 使 用

ObjectOutputStream 对象的 writeObject(Object obj)方法就可以将参数为 obj 的对象写出

(即保存其状态),要恢复的话则用输入流。


5、String与StringBuffer、StringBuilder的区别?

String 是不可变的,可以直接使用它的方法 用来创建字符串,而 StringBuffer、StringBuilder无论怎么修改都是一个对象,如果在字符串改变或者迭代改变的情况下Stringbuffer比String运行快,StringBuilder比StringBuffer更加快捷,但是StringBuilder线程不安全


6、写出String类常见的5个方法,并解释

indexOf():返回指定字符串在该字符串出现的序列

startsWith():判断该字符串是否以指定字符开始

concat() :将指定字符串连接在该字符串的结尾

length():返回字符串的长度

subString:返回该字符串从索引开始 结束于字符串末尾 或者指定索引的一个子字符串


7、重载与重写的区别?

重载发生在同一个类,不同的方法里面。 重写发生在父子类中,参数完全相同的方法里面。

重载参数不同,而重写参数相同且返回类型相同。

方法名相同,重写override是父类与子类之间多态性的一种表现,重载是一个类中多态性的一种表现。


8、抽象类和接口的区别?

(1)接口可以被多重 implements,抽象类只能被单一 extends

(2)接口只有定义,抽象类可以有定义和实现

(3)接口的字段定义默认为:public static final, 抽象类字段默认是"friendly"(本包可见)

当功能需要累积时用抽象类,不需要累积时用接口。


9、什么是类的反射机制?

通过类(Class 对象),可以得出当前类的 fields、method、construtor、interface、superClass、

modified 等,同是可以通过类实例化一个实例、设置属性、唤醒方法。Spring 中一切都是

反射、struts、hibernate 都是通过类的返射进行开发的。


10、如何获取某个日期是当月的最后一天?

当前日期加一天,若当前日期与结果的月份不相同,就是最后一天。

取下一个月的第一天,下一个月的第一天-1

public static void main(String[] args)

{

Calendar c=Calendar.getInstance();

c.set(Calendar.YEAR,2004);

c.set(Calendar.MONTH,0);

c.set(Calendar.DAY_OF_MONTH,30);

Calendar c1=(Calendar)c.clone();

System.out.println(c.get(Calendar.YEAR)+" "+(c.get(Calendar.MONTH)+1)+"

"+c.get(Calendar.DAY_OF_MONTH));

c.add(Calendar.DAY_OF_MONTH,1);

if(c.get(Calendar.MONTH)!=c1.get(Calendar.MONTH))

{

System.out.println("是最后一天");

}

else

{

System.out.println("不是取后一天");

}

}


以上就是小编为大家精心挑选的10道经典Java面向对象面试题,虽然不能概括整个面向对象的知识点,但笼统地兼顾了面向对象的大部分重点内容。想要更加系统地练习Java面向对象面试题还是得看本站的海量高质量Java面试题和答案分析,帮你提升Java面试题实战能力。


选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交