2017Java基础面试题(一)

来源:互联网 发布:淘宝男装店铺简介范文 编辑:程序博客网 时间:2024/06/01 09:52

关于Java基础的一些面试和笔试题,每篇文章10道题目,后续会陆续更新


1 . 怎么获取类名,怎么获取父类的类名?
getClass().getName()
getClass().getSuperclass().getName()
拓展:getClass()是Object的方法,而且被定义为final,子类不能覆盖,所以this.getClass()和super.getClass()最终都调用Object的getClass().而Object类的getClass()的释义:返回运行时类。Object的toString()方法是返回对象的字符串表示,返回的是 包名.类名@hashcode码。当然getName()也包含了包名的。


2 .阅读下列源代码能否正常运行

public class Test {    public static void hello(){        System.out.print("hello");    }    public static void main(String[] args) {        ((Test)null).hello();    }}

能。给任何对象赋值null都是合法的,null可以被被强制转换为任意类型的对象,转换结果仍为null。因此,无法调用对象的方法,但是可以调用类的方法(因为类的方法与对象的存在与否无关)。


3 . 写代码获取年月日,小时分秒,获取从1970年到现在的毫秒数及格式化日期

import java.text.SimpleDateFormat;import java.util.Date;public class Test {    public static void main(String[] args) {        long l=System.currentTimeMillis();        System.out.println(l);        Date date=new Date(l);//等同于Date date=new Date();        System.out.println(date);//      格式化日期        SimpleDateFormat dateFormate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        System.out.println(dateFormate.format(date));    }}

4 .private和protected能否修饰外部类?
均不能。但是内部类是可以的。
这里写图片描述


5 . this的作用?静态方法体内能使用this吗?
在Java语言中,每当一个对象创建后,Java虚拟机都会给这个对象分配一个引用自身的指针,这个指针的名字就是this,this是对当前对象的引用,对象只有被实例化后才存在。而类方法是被static修饰的方法,是不依赖于对象而存在的方法。所以,this只能在类的非静态方法中使用,静态方法和静态块绝对不能出现this的用法。构造方法是可以的。


6 . 阅读下列源代码 写出输出结果

class Base{    int num=1;    public Base(){        this.print();        num=2;    }    public void print(){        System.out.println("Base.num="+num);    }}class Sub extends Base{    int num=3;    public Sub(){        this.print();        num=4;    }    public void print(){        System.out.println("Sub.num="+num);    }}public class Test {    public static void main(String[] args) {        Base b=new Sub();        System.out.println(b.num);    }}

结果:

Sub.num=0Sub.num=32

会首先调用父类的构造方法,根据多态特性,此时实例化的是Sub的对象,所以会调用Sub的print方法,此时Sub的num还没有初始化,所以是0.之所以最后输出的是2,是因为属性没有多态性,所以输出的是Base的num值


7 .

class A{    A(){}}class B extends A{}

上述B类的构造方法访问权限是什么?
default。默认构造器的修饰符只与当前类的修饰符有关。如果B类是public的,那么默认构造方法就是public。本题类B是默认的访问权限,所以构造方法与它相同。


8 .error和excption的区别

1.Java中的所有不正常类都继承于Throwable类。Throwable主要包括两个大类,一个是Error类,另一个是Exception类;

2.其中Error类中包括虚拟机错误和线程死锁,一旦Error出现了,程序就彻底的挂了,被称为程序终结者;

3.Exception类主要指编码、环境、用户操作输入出现问题,Exception主要包括两大类,非检查异常(RuntimeException)和检查异常(其他的一些异常)

4.RuntimeException异常主要包括以下四种异常:空指针异常、数组下标越界异常、类型转换异常、算术异常。


9 .interface成员的默认修饰符?
接口中定义的成员变量默认为public static final
成员方法默认为public abstract


10 .final finally finalize的区别

final用于声明属性、方法和类,分别表示属性不可变,方法不可覆盖和类不可以被继承。
1. 被final修饰的变量不可变(不可变有两种含义,一是引用不可变,二是对象不可变) final修饰变量是指引用不可变,即它只能指向初始时指向的那个对象,而不关心指向对象内容的变化。
2. final方法表明子类不可以重写这个方法,但是子类仍然可以使用这个方法
3. final参数 表示这个参数在这个方法内部不允许被修改
4. final类 修饰类表明这个类不能被继承,所有方法都不能被重写,但是这并非代表final类的成员变量也是不可变的,除非成员变量加了final。abstract和final不能同时用

finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带着一个语句块,表明这个语句最终一定被执行

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