Java面试题基础(一)


前言

最新的 Java 面试题,技术栈涉及 Java 基础、集合、多线程、Mysql、分布式、Spring全家桶、MyBatis、Dubbo、缓存、消息队列、Linux…等等,会持续更新。

如果对老铁有帮助,帮忙免费点个赞,谢谢你的发财手!

1、面向对象的特征有哪些方面?

  • 封装:通常认为封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义好的接口;
  • 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类);
  • 多态:特点是有继承/实现的关系;方法重写(子类重写父类的方法);有父类引用指向子类对象
  • 抽象:特点是抽象类不能实例化,只能通过子类实例化;子类必须重写父类的所有抽象方法;不能与private、final、static共存。

2、访问修饰符的作用范围?

修饰符当前类同一个包同一个包的子类其他包
public
protectedx
defaultxx
privatexxx

类的成员不写访问修饰时默认为 default。
抽象接口成员方法默认是public abstract 修饰的
抽象成员属性默认是public static final 修饰的

3、Java有哪些数据类型?

基本数据类型只有8 个:byte、short、int、long、float、double、char、boolean ;
除了基本类型,剩下的都是引用类型,类、接口、数组、集合(String和枚举也是类)。

4、float f = 3.4; 是否正确?

不正确,3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于向下转型会造成精度损失。
需要强制类型转换 float f = (float)3.4; 或者写成 float f = 3.4F。

5、short s1 = 1; s1 = s1 + 1;对吗? short s1 = 1; s1 += 1; 对吗?

第一个不对,1是int类型,因此 s1+1 运算结果也是int型,需要强制转换类型才能赋值给 short 型。
第二个正确,因为 s1+= 1;相当于 s1 = (short)(s1 + 1);其中有隐含的强制类型转换。

6、int 和 Integer 有什么区别?

Java 为每一个基本数据类型都引入了对应的包装类型(wrapper class),从Java 5开始引入了自动装箱/拆箱机制,使得二者可以相互转换。

基本类型byteshortintlongfloatdoublecharboolean
包装类型ByteShortIntegerLongFloatDoubleCharacterBoolean

7、& 和 && 的区别?

逻辑与&运算符 和 短路与&&运算符:二者都要求运算符左右两端的布尔值都是true,整个表达式的值才是 true。
而短路与&&运算符,如果&&左边的表达式的值是 false,右边的表达式就不会运算了,直接返回false。

8、static关键字有什么作用?

static修饰的变量或方法,可以通过类名直接访问,而不必创建对象。
静态变量或方法在内存中只有一个副本,而不是每次创建新的对象时都会创建一个新的副本。

9、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

Math.round(11.5)的返回值是 12,Math.round(-11.5)的返回值是 -11,
四舍五入的原理是在参数上加 0.5 然后进行下取整。
Math.random()方法是产生随机数字。

10、switch支持的数据类型?

switch支持的数据类型 byte、short、int、char、enum枚举,从 Jdk 1.7 开始,也支持字符串(String),
但是长整型(long)在目前所有的版本中都是不支持的。

11、数组有没有 length() 方法?

Java中数组没有 length()方法,只有 length 的属性。
String 有 length()方法。
JavaScript 中,获得字符串的长度是通过 length 属性得到的,这一点容易和 Java 混淆。

12、构造器(constructor)是否可被重写?

构造器不能被继承,因此不能被重写,但可以被重载。

13、两个对象值相同(x.equals(y) == true),hash code也相同吗?

相同,但反过来不一定,因此重写equals方法,必须也重写hashCode方法。

14、String 类是否可以继承?

String 类是 final 修饰的类,不可以被继承。

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {

15、值传递和引用传递的区别?

1、值传递改变形参的值不会影响实参的值,比如基本数据类型和String;
2、引用传递改变形参的值会影响实参的值,比如引用数据类型(类/接口/数组/集合)。

public static void main(String[] args) {
    UserDTO userDTO = new UserDTO("张三");
    int[] arr = {10};
    String a = "a1";
    this.test(userDTO, arr, a);
    System.out.println(userDTO.getName()); //输出:李四
    System.out.println(arr[0]); //输出:20
    System.out.println(a); //输出:a1
}
public static void test(UserDTO userDTO, int[] arr, String a){
    userDTO.setName("李四");
    arr[0] = 20;
    a = "a2";
  }

16、String 和 StringBuilder、StringBuffer 的区别?

  • 1.基本区别
    String的对象不可变,StringBuffer和StringBuilder的对象是可变的;
    (String为字符串常量,而StringBuilder和StringBuffer均为字符串变量)
  • 2.性能区别
    三者中StringBuilder执行速度最快,StringBuffer次之,String最慢;
  • 3.安全区别
    String、StringBuffer是线程安全的,StringBuilder是线程不安全的
    (如果程序是单线程使用StringBuilder效率高,如果是多线程使用StringBuffer或者String)。
  • 共同点:
    1.三者在java中都是用来处理字符串的;
    2.三个类都被final修饰,因此都是不可继承的;
    3.StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类)。

17、重载和重写的区别,重载的方法和返回类型有关吗?

方法的重载(Overload)和重写(Override)都是实现多态的方式。
  • 重载:发生在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同或者二者都不同)则视为重载,重载和返回类型没有关系;
  • 重写:发生在子类与父类之间,重写要求子类与父类有相同的返回类型,而且不能比父类声明更多的异常。

18、char 型变量中能不能存贮一个中文汉字,为什么?

char类型可以存储一个中文汉字,因为在Java中,char是用来存储Unicode编码的,一个 char 类型占 2 个字节(16 比特),所以放一个中文是没问题的。当然,如果某个汉字没有包含在Unicode字符集中,那么是不能被char型变量存储的。

19、抽象类(abstract class)和接口(interface)有什么异同?

相同:1. 抽象类和接口都不能够实例化,即不能通过new创建对象;
2. 子类都需要对其中的抽象方法(没有方法体)全部进行实现,否则该类仍然需要被声明为抽象类。
3.都可以定义抽象方法、普通方法(都可以重写)和普通变量;
4. 都可以定义静态方法或静态变量(必须通过类或接口直接点方法名或变量名使用)
不同:1. 抽象类只能通过extends继承1个,接口通过implements可以实现多个;
2. 抽象类可以有构造函数,接口不可以;
3. 接口的静态变量或普通变量都必须是public final,抽象类随意。

20、Java 中会存在内存泄漏吗,请简单描述?

内存泄露是指系统中存在无法回收的内存,有时候会造成内存不足或系统崩溃。
理论上 Java 因为有垃圾回收机制(GC)不会存在内存泄露问题(这也是 Java 被广泛使用于服务器端编程的一个重要原因);然而在实际开发中,可能会存在无用但被引用的对象,这些对象不能被 GC 回收,因此也会导致内存泄露的发生。

总结

都已经看到这里啦,赶紧收藏起来,祝您工作顺心,生活愉快!

  • 28
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值