版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33322074/article/details/90142985
java基础面试题总结一:
-
javac.exe和java.exe区别:
- javac.exe是编译程序,将源代码编译生成二进制文件.class文件。
- java.exe是执行程序,将.class文件执行,得到结果。
-
关键字和标识符的区别:
- 关键字就是java语言赋予特殊含义的单词。
- 保留字就是java语言打算将其将其作为特殊含义的单词,还没有执行。
- 标识符:就是自定义的名词,例如,类名,属性名,方法名等。
-
变量开辟三要素:
- 数据类型
- 变量名称
- 初始化值
- 作用域:从定义开始,到大括号结束。
- 生命周期:变量从定义开始就在内存中活了,变量到达它所在的作用域的时候就结束了。
-
数据类型:
- 基本数据类型:byte =char= short < int <float< long < double boolean
- 引用数据类型:数组,类,接口 ,String
- 自动类型转换:从低级别到高级别,系统自动转换
- 强制类型转换:从高级别到低级别
-
运算符号
- &和&&的区别:&无论左边结果是什么,右边都参与运算。&&,只要一边不通过,整体就不通过。
- |和||区别:|两边都运算。||,假如左边为true,则右边就不参与运算了。
-
重载和重写
- 重载:是在同一个类中,有多个同名的函数,但是参数不同。
- 重写:在父子类中,父类和子类中有相同的函数方法,参数也相同,但是方法体内容不同。
-
java中数组的表现形式
- 元素类型[] 变量名 = new 元素类型[元素的个数];
- 元素类型[] 变量名 = {元素1,元素2…};
- 元素类型[] 变量名 = new 元素类型[]{元素1,元素2…};
-
java内存
- 寄存器内存
- 本地方法区
- 方法区
- 栈:存储的是局部变量(函数中定义的变量,函数中的参数,语句中的变量)
- 堆
-
寄存器内存
- 是一块较小的内存空间,可以看做是当前线程所执行的字节码行号指示器,字节码解释器通过改变计数器的值来选取下一条所执行的字节码指令,例如分支,循环,跳转,异常处理,都要依赖计数器完成,该区域线程私有,由于cpu通过在不同的线程来高速切换,此时程序计数器需要记录当前线程执行到哪一步了以便下一次cpu可以在这个记录点上继续执行。
-
本地方法区:https://blog.csdn.net/q3838418/article/details/79178230
- 也叫做Native Method,是java调用非java代码的接口。该方法实现是非java代码的实现,例如C语言。jvm的并不完全由java写的,还有一部分C语言写的,这些C语言主要是操作一些硬件,连接操作系统的。NativeMethod提供了一个java接口,用于实现这些C语言的调用,本地方法区需要用native标识符修饰。
-
java虚拟机栈:
- 线程私有,其他栈不能访问,每个线程包含一个栈区,生命周期与线程相同。类中的每个方法被执行时,都会同时创建一个栈帧,用于存储局部变量表,操作栈,动态链接(指向堆中的对象),方法出口等信息。每一个方法被调用到执行完的过程,就是该方法进栈,出栈的过程。
- 局部变量包含8种基本类型,引用对象(可能是指向对象起始地址的引用指针)还有returnAddress类型,局部变量所需的内存空间在编译期已经分配完成,并且在执行时不会改变。
- 如果线程请求的栈深度大于虚拟机所允许的深度,将会抛出StackOverflowError
- 如果虚拟机栈扩展时无法申请到足够的内存时,将会抛出OutOfMemoryError异常。
- 栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
-
方法区:又叫静态区
- 是各个线程共享的内存区域,用于存储已经被虚拟机加载的类信息,常量,静态常量,即时编译器编译后的代码数据,java虚拟机把它描述成一个堆的逻辑部分,有一个别名,叫做non-Heap(非堆)该区域是编译时期.class文件、变量、静态方法进入的地方 静态方法先于编译进入方法区。垃圾收集行为在这个区域是比较少出现的,但并非数据进入了方法区就如永久代的名字一样“永久”存在了。这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载.
-
java堆(java Heap)
- 是java虚拟机所管理的内存中最大的一块,java堆是被所有线程共享的一块内存区域, 在虚拟机启动时创建,唯一目的就是存放对象实例, java堆是垃圾收集器管理的主要区域,因此很多时候也被称为GC堆。