Java错题集(八)

本文深入探讨了Java并发编程中的核心类如Semaphore、ReentrantLock、Future及CountDownLatch的特点与区别,并解析了Java语言特性的关键概念,包括编译参数、条件判断、表达式的类型推断、线程管理及反射机制等。

目录

以下是java concurrent包下的4个类,选出差别最大的一个

命令javac-d参数的用途是?()

What is the result?

表达式(short)10/10.2*2运算后结果是什么类型?

下列说法正确的是()?

Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:(          )


以下是java concurrent包下的4个类,选出差别最大的一个

正确答案: C   你的答案: A (错误)

Semaphore
ReentrantLock
Future
CountDownLatch

来源:https://www.nowcoder.com/questionTerminal/8787ccb33c7a43e59e6b185971e4ee9b

A、Semaphore:类,控制某个资源可被同时访问的个数;

B、ReentrantLock:类, 具有与使用synchronized方法和语句所访问的隐式监视器锁相同的一些基本行为和语义,但功能更强大;

C、 Future:接口,表示异步计算的结果;

D、 CountDownLatch: 类,可以用来在一个线程中等待多个线程完成任务的类。

 

命令javac-d参数的用途是?()

正确答案: A   你的答案: D (错误)

指定编译后类层次的根目录
指定编译时需要依赖类的路径
指定编译时的编码
没有这一个参数

来源:https://www.nowcoder.com/questionTerminal/1a350e4f8f464ff6a50ae446561d7d28

-d destination 目的地

-s source 起源地

javac -d 指定放置生成的类文件的位置

javac -s 指定放置生成的源文件的位置

 

Given

public class IfTest{

    public static void main(string[]args){

        int x=3;

        int y=1;

        if(x=y)

            System.out.println(“Not equal”);

        else

            System.out.println(“Equal”);

     }

}

 

 

 

 

What is the result?

正确答案: C   你的答案: B (错误)

The output is “Equal”
The output in “Not Equal”
An error at line 5 causes compilation to fall.
The program executes but does not print a message.

来源:https://www.nowcoder.com/questionTerminal/2e9036aba9854510867510e4252d255e

这个题考查两个知识点。

1、Java中,赋值是有返回值的 ,赋什么值,就返回什么值。比如这题,x=y,返回y的值,所以括号里的值是1。

2、Java跟C的区别,C中赋值后会与0进行比较,如果大于0,就认为是true;而Java不会与0比较,而是直接把赋值后的结果放入括号

 

表达式(short)10/10.2*2运算后结果是什么类型?

正确答案: C   你的答案: A (错误)

short
int
double
float

来源:https://www.nowcoder.com/questionTerminal/d769be9a6dae4c3088403c5de56427ef
首先,要注意是(short)10/10.2*2,而不是(short) (10/10.2*2),前者只是把10强转为short,又由于式子中存在浮点数,所以会对结果值进行一个自动类型的提升,浮点数默认为double,所以答案是double;后者是把计算完之后值强转short。

 

下列说法正确的是()?

正确答案: B D   你的答案: B C (错误)

我们直接调用Thread对象的run方法会报异常,所以我们应该使用start方法来开启一个线程
一个进程是一个独立的运行环境,可以被看做一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源
synchronized可以解决可见性问题,volatile可以解决原子性问题
ThreadLocal用于创建线程的本地变量,该变量是线程之间不共享的

来源:https://www.nowcoder.com/questionTerminal/d46338f4e2d04812afe282b47ab5f73a
volatile与synchronized的区别:

volatile本质是在告诉jvm当前变量在寄存器中的值是不确定的,需要从主存中读取,synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住.

volatile仅能使用在变量级别,synchronized则可以使用在变量,方法.

volatile仅能实现变量的修改可见性,但不具备原子特性,而synchronized则可以保证变量的修改可见性和原子性.

volatile不会造成线程的阻塞,而synchronized可能会造成线程的阻塞.

volatile标记的变量不会被编译器优化,而synchronized标记的变量可以被编译器优化.

 

Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的:(          )

正确答案: A D F   你的答案: E (错误)

Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员
Java反射机制提供了字节码修改的技术,可以动态的修剪一个类
Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多
Java反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率

来源:https://www.nowcoder.com/questionTerminal/b177ce35fedb42bab87b37acd8158a3b

反射指的是在运行时能够分析类的能力的程序。

反射机制可以用来:

1.在运行时分析类的能力--检查类的结构--所用到的就是java.lang.reflect包中的Field、Method、Constructor,分别用于描述类的与、方法和构造器。

2.在运行时查看对象。

3.实现通用的数组操作代码。

 

反射机制的功能:

在运行时判断任意一个对象所属的类;

在运行时构造任意一个类的对象;

在运行时判断任意一个类所具有的成员变量和方法;

在运行时调用任意一个对象的方法;生成动态代理对象。

 

反射机制常见作用:

动态加载类、动态获取类的信息(属性、方法、构造器);

动态构造对象;

动态调用类和对象的任意方法、构造器;

动态调用和处理属性;

获取泛型信息(新增类型:ParameterizedType,GenericArrayType等);

处理注解(反射API:getAnnotationsdeng等)。

 

反射机制性能问题:

反射会降低效率。

void setAccessible(boolean flag):是否启用访问安全检查的开关,true屏蔽Java语言的访问检查,使得对象的私有属性也可以被查询和设置。禁止安全检查,可以提高反射的运行速度。

可以考虑使用:cglib/javaassist操作。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值