每日一练,java

目录

题目

选自牛客网
1.运行下面代码,输出的结果是()
class A {
public A() {
System.out.println(“class A”);
}
{ System.out.println(“I’m A class”); }
static { System.out.println(“class A static”); }
}
public class B extends A {
public B() {
System.out.println(“class B”);
}
{ System.out.println(“I’m B class”); }
static { System.out.println(“class B static”); }

public static void main(String[] args) { 

new B();

}
}

A.class A static
class B static
I’m A class
class A
I’m B class
class B

B.class A static
I’m A class
class A
class B static
I’m B class
class B

C.class A static
class B static
class A
I’m A class
class B
I’m B class

D.class A static
class A
I’m A class
class B static
class B
I’m B class
正确答案:A

官方解析: 关于Java程序初始化顺序:

父类的静态代码块

子类的静态代码块

父类的普通代码块

父类的构造方法

子类的普通代码块

子类的构造方法

按照这个顺序,答案选择A


2.以下哪一个不是赋值符号?
A.+=
B.<<=
C.<<<=
D.>>>=

在Java中,+=, <<=, 和 >>>=
都是复合赋值操作符,它们分别用于执行加法后赋值、左移位后赋值和无符号右移位后赋值。然而,<<<=
并不是一个有效的Java操作符,因为Java中没有这样的操作符定义。因此,正确答案是 C

这些复合赋值操作符提供了一种更简洁的方式来更新变量的值。例如,a += b 等价于 a = a + ba <<= b 等价于
a = a << b,而 a >>>= b 等价于 a = a >>> b。这些操作符使得代码更紧凑,同时也提高了代码的可读性。

在Java中,>>>=
是一个无符号右移操作符,这意味着当一个数右移时,左边的空位会被0填充,而不论原来的数是正数还是负数。这与有符号右移操作符 >>
不同,>> 会保持原来的符号位,即正数的左边空位填充0,负数的左边空位填充1。

因此,对于选项:

  • A. += 是一个有效的赋值操作符。
  • B. <<= 也是一个有效的赋值操作符,执行左移位后赋值。
  • C. <<<= 不是一个有效的Java操作符。
  • D. >>>= 同样是一个有效的赋值操作符,执行无符号右移位后赋值。

选项C是正确答案。

3.下面代码的运行结果为:()

import java.io.;
import java.util.
;
public class foo{
public static void main (String[] args){
String s;
System.out.println(“s=” + s);
}
}

A.代码得到编译,并输出“s=”
B.代码得到编译,并输出“s=null”
C.由于String s没有初始化,代码不能编译通过
D.代码得到编译,但捕获到 NullPointException异常

正确答案:C 在Java中,局部变量不像实例变量或类变量那样有默认初始化值。在上述代码中,String
s是在main方法中声明的局部变量,但它没有被显式初始化。因此,当尝试在System.out.println语句中使用s时,Java编译器将抛出一个编译错误,指出变量s可能尚未初始化。

这是因为Java编译器要求所有局部变量在使用之前必须被初始化,以确保不会出现意外的空指针异常。如果s被初始化为null或其他值,则代码将能够编译并运行。但在给定的代码片段中,s没有初始化,因此编译器将阻止代码编译,直到这个问题被解决。

4.java用()机制实现了线程之间的同步执行
A.监视器
B.虚拟机
C.多个CPU
D.异步调用

正确答案:A
在Java中,线程之间的同步执行主要通过监视器锁(Monitor
Lock)机制实现,这通常体现在java.lang.Object类中的wait(), notify(), 和 notifyAll()方法,以及synchronized关键字的使用上。

监视器锁是Java虚拟机(JVM)提供的一种锁机制,用于控制多线程对共享资源的访问。当一个线程进入一个由synchronized关键字修饰的方法或代码块时,它会自动获取该方法或代码块所属对象的监视器锁。如果该对象的锁已被其他线程持有,那么当前线程将被阻塞,直到锁被释放。当线程退出synchronized块或方法时,它会释放锁,允许其他等待的线程获取锁并进入代码执行。

wait(), notify(), 和notifyAll()方法也是通过监视器锁机制实现的。这些方法只能在同步代码块或方法中调用,因为它们依赖于对象的监视器锁。当线程调用wait()时,它会释放当前对象的锁并进入等待状态,直到其他线程调用notify()notifyAll()来唤醒它。notify()方法只会唤醒一个等待的线程,而notifyAll()`会唤醒所有等待的线程。

因此,选项A(监视器)是正确的答案,Java使用监视器锁机制实现了线程之间的同步执行。这种机制确保了线程的安全性和数据的一致性,避免了多线程环境下的竞态条件和死锁问题。

5.()运算符把其操作数中所有值为0和所有值为1的位分别在结果的相应中设置1和0
A.&
B.|
C.!
D.~

正确答案:D ~(按位取反运算符)。

按位取反运算符 ~
会对操作数的每一位进行取反操作。如果操作数的某一位是0,那么结果的该位就是1;如果操作数的某一位是1,那么结果的该位就是0。

选项解释:

  • A. &(按位与运算符):只有当操作数的对应位都是1时,结果的该位才是1。
  • B. |(按位或运算符):只要操作数的对应位中至少有一个是1,结果的该位就是1。
  • C. !(逻辑非运算符):用于逻辑运算,不是按位操作。
  • D. ~(按位取反运算符):对操作数的每一位进行取反。

因此,只有 ~ 运算符符合题目描述,将操作数中所有值为0的位设置为1,所有值为1的位设置为0。

总结

坚持就是胜利,相信自己,加油!

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

布说在见

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

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

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

打赏作者

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

抵扣说明:

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

余额充值