0
点赞
收藏
分享

微信扫一扫

Java学习记录——错题总结(二十)

穆风1818 2022-04-02 阅读 28
学习java

第一套

1.以下程序段的输出结果为:

public class EqualsMethod
{
    public static void main(String[] args)
    {
        Integer n1 = new Integer(47);
        Integer n2 = new Integer(47);
        System.out.print(n1 == n2);
        System.out.print(",");
        System.out.println(n1 != n2);
    }
}

正确答案: B 你的答案: C (错误)
false,false
false,true
true,false
true,true

首先 我们要知道 = = 这个比较符号
= =可用于基本类型和引用类型:当用于基本类型时候,是比较值是否相同;当用于引用类型的时候,是比较对象是否相同。
"= =“和”!="比较的是地址 指第一个new()c出来的地址
所以因为两次new() 分出的内存也不同
所以
System.out.print(n1 == n2);返回 false
!=就返回true
所以
答案:B

有关线程的叙述正确的是()
正确答案: C D 你的答案: B C D (错误)
可以获得对任何对象的互斥锁定
通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定
线程通过使用synchronized关键字可获得对象的互斥锁定
线程调度算法是平台独立的

A,“任何对象”锁定,太绝对了,你能锁住你没有权限访问的对象吗?
B,前半句话讲的是创建线程的方式,后半句讲的是锁定,驴头不对马嘴。
C,正确。
D,线程调度分为协同式调度和抢占式调度,Java使用的是抢占式调度,也就是每个线程将由操作系统来分配执行时间,线程的切换不由线程本身来决定(协同式调度)。这就是平***立的原因。
以上,选CD

第二套

1.说明输出结果。

import java.util.Date; 
public class SuperTest extends Date{ 
    private static final long serialVersionUID = 1L; 
    private void test(){ 
       System.out.println(super.getClass().getName()); 
    } 
      
    public static void main(String[]args){ 
       new SuperTest().test(); 
    } 
}

正确答案: C 你的答案: A (错误)
SuperTest
SuperTest.class
test.SuperTest
test.SuperTest.class

C.
TestSuper和Date的getClass都没有重写,他们都是调用Object的getClass,而Object的getClass作用是返回的是运行时的类的名字。这个运行时的类就是当前类,所以
super.getClass().getName()
返回的是test.SuperTest,与Date类无关
要返回Date类的名字需要写super.getClass().getSuperclass()

2.以下关于final关键字说法错误的是()
正确答案: A C 你的答案: A D (错误)
final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性
final修饰的类肯定不能被继承
final修饰的方法不能被重载
final修饰的变量不允许被再次赋值

1.final修饰变量,则等同于常量
2.final修饰方法中的参数,称为最终参数。
3.final修饰类,则类不能被继承
4.final修饰方法,则方法不能被重写。
5.final 不能修饰抽象类
6.final修饰的方法可以被重载 但不能被重写

3.知识点
JAVA反射机制主要提供了以下哪些功能?
正确答案: A B C D 你的答案: A B C D (正确)
在运行时判断一个对象所属的类
在运行时构造一个类的对象
在运行时判断一个类所具有的成员变量和方法
在运行时调用一个对象的方法

ABCD
普通的java对象是通过new关键字把对应类的字节码文件加载到内存,然后创建该对象的。
反射是通过一个名为Class的特殊类,用Class.forName(“className”);得到类的字节码对象,然后用newInstance()方法在虚拟机内部构造这个对象(针对无参构造函数)。
也就是说反射机制让我们可以先拿到java类对应的字节码对象,然后动态的进行任何可能的操作,
包括
在运行时判断任意一个对象所属的类
在运行时构造任意一个类的对象
在运行时判断任意一个类所具有的成员变量和方法
在运行时调用任意一个对象的方法
这些都是反射的功能。
使用反射的主要作用是方便程序的扩展。

4.关于抽象类与接口,下列说法正确的有?

正确答案: A C 你的答案: C (错误)
优先选用接口,尽量少用抽象类
抽象类可以被声明使用,接口不可以被声明使用
抽象类和接口都不能被实例化。
以上说法都不对

下面比较一下两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然
eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。

5.关于Java中的数组,下面的一些描述,哪些描述是准确的:( )
正确答案: A C F 你的答案: A C E F (错误)

数组是一个对象,不同类型的数组具有不同的类
数组长度是可以动态调整的
数组是一个连续的存储结构
一个固定长度的数组可类似这样定义: int array[100]
两个数组用equals方法比较时,会逐个便利其中的元素,对每个元素进行比较
可以二维数组,且可以有多维数组,都是在Java中合法的

Object.equals()比较的是两个数组的地址,相当于==的作用,如果是遍历数组中的元素,进行一一比较,应该选择Arrays.equals()

6.以下哪种JAVA得变量声明方式可以避免程序在多线程竞争情况下读到不正确的值( )
正确答案: A B 你的答案: B C D (错误)
volatile
static volatile
synchronized
static

synchronized不是修饰变量的 它修饰方法或代码块或对象

第三套

1.try块后必须有catch块。()

正确答案: B 你的答案: A (错误)
正确
错误
选B,catch可以省略,try的形式有三种:
try-catch
try-finally
try-catch-finally
但catch和finally语句不能同时省略!

2.以下代码输出的是:

public class SendValue{
    public String str="6";
    public static void main(String[] args) {
        SendValue sv=new SendValue();
        sv.change(sv.str);
        System.out.println(sv.str);
    }
    public void change(String str) {
        str="10";
    }
}

正确答案: A 你的答案: B (错误)
6
10
都不对
16

Java中String类型变量是immutable(不可变的)。
尽管 change()方法中的str与sv.str都是新的对象实例成员变量值"6"的引用, 由于String类型的 不可变 性,change()方法中的str="10"语句实际上是将传入的str副本引用指向了一个值为“10”的新的内存地址,但 原数据引用 sv.str的引用值(也就是“6”的内存地址) 并没有发生改变,因此sv.str指向的值仍旧为6.

3.下列哪个说法是正确的()
正确答案: D 你的答案: A (错误)
ConcurrentHashMap使用synchronized关键字保证线程安全
HashMap实现了Collction接口
Array.asList方法返回java.util.ArrayList对象
SimpleDateFormat是线程不安全的

选D。

A选项中,ConcurrentHashMap 使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安全。

B中,HashMap定义规则如下:

public class HashMap<K,V>
    extends AbstractMap<K,V>
    implements Map<K,V>, Cloneable, Serializable

C中,应该是Arrays.asList(),其将一个数组转化为一个List对象,这个方法返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是Arrays类的内部类: Arrays.ArrayList类型

举报

相关推荐

0 条评论