背java基础面试_面试必背——Java基础

Java基础

1. JVM是什么?为什么Java被称作是“平台无关的编程语言”(Java跨平台性)?

JVM(Java Virtual Machine)是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的字节码,就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上是把字节码解释成具体平台上的机器指令执行。

Java虚拟机(jvm)是可以执行java字节码的虚拟进程。 准确的来说,Java的跨平台指的是java源文件经过javac编译器编译成的二进制.class字节码的跨平台性。各个平台装有不同的jvm,而jvm能将相同的字节码翻译成平台相关的机器码,进而执行。

2. JDK/JRE/JVM是什么关系

JDK(Java Development Kit)是java语言开发工具包。包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。

JRE(JavaRuntimeEnvironment)是Java运行环境。它包括JVM、Java核心类库和支持文件。

JVM(JavaVirtualMachine)是java虚拟机。是JRE的一部分。它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。

3. 面向过程和面向对象的区别?

面向过程就是先分析出解决问题需要的步骤,然后用函数把这些步骤一个个实现,使用的时候依次调用,面向过程的核心是过程。

面向对象就是把构成问题的事物分解成一个个对象,建立对象不是为了实现一个步骤,而是为了描述某个事物在解决问题中的行为,面向对象的核心是对象。

4. Java的基本数据类型有哪些?

数据类型

默认值

byte,short,int,long

0

float,double

0.0

boolean

false

char

\u0000

引用数据类型

null5. Java基本数据类型的位数和取值范围?

96563d7f5472523d60735803f769eb06.png

6. 抽象类和接口的区别?

相同点:都不可以被实例化,都可以被继承,都可以有抽象方法

区别:

抽象类可以有构造方法,接口中不能有构造方法。

抽象类中可以有普通成员变量,接口中没有普通成员变量

抽象类中可以包含静态方法,接口中不能包含静态方法

类只能继承一个抽象类,但是可以实现多个接口,接口可以继承多个接口。

抽象类则可以同时包含抽象和非抽象的方法,而接口中所有的方法都是抽象的。

类可以不实现抽象类和接口声明的所有方法,但是在这种情况下,类也必须得声明成是抽象的。

Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。

Java接口中的成员函数默认是public的。抽象类的非抽象方法可以是private,protected或者是public。

7. 重写和重载有什么区别?

方法重载是指在同一个类里,两个或者多个方法具有相同的方法名,但是参数列表不同(个数、类型、顺序)。

方法重写是指继承的时候子类重写父类的方法,此时方法名相同,参数列表相同,返回类型也要相同或者是其子类。访问权限>=父类,抛出异常必须<=父类

方法重载是编译时期的多态,而方法重写是运行时期的多态。

8. Java多态的实现有几种方式?

子类继承父类,子类重写父类的方法,父类型的引用指向子类型的对象。

9. Java四种修饰符的访问权限

305a179dbcfb728affcf60c36a17bd74.png

10. 怎么一次break跳出多重循环

可以在循环体开头设置一个标签,后面紧跟一个冒号,然后使用带此标签的break语句跳出多重循环

11. 说一下final关键字的用法

final 表示最终的,不可变的。

final修饰的类无法被继承,final修饰的方法无法被覆盖。

final修饰的方法参数不能被修改。

final修饰的实例变量,必须在声明时或者构造方法中对它赋值。

final修饰的局部变量一旦被赋值之后,不可重新赋值。

12. String为何会产生很多对象?

String类为final类,String对象在创建完成后value值就已经无法再修改了,所以每次对String进行操作产生的字符串肯定都是新的String对象。

13. JVM中String的机制?

当你new 一个String时,总会在堆中新建一个对象,String 引用指向这个对象,然后检查String pool(字符串池)中有没有和这个字符串内容一样的字符串,没有的话,将此字符串加入String pool。

当使用String a = “abc”; 形式声明一个字符串时,jvm先检查字符串池里有没有 abc 这个字符串,有的话直接指向此字符串,没有的话在串池中增加这个字符串,然后指向它。

14. Java函数传入值和引用的区别?

值传递的是变量的值,传递进去的是变量的拷贝,改变副本不影响原变量。

引用传递的是该引用中保存的对象地址,在被调用函数中对对象进行修改将直接导致外部对象的值被修改。

java内的基础类型数据传递都是值传递. java中对象的传递是引用传递。

15. String、StringBuffer、StringBuilder的区别

String 是被 final 修饰的,他的长度是不可变的,每次对String的操作都会生成新的String对象,是线程安全的。

StringBuffer 和 StringBuilder 类的对象能够被多次的修改,并且不产生新的对象。StringBuffer是线程安全的,StringBuilder不是线程安全的

如果很少需要对字符串进行操作,就用String,如果需要对字符串进行大量操作,单线程用StringBuilder,多线程用StringBuffer。

16. == 和 equals 的区别

== 对于基本类型,比较的是值是否相同;对于引用类型,比较的是引用是否相同

Object 默认提供的 equals 方法比较的是对象的地址,但是很多类重写了 equals 方法,比如String、Integer 等 把引用比较改成了值比较,所以一般情况下 equals 比较的是值。

17. Object的equals()和hashCode()方法

Object的hashCode值是根据内存地址换算出来的一个值。

Object的equals方法是使用==,也就是判断内存地址是否相等。

18. 为什么要重写equals?

