【沉浸式求职学习day40】【java面试题精选2】

最近还是一如既往的忙碌,不过总的来说还是在努力

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中必须要实现
  • 抽象类可有静态代码块,接口不能有

最后,抽象类用于描述一类事物的共性,动物有名字、吃饭的行为,但是具体的叫声需要各个子类自己实现。

接口相当于契约,比如飞行、游泳等行为,可以被不同的类实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值