"Java常见面试题目整理:面向对象、super与this、作用域区别"

版权申诉
0 下载量 187 浏览量 更新于2024-02-19 收藏 599KB DOC 举报
"Java常见面试题目汇总"是一份涵盖了Java编程语言中各个方面的面试题目的文档。在这个文档中,可以找到从Java面向对象编程到常见的语法问题等各个方面的面试题。接下来我们将对文档中的一些重要主题进行总结和描述。 面向对象编程是Java语言的核心特征之一,因此在Java面试中经常会被问到相关的面试题。其中一个常见的问题是super()与this()的区别。super()是用于在子类中调用父类的构造函数,而this()则用于在一个类的构造函数中调用另一个构造函数。另一个常见的问题是关于作用域的,比如public、protected、private以及不写时的区别。public表示公开的,可以被所有类访问;protected表示受保护的,只有同一个包中的或者子类可以访问;private表示私有的,只有同一个类中可以访问;而不写时则表示包可见,即只有同一个包中的其他类可以访问。 除了面向对象编程,Java语言中还有许多其他重要的主题需要掌握,比如异常处理、多线程、集合框架等。在这份面试题目汇总中,还包括了这些主题的相关问题。比如关于异常处理,会问到什么是Checked Exception和Unchecked Exception;而在多线程方面,则会涉及到线程的生命周期、线程的同步与互斥等问题;在集合框架方面,则会涉及到ArrayList和LinkedList的区别、HashMap和TreeMap的区别等。 除了这些核心的Java编程知识外,面试题目汇总中还包括了一些关于Java开发工具和编程环境的问题,比如关于Eclipse、IntelliJ IDEA等集成开发环境的使用和调试技巧。 总的来说,这份Java常见面试题目汇总是一份非常全面的文档,涵盖了Java编程语言中各个方面的重要知识点。阅读这份文档可以帮助我们系统地复习和巩固自己的Java编程知识,从而在面试时能够更加从容地回答各种问题。同时,也可以帮助面试官更全面地了解面试者的Java编程能力和经验,从而做出更准确的评估。因此,这份面试题目汇总对于准备Java面试的人来说是一份非常宝贵的资料。
2020-07-21 上传
面试问题整理:JVMJRE、JDK、JVM,JVM :英文名称(Java Virtual Machine),就是我们耳熟能详的 Java 虚拟机。它只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,jvm 是 Java 能够跨平台的核心。 JRE :英文名称(Java Runtime Environment),我们叫它:Java 运行时环境。它主要包含两个部分,jvm的标准实现和 Java 的一些基本类库。它相对于 jvm 来说,多出来的是一部分的 Java 类库。 JDK :英文名称(Java Development Kit),Java 开发工具包。jdk 是整个 Java 开发的核心,它集成了 jre 和一些好用的小工具。例如:javac.exe,java.exe,jar.exe 等。 显然,这三者的关系是:一层层的嵌套关系。JDK>JRE>JVM。 运行时数据区域 线程私有: 1.程序计数器:它是当前线程所执行的字节码的行号指示器,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,唯一一个无OOM的区域。 2.Java虚拟机栈:描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧 ,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。 异常:线程请求的栈深度大于JVM所允许的深度:StackOverflowError 若JVM允许动态扩展,若无法申请到足够内存:OOM 3.本地方法栈:与虚拟机栈所发挥的作用是相似,它们之间的区别不过是虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的Native方法服务。 异常:同上。 线程共享:异常:OOM 内存溢出 1.Java堆:对于大多数应用来说,Java堆是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。 2.方法区(元空间):方法区用于存储已被虚拟机加载的类信息、常量、静态变量,如static修饰的变量加载类的时候就被加载到方法区中。运行时常量池是方法区的一部分,class文件除了有类的字段、接口、方法等描述信息之外,还有常量池用于存放编译期间生成的各种字面量和符号引用。在老版jdk,方法区也被称为永久代。在1.8之后,由于永久代内存经常不够用或发生内存泄露,爆出异常OOM,所以在1.8之后废弃永久代,引入元空间的概念。元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存。 直接内存:不受JVM GC管理,直接内存并不是虚拟机运行时数据区的一部分,也不是Java 虚拟机规范中定义的内存区域。在JDK1.4 中新加入了NIO(New Input/Output)类,引入了一种基于通道(Channel)与缓冲区(Buffer)的I/O 方式,它可以使用native 函数库直接分配堆外内存,然后通过一个存储在Java堆中的DirectByteBuffer 对象作为这块内存的引用进行操作。这样能在一些场景中显著提高性能,因为避免了在Java堆和Native堆中来回复制数据。