牛客java选择题每日打卡Day23

举报
京与旧铺 发表于 2022/08/31 21:16:31 2022/08/31
【摘要】 牛客java选择题每日打卡Day23👩‍💻博客主页:京与旧铺的博客主页✨欢迎关注🖱点赞🎀收藏⭐留言✒🔮本文由京与旧铺原创,csdn首发!😘系列专栏:java学习👕参考网站:牛客网💻首发时间:🎞2022年7月10日🎠🎨你做三四月的事,八九月就会有答案,一起加油吧🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦🎧最后的话,作者是一个新人,在很多方面还做的不好,欢迎大...

牛客java选择题每日打卡Day23

👩‍💻博客主页:京与旧铺的博客主页

✨欢迎关注🖱点赞🎀收藏⭐留言✒

🔮本文由京与旧铺原创,csdn首发!

😘系列专栏:java学习

👕参考网站:牛客网

💻首发时间:🎞2022年7月10日🎠

🎨你做三四月的事,八九月就会有答案,一起加油吧

🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦

🎧最后的话,作者是一个新人,在很多方面还做的不好,欢迎大佬指正,一起学习哦,冲冲冲

💬推荐一款模拟面试、刷题神器👉点击进入网站

🛒导航小助手🎪


🐱‍🚀选择题1

关于下面的一段代码,以下哪些说法是正确的:


public static void main(String[] args) {
    String a = new String("myString");
    String b = "myString";
    String c = "my" + "String";
    String d = c;
    System.out.print(a == b);
    System.out.print(a == c);
    System.out.print(b == c);
    System.out.print(b == d);
}


正确答案: A D 你的答案: B D (错误)
System.out.print(a == b)打印出来的是false
System.out.print(a == c)打印出来的是true
System.out.print(b == c)打印出来的是false
System.out.print(b == d)打印出来的是true

a是运行时动态加载的,此时会在堆内存中生成一个myString字符串,指向堆内存字符串地址

b是编译时静态加载的,此时会在常量池中存放一个myString字符串,指向常量池字符串地址

c会在编译时对"my" + "String"进行拼接成myString字符串,再去常量池查找,找到之后指向该字符串地址

d是c的脚本,地址相同

最后:Sting的==比较的是地址值是否相同

🐱‍🚀选择题2

下面哪些接口直接继承自Collection接口()

正确答案: A C 你的答案: A C D (错误)
List
Map
Set
Iterator

img

🐱‍🚀选择题3

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

正确答案: A B C D 你的答案: B C D (错误)
引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的
扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。
系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类
tomcat为每个App创建一个Loader,里面保存着此WebApp的ClassLoader。需要加载WebApp下的类时,就取出ClassLoader来使用

jvm classLoader architecture :

a、Bootstrap ClassLoader/启动类加载器 主要负责jdk_home/lib目录下的核心 api 或 -Xbootclasspath 选项指定的jar包装入工作.

B、Extension ClassLoader/扩展类加载器 主要负责jdk_home/lib/ext目录下的jar包或 -Djava.ext.dirs 指定目录下的jar包装入工作

C、System ClassLoader/系统类加载器 主要负责java -classpath/-Djava.class.path所指的目录下的类与jar包装入工作.

B、 User Custom ClassLoader/用户自定义类加载器(java.lang.ClassLoader的子类) 在程序运行期间, 通过java.lang.ClassLoader的子类动态加载class文件, 体现java动态实时类装入特性.

🐱‍🚀选择题4

通过以下哪些方法可反射获取到User对象中static属性的值?

正确答案: A B C D 你的答案: B D (错误)
User. class. getDeclaredField ("name"). get (null);
User. class. getField ("name"). get (null);
User user=new User(); return user. getClass(). getField ("name").get (user);
User user=new User(): return user. getClass(). getDeclaredField ("name"). get (user);

答案:A、D

考察点:getDeclaredField和 getField的差异

参考资料

getDeclaredField:查找该Class所有声明属性(静态/非静态),但是他不会去找实现的接口/父类的属性

getField:只查找该类public类型的属性,如果找不到则往上找他的接口、父类,依次往上,直到找到或者已经没有接口/父类

问题:此题本身就有问题,不够严谨, 没有给出User类的实现代码,所以我们并不知道这个"static"属性的访问类型啊,是public/protect/privare/还是包访问类型呢?上面选答案A、D,只是因为这四种情况都满足

