Java面试题目系列二

通过思考Java面试题目,对于学习和理解Java非常有帮助。

本文收集了一些Java面试题目,归之为Java面试题目系列二,同时,感谢那些分享和总结之人。

1.是否可以继承String类?

答:不可以,因为String类是final类,final类是可以继承的。

2.StringBuffer和StringBuilder的异同?

答:StringBuffer和StringBuilder都可以表示内容可以变化的字符串。

StringBuffer是线程安全,运行效率不高;而StringBuilder是线程不安全,运行效率较高。

3.final,finally与finalize的区别?

答:final用于修饰类、属性与方法,具有不可变化特性。因而final类不能继承、final方法不能覆盖、final属性不能修改。

finally是Java异常处理机制的一部分,不管是否存有异常,其语句块里面的内容都要执行。

finalize是Objecet类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法。

4.请写出常见的5个运行时异常?

答:常见的有NullPointerException,IOException,ArithmeticException,ArrayIndexOfBoundsException和ClassCastException等。

5.静态变量和实例变量有什么区别?

答:语法定义上的区别:静态变量前要加static关键字,而实例变量前则不需要。

程序运行时的区别:静态变量不属于某个实例对象,而是属于类,所以也称为类变量。只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配内存空间,才能使用实例变量。实例变量时属于某个对象,因而必须创建对象,这时才会被分配内存空间,才能使用实例变量。

总之,静态变量既可以直接使用类名使用,也可以使用对象使用;而实例变量必须创建对象后才能使用。

为了更好理解,测试代码如下:

public class Test2 
{
 public int iNum1 = 0;
 public static int iNum2 = 0;

 public Test2() 
 {
  iNum1 ++;
  iNum2 ++;
  System.out.println("iNum1==" +iNum1 +  "\tiNum2==" + iNum2);
 }
 public static void main(String[] args)
 {
   for(int i=0;i<4;i++)
   {
    new Test2();
   }
 }
}

运行结果如下所示:

iNum1==1 iNum2==1

iNum1==1 iNum2==2

iNum1==1 iNum2==3

iNum1==1 iNum2==4

由结果可知,无论创建多少个对象,用于都只分配一个iNum2变量,并且每创建一个对象,这个iNum2变量就会加1。但是,每创建一个对象,就会分配一个iNum1变量,并且每个iNum1的值都只自增1。

6.是否可以从一个static方法内部发出对非static方法的调用?
答:不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用, 那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,不可以从一个static方法内部发出对非static方法的调用。

7.Math.round(11.5)等于多少? Math.round(-11.5)等于多少?
答:Math类中提供了三个与取整有关的方法:ceil、floor、round,这些方法的作用与它们的英文名称的含义相对应,例如,ceil的英文意义是“天花板”,该方法就表示向上取整,所以,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;floor的英文意义是“地板”,该方法就表示向下取整,所以,Math.floor(11.6)的结果为11,Math.floor(-11.6)的结果是-12;最难掌握 的是round方法,它表示"四舍五入",算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所 以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。

8.Integer与int的区别?

答:int是java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。int的默认值为 0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加 考试和考试成绩为0的区别,则只能使用Integer。

9.Java中实现多态的机制是什么?

答:Java中实现多态的机制是利用父类或者接口定义的引用变量指向子类或者具体实现类的对象,而程序调用的方法在运行期进行动态绑定,即引用变量所指向的具体对象的方法。

10.面向对象的特征有哪些方法面?

答:计算机软件系统是现实生活中的业务在计算机中的映射,而现实生活中的业务其实就是一个个对象写作的过程。面向对象编程(OOP)就是按着现实业务一样的方式将程序代码组织和编写成一个个对象,让计算机系统能够识别和理解,从而可以把现实生活中的业务对象映射到计算机系统。

面向对象的特征有抽象、封装、继承、多态等4个主要特征。

1)抽象

抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处,并且忽略与当前主体和目标无关的的哪些方面,将注意力集中与当前目标有关的方面。例如,看到一只蚂蚁和大象,你能够想象出它们的相同之处,那就是抽象。抽象包括状态抽象和行为抽象两个方面。

2)封装

封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现软件部件的“高内聚,低耦合”,防止程序相互依赖性而带来的变动影响。在面向对象编程中,对象就是封装的基本单位,面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个“模块”中,也就是一个类中,属性用变量定义,行为用方法定义,方法可以直接访问同一个对象中的属性。通常情况下,通常情况下,只要记住让变量和访问这个变量的方法 放在一起,将一个类中的成员变量全部定义成私有的,只有这个类自己的方法才可以访问到这些成员变量,这就基本上实现对象的封装,就很容易找出要分配到这个 类上的方法了,就基本上算是会面向对象的编程了。把握一个原则:把对同一事物进行操作的方法和相关的方法放在同一个类中,把方法和它操作的数据放在同一个类中。举例说明:司机把火车刹住,刹车的动作时分配给司机,还是分配给火车。显然,应该分配给火车,因为司机自身是不可能有那么大的力气将一个火车给停下来,只有火车自己才能完成这一动作,火车需要调用内部的离合器和刹车片等多个器件协作才能完成刹车这个动作,司机刹车的过程只是给火车发了一个消息,通知火车要执行刹车的动作而已。这就是面向对象的封装性,即将对象封装成一个高度自治和相对封闭的个体,对象状态(属性)由这个对象自己的行为(方法)来读取和改变。

3)继承

在定义和实现一个类的时候,可以在一个已经存在的内的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高软件的可重用性和可扩展性。

4)多态

多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪 个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源 程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码, 让程序可以选择多个运行状态,这就是多态性。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值