本文主要是介绍背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基本数据类型的位数和取值范围?
6. 抽象类和接口的区别?
相同点:都不可以被实例化,都可以被继承,都可以有抽象方法
区别:
抽象类可以有构造方法,接口中不能有构造方法。
抽象类中可以有普通成员变量,接口中没有普通成员变量
抽象类中可以包含静态方法,接口中不能包含静态方法
类只能继承一个抽象类,但是可以实现多个接口,接口可以继承多个接口。
抽象类则可以同时包含抽象和非抽象的方法,而接口中所有的方法都是抽象的。
类可以不实现抽象类和接口声明的所有方法,但是在这种情况下,类也必须得声明成是抽象的。
Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
Java接口中的成员函数默认是public的。抽象类的非抽象方法可以是private,protected或者是public。
7. 重写和重载有什么区别?
方法重载是指在同一个类里,两个或者多个方法具有相同的方法名,但是参数列表不同(个数、类型、顺序)。
方法重写是指继承的时候子类重写父类的方法,此时方法名相同,参数列表相同,返回类型也要相同或者是其子类。访问权限>=父类,抛出异常必须<=父类
方法重载是编译时期的多态,而方法重写是运行时期的多态。
8. Java多态的实现有几种方式?
子类继承父类,子类重写父类的方法,父类型的引用指向子类型的对象。
9. Java四种修饰符的访问权限
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
这篇关于背java基础面试_面试必背——Java基础的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!