java牛客刷题记录

好几天没刷题了,大清早刷个题,清醒地认识到自己有多菜。

不过这次错的还行,4个单选,6个多选,结果对了6个。虽然有好多都不太熟悉。看题吧,以下记录模糊或者有意义的题目。

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

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

    可以直接用类名来访问类中静态方法(public权限)
    静态块仅在类加载时执行一次
    static方法中不能有用this调用的方法
    不可以用对象名来访问类中的静态方法(public权限)
    解释:
    A、静态方法属于类本身,可以使用类名调用。
    B、静态块只执行一次。
    C、static块和方法不能出现this和super
    D、可以的,实例对象也可以调用静态方法。
    D选项,项目中不都经常用吗?比如类加载ClassLoader不也是静态方法吗?
    
  2. 请问所有的异常类皆直接继承于哪一个类?()

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

    java.applet.Applet
    java.lang.Throwable
    java.lang.Exception
    java.lang.Error
    

  3. 下列说法正确的是()?

    正确答案: 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方法, 但就起不到多线程的目的了。
    
  4. 下面有关 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 的子类
    
    父类委托机制是可以修改的,有些服务器就是自定义类加载器优先的。
    
  5. 下列说法错误的有( )

    正确答案: 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()方法
    
  6. 以下说法错误的是()

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

    其他选项均不正确
    java线程类优先级相同
    Thread和Runnable接口没有区别
    如果一个类继承了某个类,只能使用Runnable实现线程
    B选项,在java中线程是有分优先等级的所以优先级不能相同,错误
    C选项,Thread实现了Runnable接口是一个类不是接口,错误
    D选项,实现多线程的三种方式,一种是继承Thread类使用此方式就不能继承其他的类了。还有两种是实现Runnable接口或者实现Callable接口
    ,所以D错误。
    A选项,综上A说其余三项都是错误的,所以A选项所述为真,不是错误的。
    
 posted on 2020-09-07 09:05  ben跑的换行符  阅读(222)  评论(0编辑  收藏  举报