🐱‍🚀选择题5

关于Java中的数组,下面的一些描述,哪些描述是准确的:( )

正确答案: A C F 你的答案: C D E (错误)
数组是一个对象,不同类型的数组具有不同的类
数组长度是可以动态调整的
数组是一个连续的存储结构
一个固定长度的数组可类似这样定义: int array[100]
两个数组用equals方法比较时,会逐个遍历其中的元素,对每个元素进行比较
可以二维数组,且可以有多维数组,都是在Java中合法的

当数组的初始化完成后数组在内存中所占用的空间将会被固定,即使我们清空这个数组中的元素,它所占用的空间依然会被保留。这造成了Java数组长度的不可变,选项B错误。

Java语言中,数组是一种引用类型的变量,使用它定义变量时,这个引用变量还没有指向任何有效的内存空间,因此定义数组时不能指定数组的长度。而由于这个引用变量并没有指向任何有效的内存空间,所以没有空间来存储任何元素,只有当对数组初始化后,才可以使用这个数组。D选项正确的定义方式为int[] array =new int[100]。

本题易错点是E选项,数组是一种引用数据类型,继承自Object类的,所以其中也包含了未被重写的equals()方法,所有的引用变量都能调用equals()方法来判断他是否与其他引用变量相等,使用这个方法来判断两个引用对象是否相等的判断标准与使用==运算符没有区别,只有在两个引用变量指向同一个对象才会返回true。如果想达到E选项描述的效果,需要使用Arrays.equals()方法。

🐱‍🚀选择题6

下面有关Java的说法正确的是( )

正确答案: A C D E F 你的答案: A D F (错误)
一个类可以实现多个接口
抽象类必须有抽象方法
protected成员在子类可见性可以修改
通过super可以调用父类构造函数
final的成员方法实现中只能读取类的成员变量
String是不可修改的,且java运行环境中对string对象有一个常量池保存
  • A对:java类单继承,多实现 B错:被abstract修饰的类就是抽象类,有没有抽象方法无所谓 C错:描述有问题。protected成员在子类的可见性,我最初理解是子类(不继承父类protected成员方法)获取父类被protected修饰的成员属性或方法,可见性是不可能变的,因为修饰符protected就是描述可见性的。 这道题应该是要考察子类继承父类,并重写父类的protected成员方法,该方法的可见性可以修改,这是对的,因为子类继承父类的方法,访问权限可以相同或往大了改 D对。 E错:final修饰的方法只是不能重写,static修饰的方法只能访问类的成员变量 F对。

🐱‍🚀选择题7

public class Test {
    private synchronized void a() {
    }
    private void b() {
        synchronized (this) {
        }
    }
    private synchronized static void c() {
    }
    private void d() {
        synchronized (Test.class) {
        }
    }
}
正确答案: A C 你的答案: A D (错误)
同一个对象,分别调用方法a和b,锁住的是同一个对象
同一个对象,分别调用方法a和c,锁住的是同一个对象
同一个对象,分别调用方法b和c,锁住的不是同一个对象
同一个对象,分别调用方法a、b、c,锁住的不是同一个对象
  • 同步代码块(synchronized(this),synchronized(类实例对象),锁是小括号()中的实例对象)

  • 同步非静态方法(synchronized method),锁的是当前对象的实例对象

获取类锁

  • 同步代码块(synchronized(类.class)),锁是最小括号 () 中的类对象(Class对象)

  • 同步静态方法(synchronized static method),锁是当前对象的类对象(Class 对象)

总结

  • 有线程访问对象的同步代码块时,另外的线程可以访问该对象的非同步代码块

  • 若锁住的是同一个对象,一个线程在访问对象的同步代码块时,另一个访问对象的同步代码块的线程会被阻塞。

  • 若锁住的是同一个对象,一个线程在访问对象的同步方法时,另一个访问对象的同步方法的线程会被阻塞。

  • 若锁住的是同一个对象,一个线程在访问对象的同步代码块时,另一个访问对象同步方法的线程会被阻塞,反之亦然。

  • 同一个类的不同对象的锁互不干扰

  • 类锁由于也是一种特殊的对象锁,因此表现和上述一致,而由于一个类只有一把对象锁,所以同一个类的不同对象使用类锁将会是同步的

  • 类锁和对象锁互不干扰

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。