面向对象一直是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大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习