面试题精选(查漏补缺)

介绍下Java内存区域与Java内存模型

Java虚拟机在运行程序的过程中,会把它自动管理的内存划分为以上几个区域,每个区域都有其用途以及创建销毁的时机,其中蓝色代表的是所有线程共享的数据区域,而绿色部分代表的是每个线程的私有区域
这里写图片描述
方法区(Method Area)
方法区属于线程共享的内存区域,又称Non-Heap,主要用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,根据Java虚拟机规范的规定,当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常。
值得注意的是在方法区中存在一个叫运行时常量池的区域,它主要用于存放编译器生成的各种字面值常量和符号引用,这些内容将在类加载后存放到运行时常量池中,以便后续使用
JVM堆(JVM Heap)
Java堆也是属于线程共享的内存区域,它在虚拟机启动时候创建,是Java虚拟机所管理的内存中最大的一块,主要用于存放对象实例,几乎所有的对象实例都在这里分配内存,注意Java堆是GC管理的主要区域,一次很多时候也被称为GC堆,如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError 异常。
程序计数器(Program Counter Register)
属于线程私有的数据区域,是一小块内存空间,主要代表当前线程所执行的字节码行号指示器。
字节码解释器工作时,通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。
虚拟机栈(JVM Stacks)
属于线程私有的数据区域,与线程同时创建,总数与线程关联,代表Java方法执行的内存模型。
每个方法执行时,都会创建一个栈帧来存储方法的变量表、操作数栈、动态链接方法、返回值、返回地址等信息。每个方法从调用到结束就对应于一个栈帧在虚拟机栈中的入栈和出栈过程
本地方法栈(Native Method Stacks)
本地方法栈属于线程私有的数据区域,这部分主要与虚拟机用到的Native方法相关,一般情况下,我们无需关心此区域。

static和final修饰的类、方法、变量

static修饰的方法:
父类中的静态方法可以被继承,但不能被子类重写
如果在子类中写一个与父类中一样的静态方法,那么该静态方法由该子类特有,两者不构成重写关系
final修饰:
1、final修饰的类不允许被继承
2、final修饰的方法可以被子类继承,但不允许被重写,不能修饰构造方法
3、修饰变量表示不允许被修改
方法内部的局部变量,使用前被赋值即可,不一定非得初试化
类中的成员变量(如果没有在定义时候初始化,那么只能在构造代码块或者构造方法中赋值)
基本类型的变量(初始化赋值后不能更改)
引用数据类型的变量(初始化之后不能再指向另外一个对象,但对象的内容是可以变的)

volatile怎么用
parseInt()怎么用

parseInt() 方法用于将传进来的String解析为有符号的十进制整数进行。
如果方法有两个参数, 使用第二个参数指定的基数,将传进来的String解析为有符号的整数。
static int parseInt(String s)
static int parseInt(String s, int radix)
但是 这个string必须要是十进制数,否则会报错java.lang.NumberFormatException

流程控制语句分哪几种?选择语句有哪些?

可以分为选择语句、循环语句、转向语句、返回语句四类
if和swtch,他们只能选择不能重复执行

抽象类里边的抽象方法可以有方法体吗?

当然不能

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值