java牛客错题 2020年9月16日

  1. 下面有关java classloader说法错误的是?
    正确答案: C 你的答案: C (正确)
Java默认提供的三个ClassLoader是BootStrap ClassLoader,Extension ClassLoader,App ClassLoader
ClassLoader使用的是双亲委托模型来搜索类的
JVM在判定两个class是否相同时,只用判断类名相同即可,和类加载器无关
ClassLoader就是用来动态加载class文件到内存当中用的
解释:
JVM在判定两个class是否相同时,不仅要判断两个类名是否相同,而且要判断是否由同一个类加载器实例加载的。
一个jvm中默认的classloader有Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader,分别各司其职:

Bootstrap ClassLoader     负责加载java基础类,主要是 %JRE_HOME/lib/ 目录下的rt.jar、resources.jar、charsets.jar和class等
Extension ClassLoader      负责加载java扩展类,主要是 %JRE_HOME/lib/ext 目录下的jar和class
App ClassLoader           负责加载当前java应用的classpath中的所有类。
classloader 加载类用的是全盘负责委托机制。 所谓全盘负责,即是当一个classloader加载一个Class的时候,这个Class所依赖的和引用的所有 Class也由这个classloader负责载入,除非是显式的使用另外一个classloader载入。
所以,当我们自定义的classlo ader加载成功了 com.company.MyClass以后,MyClass里所有依赖的class都由这个classLoader来加载完成。
  1. 下面有关java实例变量,局部变量,类变量和final变量的说法,错误的是?
    正确答案: B 你的答案: C (错误)
实例变量指的是类中定义的变量,即成员变量,如果没有初始化,会有默认值。
局部变量指的是在方法中定义的变量,如果没有初始化,会有默认值
类变量指的是用static修饰的属性
final变量指的是用final 修饰的变量

类变量不就是ClassName.variableName吗。
解释:
局部变量必须有初始值。
  1. 以下多线程对int型变量x的操作,哪个不需要进行同步()
    正确答案: D 你的答案: D (正确)
++x
x=y
x++
x=1
自我感觉是赋值的话,不涉及到线程问题,而X++,或者变量之间的赋值问题都涉及到先后顺序。肯定会导致脏数据等问题。
同步是害怕在操作过程的时候被其他线程也进行读取操作,一旦是原子性的操作就不会发生这种情况。
因为一步到位的操作,其他线程不可能在中间干涉。另外三项都有读取、操作两个步骤,而X=1则是原子性操作。
  1. 顺序执行下列程序语句后,则b的值是()
    String a="Hello";
    String b=a.substring(0,2);
    正确答案: C 你的答案: B (错误)
Hello
Hel
He
null
解释:
不用看答案了,直接自己写吧。
substring截取字符串前闭后开,也就是[0,2),按理说是从0,1,2但是2不包括所以就是C
  1. @SuppressWarnings(“deprecation”)的功能是什么?
    正确答案: A 你的答案: B (错误)
屏蔽不赞同使用的类和方法的警告
屏蔽在强制类型转换的时候编译器给出的警告
关闭所有警告信息
当在可序列化的类上缺少serialVersionUID定义的警告
考注解:
本题考查注解编程,对java三大注解是否了解:
@SuppressWarnings这是java三大注解之一,主要功能是屏蔽相应的警告。
里面的deprecation修饰符则是对java中已经过时或者废弃方法的警告。
@SuppressWarnings(“deprecation”)的功能是屏蔽不赞同(就是过时废弃的意思)使用的类和方法的警告
  1. 以下哪些方法是Object类中的方法
    正确答案: A B C D 你的答案: B C (错误)
clone()
toString()
wait()
finalize()
都是
  1. 下述有关c++的虚类和java接口的描述,说法错误的是?
    正确答案: C D 你的答案: A C (错误)
c++虚类相当与java里面的抽象类
c++中没有接口的概念,与之对应的是纯虚类,对应的是java的接口
纯虚函数和虚函数的区别在于前者只包含定义,而后者还可以包含函数体。
一个抽象类和接口中的方法必须是抽象方法
解释:
1、一个子类只能继承一个抽象类(虚类),但能实现多个接口;
2、一个抽象类可以有构造方法,接口没有构造方法;
3、一个抽象类中的方法不一定是抽象方法,即其中的方法可以有实现(有方法体),接口中的方法都是抽象方法,不能有方法体,只有声明;
4、一个抽象类可以是public、private、protected、default,
   接口只有public;
5、一个抽象类中的方法可以是public、private、protected、default,
   接口中的方法只能是public和default