面试题

本文涵盖Java基础、数据类型、引用类型、包装类、运算符、equals与hashcode、final关键字、变量、方法调用、访问修饰符、面向对象、重载与重写、接口与抽象类、字符串操作、Object类、数组、反射、序列化、异常处理等核心概念。

面试

后期继续更新

面试宝典01-Java基础

1、Java类型是什么?基本类型和引用类型,Java8大基本数据类型是什么?
byte 有1个字节、short 有2个字节、int 有4个字节、long 有8个字节、
float 有4个字节、double 有8个字节、boolean 有1个字节、char 有2个字节、1个字节=8位 byte 最小值负128、最大值正127

2、引用类型是什么?
类、接口、数组、枚举、字符串
强,弱,虚,软是java执行gc也就是垃圾回收机制判断对象是否存活, 在jdk1.2之后把对象的引用分为这四个等级来判断是否回收主要是这个作用

3.int 与 Integer 的区别?
int 是8大基本数据类型,默认值是0
Integer 是包装类,默认值是null
int 不能用在泛型里面,而Integer 可以使用在泛型里面

4、什么是装箱?什么是装箱?
装箱就是 自动将基本数据类型转换为包装器类型
拆箱就是 自动将包装器类型转换为基本数据类型

5、& 和 双& 区别?
& : 如果A表达式为false, 也会判断B表达式, 再返回false
&& : 如果A表达式为false, 则不再判断B表达式, 直接返回false//有短路效果

5、== 和 equals 方法究竟有什么区别?
如果用==去比较俩个基本数据类型int a 和int b, 它是判断这俩个值的结果是否相等, 如果是引用类型String a 和String b, 它是判断内存地址是否相同
equals是判断string a 和string b 的值内容是否相等,不比较内存地址

6、hashcode与equals的区别?
如果比较俩个值他们的HashCode相等, 对象内容不一定相等
如果使用equals比较2个对象的内容相同,那么HashCode一定相等

7、为什么重写equals方法后,一定要重写hashcode?
因为只重写equals,不重写hashcode的话,就算比较这俩个值的内容相等, HashCode也不一定相等

8、使用 final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?(A=10)
在堆内存当中内存地址是不能改变的,但是对象的内容是可以改变的

9、final, finally, finalize 的区别是什么?
final 它是用于声明属性不可变,方法不可被重写,类不可被继承
内部类如果要访问局部变量的话,它局部变量必须定义成 final 类型
finally 它是写在try{}cache{}后面的,表示有异常总是执行
finalize 是Object 类的一个方法, 当垃圾回收机制他不定时去回收垃圾的时候,它就会调用这个方法

10、静态变量和实例变量的区别?(意思就是private static String A 和private String B的区别?)
静态变量可以直接用类名.点来引用, 实例变量必须创建对象才能使用

11、static修饰的方法能否调用非static方法的?
static方法不能访问非static方法, 非static方法可以访问static方法

12、请说出作用域 public, private, protected,以及不写(friendly)时的区别?
不写为默认修饰符 friendly 修饰。

  • public 在当前类、同一包下、子孙类、其他包 都可以使用
  • protected 在当前类、同一包下、子孙类 可使用
  • friendly 在当前类、同一包下、可使用
  • private 在仅当前类中可使用。

13、面向对象的三种状态?
封装,继承,多态

14、重载与重写区别?
重载是指同一类中, 方法名相同, 但是参数或者个数不同
重写是指子类重写父类的方法

15、接口与抽象类的区别?

  • 接口的关键字是interface, 抽象类的关键字是abstract
  • 接口和抽象类都不能被实例化(new)
  • 接口中不能有私有成员, 抽象类中可以有私有成员//private int a
  • 接口中定义成员都是public static final 修饰的, 抽象类没有
  • 接口中不能有静态方法和构造函数, 抽象类中可以有静态方法和构造函数

16、String、StringBuffer与StringBuilder的区别?

  • String 是字符串常量,是不可变的,所以对于每一次+=赋值都会创建一个新的对象
  • StringBuffer 和StringBuilder 是字符串变量, 都是可变的,当进行字符串拼接时采用append 方法,在原来的基础上进行追加,所以性能比String 要高
  • StringBuffer 是线程安全的, 执行效率低
  • StringBuilder 是线程非安全的, 执行效率高

17、所有的类都继承于object类,你用过的object类的直接子类有哪些,object类常用的方法有哪些?

  • 1.clone方法
  • 2.getClass方法
  • 3.toString方法
  • 4.finalize方法
  • 5.equals方法

18、数组有没有length() 这个方法? String有没有length() 这个方法?
答:数组没有length() 这个方法,有length的属性。String有length() 这个方法。
hashCode方法
wait方法
notify方法
notifyAll方法

19、反射了解吗?反射如何获取方法?
有3种

  • 第1种是类型.class
  • 第2种是对象.getClass
  • 第3种是class.forname(权限类名)

20、反射的作用是什么?

  • 在运行状态中, 反射可以动态获取一个类的所有方法和属性
    反射的优点
  • 可以动态获取, 提高程序的灵活性和扩展性, 解耦合
    反射的缺点
    性能差, 反射不安全, 别人可以通过反序列化攻击你的程序

21、Java序列化的作用是什么?
序列化是将一个对象序列化到硬盘中
反序列化是从硬盘中反序列化对象
Java序列化的协议有哪些?
json、hessian

22、Error 和Exception的区别是什么?

  • Error和Exception都是继承Throwable类, java中只有Throwable类型的实例才可以被抛出或者被捕获
  • Error是java运行中不可预料异常情况, 比如系统中的错误,程序是无法处理这些错误的,比如系统崩溃,虚拟机错误,内存溢出
  • Exception是指java程序运行中可以预料的异常情况, 我们可以捕获这个异常, 并且对这个异常进行业务处理, 使我们程序恢复运行

23、CheckedException 和RuntimeException有什么区别?

  • Exception也分为检查异常CheckedException和非检查异常RuntimeException
  • 检查异常CheckedException是指编译时异常, 我们需要显示的捕获
  • 非检查异常RuntimeException是指运行时异常, 我们不需要捕获

24、throws 和throw有什么区别?

  • throws是用在方法上的, 表示可能会出现异常
  • throw是用在函数里的, 表示抛出异常

25、运行时异常和一般异常有什么异常?

  • 运行时异常就是在代码运行时报错
  • 一般异常就是编译时报错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值