最近还是一如既往的忙碌,不过总的来说还是在努力
沉浸式求职学习
java面试题精选2
1.重写
1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围可以扩大但是不能缩小: public>protected>default>private
4.重写抛出的异常:范围可以被缩小但是不能被扩大。
【关键】
1.当父类引用指向子类时,当访问属性时,属性的值是父类中的值。如果方法被重写,调用的方法就是子类中被重写的方法,如果方法没有被重写,调用的方法就是父类中的方法。
2.重写的关键词只能是Public
不能重写的:
static 属于类不属于实例
final 常量
private
2.多态注意事项
1.多态是方法的多态,属性没有多态
2.父类和子类有联系,,否则类型转换异常
3.存在条件:继承关系,方法需要重写,父类引用指向子类
3.抽象类
- 抽象类不能new,不能被实例化,只能靠子类实现,它是一个约束,抽象类里面可以有普通方法,抽象方法【必须】在抽象类中
- 抽象类存在构造器嘛?存在
- 抽象类存在的意义是什么? 提高开发效率,可拓展性强
4.接口
普通类:只有具体实现
抽象类:具体实现和规范都有,通过子类去实现
接口:只有规范!自己无法写方法!专业的约束,约束和实现分离:面向接口编程
- 1.接口就是规范,接口本质是契约,就像法律,不是类,接口中只有方法的定义没有实现,也没有构造方法
- 2.是对对象的抽象,最能体现的就是接口
- 3.类可以实现接口 implements 接口
- 4.实现了接口的类,就需要重写接口中的方法
- 5.多继承
5.异常
- 1.处理异常,用try-catch
- 2.多重catch块后加个exception处理被遗漏的
- 3.对于不确定代码,可以try-catch
- 4.尽量加finally去释放占用资源
6.java中抛出异常的几种方式
- 1.try-catch:如果抛出就捕获
- 2.throw: 开发者主动抛出异常,即读到throw,就一定会抛出异常:throw new Exception
- 3.throws:作为方法,用来描述方法可能会抛出的异常,如果方法throws的是RuntimeException,就可以不处理,JVM会处理,但是Exception必须自己处理
7.进程
- 1.程序是死的,但是进程是执行程序的一次过程,它是一个动态的概念
- 2.进程里可以有若干个线程,一个进程中至少有一个线程,不然是没有存在的意义的。
- 3.调度器就是cpu,人为干预不了。
8.形成多线程的几种方式
1.继承Thread类
(1)继承
(2)重写run的线程执行体
(3)主线程中子类对象直接调用start()
(4)但是不建议使用:单继承
2.实现Runnable接口
(1)创建一个Runnable接口实现类
(2)重写run()方法
(3)实例化Runnable接口实现类对象,创建一个Thread类,丢入Runnable接口实现类的对象
(4)推荐使用,避免单继承局限性,灵活方便,而且还能够一个对象被多个线程(代理)使用
9.栈和堆
如图所示:
栈存的是变量,堆存的是对象:
针对基本类型,它不会在堆中出现,出现在栈中,变量名对应的值就是实际值;
针对引用类型,具体的对象存储在堆中,堆中对象的地址赋值给栈中的变量,然后地址是放在栈中。的。
10.int和Integer有什么区别?
int和Integer区别体现在以下几个方面:
- 数据类型不同,int是基本数据类型,Integer是包装数据类型
- 默认值不同:int默认为0,Integer默认是null;
- 存储方式不同:int存的就是值,Integer存的是对象的引用,当new一个Integer其实就是生成一个指针指向这个对象。
- 实例化方式不同:Integer是类,必须实例化才能用,Int不需要
- 变量比较方式不同:int可以用 == 来进行值比较,但是Integer必须要用equals比较两个变量是否相等
11.Integer有什么优点
包装类Integer的优点是解决了基本数据类型无法做到的事情,比如泛型类型参数、序列化、类型转换、高频区间数据缓存(-128~127)等问题。
12.Integer可以用 == 进行比较吗? 为什么
Integer不能使用 == 比较,因为 Integer 本身是对象,而 == 比较的是对象地址,所以不能用 == 比较
13.final、finally、finalize有什么区别
- final用来修饰类、方法、变量和参数的关键字,被final修饰的对象不允许修改或者替换原始值或者定义
- finally是java中保证重点代码一定要被执行的一种机制;比如try catch finally
- finalize是Object类中的一个基本方法,它的设计目的是保证对象在被垃圾收集前完成特定资源回收的,但是它执行不稳定,且有一定的性能问题,所以JDK9被弃用了
14.普通类和抽象类有哪些区别?
- 普通类不能包含抽象方法,抽象方法能够包含抽象方法
- 抽象类不能实例化,只能依靠子类去实现,普通类可以直接实例化
15.抽象类一定要有抽象方法吗?
不一定非要抽象方法
16.抽象类能使用 final 修饰吗?
不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类。
17.抽象类和接口的区别
首先它们都是为了定义对象的公共行为的,但是有不同如下:
- 定义关键字不同 interface abstarct
- 子类继承或者实现关键字不同 implements extends
- 类型扩展不同:抽象类是单继承,接口是多继承
- 方法访问控制符:抽象类无限制,只是抽象类方法不能用Private修饰;接口有限制,默认是public abstract控制符
- 属性方法控制符:抽象类无限制,接口有限制,接口默认public static final
- 方法实现不同:抽象类中的普通方法必须要有实现,抽象方法必须没实现;而接口中普通方法不能实现,但是在JDK8后的static和default中必须要实现
- 抽象类可有静态代码块,接口不能有
最后,抽象类用于描述一类事物的共性,动物有名字、吃饭的行为,但是具体的叫声需要各个子类自己实现。
接口相当于契约,比如飞行、游泳等行为,可以被不同的类实现。