因为在实际的业务中可能不需要严格意义上的相等,只需要业务上的相等,这时就可以重写equals()方法来满足业务需求

19. 为什么重写equals()的同时要重写hashCode()?

因为Object.hashCode有约定,如果两个对象根据equals(Object)方法是相等的,那么这两个对象的hashCode必须相等。

如果重写equals()却不重写hashCode(),就会违反这个约定。

20. 两个对象的 hashCode() 相同,则 equals() 也一定为 true,对吗?

不一定。hashCode相同只能说明这两个对象在散列表存储结构中存放在同一个桶里,但这个桶里可能有很多对象,所以equals() 不一定为true

21. 怎么判断两个对象是否相等?

首先判断两个对象的hashCode是否相等,如果不相等,认为两个对象也不相等;如果相等,判断两个对象用equals运算是否相等,如果不相等,认为两个对象也不相等,如果相等,认为两个对象相等(equals()是判断两个对象是否相等的关键)。

22. int和Integer的区别?

区别:

int则是java的一种基本数据类型,Integer是int的包装类,是引用数据类型。

int变量直接存储数据值,Integer必须实例化后才能使用,存储的是引用对象的地址。

int的默认值是0,Integer的默认值是null。

23. 什么是自动装箱和自动拆箱?

jdk1.5后可以自动实现基本数据类型的装箱和拆箱。装箱是指,将基本数据转化成对象。转化为对象可以方便的操作数据。利用面向对象的方法方便的实现对数据的操作。拆箱就是装箱的逆过程。

24. 什么时候会自动装箱,什么时候自动拆箱,

在基本类型的值赋值给包装类型时会自动装箱。例如:Integer a = 1;

在包装类型赋值给基本类型时会自动拆箱。例如:Integer a = 1;int b = a;

包装类型和基本数据类型进行比较时,java会将包装类型自动拆箱为基本数据类型,然后进行比较

包装类型在做运算符运算时,会自动拆箱

25. 什么情况下不能将Integer赋值给int类型,什么情况下只能用integer

如果需要区分未赋值和0的区别,就只能用Integer。因为int的默认值为0,而Integer的默认值为null。

当需要往ArrayList,HashMap中放东西时,int基本数据类型是放不进去的,因为容器都是装 object的,这时就需要包装类型Integer了。

26. Java中的Exception分为哪几种?列举几种常见的异常

编译时异常和运行时异常

NullPointerException

ClassCastException

ArrayIndexOutOfBoundsException

IllegalArgumentException

27. finally一定执行吗?什么时候不被执行?

不一定

当程序进入try块之前就出现异常时,会直接结束,不会执行finally块中的代码

当程序在try块中强制退出时也不会去执行finally块中的代码,比如在try块中有System.exit(0)语句。

当程序意外中断,比如断电,使用stop结束线程,finally不会被执行

28. try catch中多层catch的作用

可以捕获多个异常类型,并对不同类型的异常做不同的处理

从上到下,从小到大捕捉

29. system.out.println()打印的是什么

打印的是toString()方法,类名+@+哈希值的16进制形式

30. 限流算法?

令牌桶算法和漏桶算法

31. Java8新特性了解哪些,lambda表达式的filter方法map方法 (待完善)

Lambda 表达式、方法引用、默认方法

32. 是否可以在static环境中访问非static变量?

不可以。因为静态的成员会随着类的加载而加载到静态方法区内存,java虚拟机会对类的静态变量,静态方法进行初始化,此时如果静态方法中有非静态变量,由于非静态变量是随着实例的创建而创建,此时还没有实例创建,所以非静态变量还没有创建,所以会出现编译错误。所以不能直接访问,需要通过创建对象去访问。

33. ”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?

Static表示静态的意思。它可以修饰一个变量,一个方法,被其修饰的变量被称为类变量,被其修饰的方法成为类方法,其随着类的加载而被加载。

无法重写被private修饰的方法,因为被private修饰的父类方法在子类中是不可见的。

静态方法形式上可以被重写,即子类中可以重写父类中静态的方法,但是实际上是被隐藏了,从内存的角度上静态方法不可以被重写。

34. 有无static的区别?

static 修饰的成员变量和成员方法在类加载的时候被加载到方法区。非static修饰的成员变量是要创建变量才加载在堆内存中的。

引用static 修饰的成员变量和成员方法时 通过类名.变量名调用,引用非static 修饰的成员变量和成员方法时只能通过对象名.变量名或者this.变量名调用。

35. Java 中的 Math. round(-1. 5) 等于多少?

Math.round 表示四舍五入

-1.4 ——》-1

-1.5 ——》-1

-1.6 ——》-2

1.4 ——》1

1.5 ——》2

1.6 ——》2

36. Java中,什么是构造方法?什么是构造方法重载?

构造方法是类的对象在创建的时候会调用的方法。如果程序员没有设置构造方法,系统也会为该对象提供一个默认的构造方法。构造函数的函数名和类名一致,没有返回值。

构造方法重载就是根据传入的参数不同设置多个构造方法,来供实例化时调用 。

NIO原理,怎么实现非阻塞IO(待整理)

2.Java NIO 讲一下(待整理)

2.1 NIO selector,epoll的区别(待整理)

标签:必背,Java,String,对象,重写,equals,面试,方法

来源: https://blog.csdn.net/weixin_43338519/article/details/101035329

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值