2021-09-13错题

场景:

在练习


错题

错题1描述:

关于访问权限说法正确 的是 ? ( )

A. 外部类前面可以修饰public,protected和private

B. 成员内部类前面可以修饰public,protected和private

C. 局部内部类前面可以修饰public,protected和private

D. 以上说法都不正确


原因分析:

B选项,成员内部类相当于成语变量 可以使用public,protected和private
C 选项 局部内部类相当于局部变量,不可以使用修饰符
在这里插入图片描述
答案:B


错题2描述:

以下代码的输出结果是?

public class B
{		
	//坑
    public static B t1 = new B();
    public static B t2 = new B();
    {
        System.out.println("构造块");
    }
    static
    {
        System.out.println("静态块");
    }
    public static void main(String[] args)
    {
        B t = new B();
    }
}

 

选项

A. 静态块 构造块 构造块 构造块

B. 构造块 静态块 构造块 构造块

C. 构造块 构造块 静态块 构造块

D. 构造块 构造块 构造块 静态块


原因分析:

这题有坑,有静态域,会顺序执行static所修饰的变量

在这里插入图片描述答案:C


错题3描述:

关于volatile关键字,下列描述不正确的是?

A. 用volatile修饰的变量,每次更新对其他线程都是立即可见的。

B. 对volatile变量的操作是原子性的。

C. 对volatile变量的操作不会造成阻塞。

D. 不依赖其他锁机制,多线程环境下的计数器可用volatile实现。


原因分析:

一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:

1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。

2)禁止进行指令重排序。

volatile只提供了保证访问该变量时,每次都是从内存中读取最新值,并不会使用寄存器缓存该值——每次都会从内存中读取。

而对该变量的修改,volatile并不提供原子性的保证。

由于及时更新,很可能导致另一线程访问最新变量值,无法跳出循环的情况

多线程下计数器必须使用锁保护。

答案:B D


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

关于我成为程序员这档事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值