牛客java选择题每日打卡Day23
👩💻博客主页:京与旧铺的博客主页
✨欢迎关注🖱点赞🎀收藏⭐留言✒
🔮本文由京与旧铺原创,csdn首发!
😘系列专栏:java学习
👕参考网站:牛客网
💻首发时间:🎞2022年7月10日🎠
🎨你做三四月的事,八九月就会有答案,一起加油吧
🀄如果觉得博主的文章还不错的话,请三连支持一下博主哦
🎧最后的话,作者是一个新人,在很多方面还做的不好,欢迎大佬指正,一起学习哦,冲冲冲
💬推荐一款模拟面试、刷题神器👉
🛒导航小助手🎪
牛客java选择题每日打卡Day23🛒导航小助手🎪🐱🚀选择题1正确答案: A D 你的答案: B D (错误)🐱🚀选择题2正确答案: A C 你的答案: A C D (错误)🐱🚀选择题3正确答案: A B C D 你的答案: B C D (错误)🐱🚀选择题4正确答案: A B C D 你的答案: B D (错误)🐱🚀选择题5正确答案: A C F 你的答案: C D E (错误)🐱🚀选择题6正确答案: A C D E F 你的答案: A D F (错误)🐱🚀选择题7正确答案: A C 你的答案: A D (错误)
🐱🚀选择题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
🐱🚀选择题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 对象)
总结
-
有线程访问对象的同步代码块时,另外的线程可以访问该对象的非同步代码块
-
若锁住的是同一个对象,一个线程在访问对象的同步代码块时,另一个访问对象的同步代码块的线程会被阻塞。
-
若锁住的是同一个对象,一个线程在访问对象的同步方法时,另一个访问对象的同步方法的线程会被阻塞。
-
若锁住的是同一个对象,一个线程在访问对象的同步代码块时,另一个访问对象同步方法的线程会被阻塞,反之亦然。
-
同一个类的不同对象的锁互不干扰
-
类锁由于也是一种特殊的对象锁,因此表现和上述一致,而由于一个类只有一把对象锁,所以同一个类的不同对象使用类锁将会是同步的
-
类锁和对象锁互不干扰
- 点赞
- 收藏
- 关注作者
评论(0)