下面有关java类加载器牛客网_java牛客刷题记录

关于static说法不正确的是( )

正确答案: D 你的答案: D (正确)

可以直接用类名来访问类中静态方法(public权限)

静态块仅在类加载时执行一次

static方法中不能有用this调用的方法

不可以用对象名来访问类中的静态方法(public权限)

解释:

A、静态方法属于类本身,可以使用类名调用。

B、静态块只执行一次。

C、static块和方法不能出现this和super

D、可以的,实例对象也可以调用静态方法。

D选项,项目中不都经常用吗?比如类加载ClassLoader不也是静态方法吗?

请问所有的异常类皆直接继承于哪一个类?()

正确答案: C 你的答案: C (正确)

java.applet.Applet

java.lang.Throwable

java.lang.Exception

java.lang.Error

0b2480b5000c92f6ee3ff4ad78bbe580.png

下列说法正确的是()?

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

A我们直接调用Thread对象的run方法会报异常,所以我们应该使用start方法来开启一个线程

B一个进程是一个独立的运行环境,可以被看做一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源

C synchronized可以解决可见性问题,volatile可以解决原子性问题

D ThreadLocal用于创建线程的本地变量,该变量是线程之间不共享的

解释:

volatile与synchronized的区别:

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

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

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

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

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

记住一句话,synchronized很强大,既可以保证可见性,又可以保证原子性,而volatile不能保证原子性!

A:可以直接调用run方法, 但就起不到多线程的目的了。

下面有关 java 类加载器,说法正确的是?()

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

引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的

扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。

系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类

tomcat 为每个 App 创建一个 Loader,里面保存着此 WebApp 的 ClassLoader。需要加载 WebApp 下的类时,就取出 ClassLoader 来使用

解释:

类的加载是由类加载器完成的,类加载器包括:根加载器( BootStrap )、扩展加载器( Extension )、系统加载器( System )和用户自定义类加载器( java.lang.ClassLoader 的子类)。从 Java 2 ( JDK 1.2 )开始,类加载过程采取了父亲委托机制( PDM )。 PDM 更好的保证了 Java 平台的安全性,在该机制中, JVM 自带的 Bootstrap 是根加载器,其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。 JVM 不会向 Java 程序提供对 Bootstrap 的引用。下面是关于几个类加载器的说明:

Bootstrap :一般用本地代码实现,负责加载 JVM 基础核心类库( rt.jar );

Extension :从 java.ext.dirs 系统属性所指定的目录中加载类库,它的父加载器是 Bootstrap ;

system class loader :又叫应用类加载器,其父类是 Extension 。它是应用最广泛的类加载器。它从环境变量 classpath 或者系统属性 java.class.path 所指定的目录中记载类,是用户自定义加载器的默认父加载器。

用户自定义类加载器: java.lang.ClassLoader 的子类

父类委托机制是可以修改的,有些服务器就是自定义类加载器优先的。

下列说法错误的有( )

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

能被java.exe成功运行的java class文件必须有main()方法

J2SDK就是Java API

Appletviewer.exe可利用jar选项运行.jar文件

能被Appletviewer成功运行的java class文件必须有main()方法

解释:

B选项中J2SDK是编程工具,不是API.

C选项中 Appletviewer.exe 就是用来解释执行java applet应用程序的,简单理解就是没有main函数的继承applet类的java类。

D选项中 能被Appletviewer成功运行的java class文件没有main()方法

以下说法错误的是()

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

其他选项均不正确

java线程类优先级相同

Thread和Runnable接口没有区别

如果一个类继承了某个类,只能使用Runnable实现线程

B选项,在java中线程是有分优先等级的所以优先级不能相同,错误

C选项,Thread实现了Runnable接口是一个类不是接口,错误

D选项,实现多线程的三种方式,一种是继承Thread类使用此方式就不能继承其他的类了。还有两种是实现Runnable接口或者实现Callable接口

,所以D错误。

A选项,综上A说其余三项都是错误的,所以A选项所述为真,不是错误的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值