【java】刷题笔记

错题笔记:

注:此文仅为个人学习笔记来自牛客网
(持续更新ing…)

一、D01
1. 类方法中可以直接调用对象变量()。

A 正确
B 错误

正确答案: B
解析:
静态方法中不能调用对象的变量,因为静态方法在类加载时就初始化,对象变量需要在新建对象后才能使用

2. 下列说法正确的是( )

A volatile,synchronized 都可以修改变量,方法以及代码块
B volatile,synchronized 在多线程中都会存在阻塞问题
C volatile能保证数据的可见性,但不能完全保证数据的原子性,synchronized即保证了数据的可见性也保证了原子性
D volatile解决的是变量在多个线程之间的可见性、原子性,而sychroized解决的是多个线程之间访问资源的同步性

正确答案: C
解析:
synchronized: 具有原子性,有序性和可见性;(三个都有)
volatile:具有有序性和可见性(缺一个原子性)
synchronized关键字和volatile关键字的不同点:

  • 粒度不同,volatile关键字只能用于变量而synchronized关键字可以修饰方法以及代码块。
  • 多线程访问volatile关键字不会发生阻塞,而synchronized关键字可能会发生阻塞。
  • volatile只能保证可见性和有序性不能保证原子性,而synchronized则三者都能保证
  • volatile关键字主要用于解决变量在多个线程之间的可见性,而synchronized解决的则是多个线程之间访问资源的同步性
3. 以下关于final关键字说法错误的是()

A final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性
B final修饰的类不能被继承
C final修饰的方法不能被重载
D final修饰的变量不允许被再次赋值

正确答案: A C
解析:
1.final修饰变量,则等同于常量
2.final修饰方法中的参数,称为最终参数。
3.final修饰类,则类不能被继承
4.final修饰方法,则方法不能被重写。
final 不能修饰抽象类
final修饰的方法可以被重载 但不能被重写

4. 关于Java内存区域下列说法不正确的有哪些()

A 程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示器,每个线程都需要一个独立的程序计数器.
B Java虚拟机栈描述的是java方法执行的内存模型,每个方法被执行的时候都会创建一个栈帧,用于存储局部变量表、类信息、动态链接等信息
C Java堆是java虚拟机所管理的内存中最大的一块,每个线程都拥有一块内存区域,所有的对象实例以及数组都在这里分配内存。
D 方法区是各个线程共享的内存区域,它用于存储已经被虚拟机加载的常量、即时编译器编译后的代码、静态变量等数据。

正确答案: B C
解析:
A.程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示器(偏移地址),Java编译过程中产生的字节码有点类似编译原理的指令,程序计数器的内存空间存储的是当前执行的字节码的偏移地址,每一个线程都有一个独立的程序计数器(程序计数器的内存空间是线程私有的),因为当执行语句时,改变的是程序计数器的内存空间,因此它不会发生内存溢出 ,并且程序计数器是jvm虚拟机规范中唯一一个没有规定 OutOfMemoryError 异常 的区域;
B.java虚拟机栈:线程私有,生命周期和线程一致。描述的是 Java 方法执行的内存模型:每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行结束,就对应着一个栈帧从虚拟机栈中入栈到出栈的过程。 没有类信息,类信息是在方法区中
C.java堆:对于绝大多数应用来说,这块区域是 JVM 所管理的内存中最大的一块。线程共享,主要是存放对象实例和数组
D.方法区:属于共享内存区域,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值