关于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=0
Sub.num=3
2
会首先调用父类的构造方法,根据多态特性,此时实例化的是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()方法