Java基础面试必问

1.Java接口和抽象类的区别

1、接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
2、类可以实现很多个接口,但是只能继承一个抽象类。
3、如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
4、抽象类可以在不提供接口方法实现的情况下实现接口。Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
5、Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。 
6、接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。

2.sleep() 和 wait() 有什么区别?

类的不同:sleep() 来⾃ Thread,wait() 来⾃ Object。
释放锁:sleep() 不释放锁;wait() 释放锁。
⽤法不同:sleep() 时间到会⾃动恢复;wait() 可以使用 notify()/notifyAll()直接唤醒。

3.类加载的时候执行顺序为:

父类静态代码块 --> 子类静态代码块 --> 父类无参构造方法 --> 子类无参构造方法

且静态代码块在初始化时仅执行一次
4.面向对象的三个特征:封装、多态和继承
4.1 子类继承父类,构造函数怎么写

取决于父类的有参构造和无参构造。
如果父类只有一个有参构造函数,子类必须super显示调用父类的有参构造函数。且不能有无参构造函数。
因为无参构造函数会默认调用父类的无参构造。

4.2父类的声明,子类的实现,调用谁的方法

如果调用子类独有的方法,必须强制转换为子类对象。
调用子类重写过的方法,不需要强制类型转换。
子类只能重写方法,不能重写类的其他属性。
如果父类声明子类实现,要访问子类覆盖过的属性,需要强制类型转换。

4.3重载和重写

重载:同一个类里面,方法名相同,而参数不同,返回类型可相同也可以不相同。针对不同类型的参数,实现不同的操作。
重写:在继承的时候,子类重写父类的方法,方法名、传入参数和返回类型需要相同。

4.4多态的实现

多态存在的三个必要条件:继承、重写、父类的引用指向子类的实现

5.java值传递和引用传递

Java 语言的参数传递只有值传递。当一个实例对象作为参数被传递到方法中时,参数的值就是该对象的引用的一个副本。指向同一个对象,对象的内容可以在被调用的方法内改变,但对象的引用(不是引用的副本) 是永远不会改变的。
java中方法参数传递方式(以及赋值)是按值传递的。
如果参数是基本类型(以及String类型),传递的是基本类型(以及String)的变量值。如果这个值改变,原来的值并不会被改变。
如果参数是引用类型,传递的是该参数所引用的对象在堆中地址值。(地址的内容变了,但是地址的值不变,所以是值传递)
所以在调用方法时,传递的参数是引用类型,如果在调用的函数里,改变这个参数的引用,那么函数将对新的引用对象起作用,原来的引用的对象不被改变。
如果没有改变对象的引用,函数对这个引用的值起作用,引用的地址值不变,但是具体的内容可能改变。而一个对象引用变量修改了这个对象的内部状态,会影响到另一个对象引用变量。

6.Java中的错误和异常

error和exception都是Throwable的子类,Throwable类提供了异常处理的一些方法,常用的比如说printStackTrace。
Error及其子类和RuntimeException都是非检查异常。
非检查异常有 Error 和 RuntimeException 。Error 指 JVM (Java虚拟机)的错误,较常见的是栈溢出、内存不足的错误,像StackOverflowError、OutOfMemoryError 等都是JVM 中的错误。RuntimeException 是运行时错误,NullPointerException(空指针)、IndexOutOfBoundsException(数组越界) 等,是你编码时无法直接发现,而是在编译或运行时发现的异常。
一般需要程序员在编程的时候注意避免,代码严谨。
检查异常,Exception类除了RuntimeException之外的全部子类,比如说Thread.sleep这种,如果不通过try catch finally或者throw异常,则无法编译通过。

7.Java中long(基本类型)和Long(基本类型包装类)的区别

long是基本的数据类型,Long是long的包装类,是引用类型。
    long保存在栈里,Long new出来的对象放在堆里;
    Long 是Number类的子类,是Object,有自己的一些方法,比如hashCode、parseLong等等;
    集合只能保存Object,这个时候需要把基本数据类型变成包装类才能保存。
    Long需要用equals进行比较,才能比较值,否则比较的是引用,long直接用==号进行比较。
原创文章 64 获赞 27 访问量 9407

猜你喜欢

转载自blog.csdn.net/weixin_44893585/article/details/105838195