精进日常:每日练习与取舍智慧的艺术之道

目录

  • 题目
  • 1.对于非运行时异常,程序中一般可不做处理,由java虚拟机自动进行处理。
  • 2.下面哪个关键字可以用于Java的构造方法上?
  • 3.以下代码执行的结果显示是多少( )?
  • 注解
  • 总结
  • 题目

    选自牛客网

    1.对于非运行时异常,程序中一般可不做处理,由java虚拟机自动进行处理。

    A.正确
    B.错误
    正确答案:B

    在Java中,非运行时异常(也称为编译时异常或checked
    exceptions)是通过java.lang.Exception类及其子类来定义的,但不包括java.lang.RuntimeException及其子类。非运行时异常通常表示应用程序的外部错误,如输入/输出错误或网络错误,这些错误是应用程序可以预见并应该处理的。

    对于非运行时异常,程序必须显式处理它们。这意味着,要么在方法中捕获并处理这些异常,要么在方法签名中通过throws关键字声明这些异常,表明调用者需要处理它们。这是Java的编译时检查机制的一部分,目的是强制程序员在编写代码时就考虑到可能发生的异常情况,并提供相应的处理逻辑,以增强代码的健壮性和可维护性。

    因此,选项B“错误”是正确的。程序中对于非运行时异常不能不做处理,而应该由开发者通过异常处理机制来管理,而不是依赖于Java虚拟机(JVM)自动处理。JVM会自动处理的是运行时异常(unchecked exceptions),这些异常通常是编程错误,如空指针异常、数组越界异常等,它们在编译时不需要声明,但在运行时由JVM捕获并处理。

    2.下面哪个关键字可以用于Java的构造方法上?

    A.final
    B.static
    C.synchronized
    D.native
    E.None of these.

    正确答案:E
    构造方法不能被子类继承,所以用final修饰没有意义。构造方法用于创建一个新的对象,不能作为类的静态方法,所以用static修饰没有意义。此外,Java语言不支持native或synchronized的构造方法。

    3.以下代码执行的结果显示是多少( )?

    A.true,false,true
    B.false,true,false
    C.true,true,false
    D.false,false,true

    正确答案:D
    在 Java中,当我们使用基本数据类型和它们对应的包装类时,会涉及到自动装箱和自动拆箱的过程。自动装箱是指将基本数据类型自动转换为它们对应的包装类类型,而自动拆箱则是相反的过程。

    在上述代码中,当我们将两个 Integer 对象进行比较时,使用了 “" 运算符。如果两个对象的引用地址相同,"” 运算符将返回 true,否则返回 false。
    在 Java 中,对于 -128 到 127 之间的整数,JVM 会自动缓存这些整数的 Integer对象,以便于节省内存和提高性能。这意味着,当我们在代码中使用自动装箱将一个整数转换为 Integer 对象时,如果这个整数在 -128 到127 之间,JVM 将返回缓存中的同一个 Integer 对象的引用,而不是创建一个新的 Integer 对象。因此,当我们比较两个这样的Integer 对象时,“==” 运算符将返回 true。

    但是,如果我们将两个大于 127 的整数进行比较,JVM 将创建两个不同的 Integer
    对象,即使它们的值相同。因此,当我们比较两个这样的 Integer 对象时,“==” 运算符将返回 false。例如,如果我们有以下代码:

    System.out.println(i5 == i6); // 输出 false ```
    
    在这种情况下,我们使用 "new" 关键字显式创建了两个不同的 Integer 对象,因此它们的引用地址不同,"==" 运算符将返回
    false。如果我们要比较两个 Integer 对象的值,而不是它们的引用地址,我们应该使用 equals() 方法,而不是 "=="
    运算符。例如:
    
    ```java Integer i5 = new Integer(100); Integer i6 = new Integer(100);
    System.out.println(i5.equals(i6)); // 输出 true ```
    
    在这种情况下,我们将两个 Integer 对象的值进行比较,而不是它们的引用地址,因此 equals() 方法将返回 true。
    

    4.Which statement declares a variable a which is suitable for referring to an array of 50 string objects?
    下面哪个Java语句声明了一个适合于创建50个字符串对象数组的变量?
    A.char a[][];
    B.String a[];
    C.String[] a;
    D.Object a[50];
    E.String a[50];
    F.Object a[];

    正确答案:BCF 在 Java 中,声明数组变量的语法是在数据类型后面加上一对方括号。例如,声明一个 int
    类型的数组变量,可以写为 “int[] arr” 或者 “int arr[]”,这两种写法是等价的。因此,选项 B 和 C
    都可以正确声明一个字符串数组变量,其中选项 B 使用了后置方括号,选项 C 使用了前置方括号。 选项 F 也可以正确声明一个 Object
    类型的数组变量,但是它没有指定数组的大小。如果要指定数组的大小,可以使用以下语法: Object[] arr = new Object[50];

    这样就创建了一个长度为 50 的 Object 类型的数组。 选项 A、D 和 E 都不是正确的声明字符串数组变量的语法。选项 A
    声明了一个二维字符数组变量,选项 D 声明了一个长度为 50 的 Object 类型数组变量,但是没有指定数组的类型,选项 E
    声明了一个长度为 50 的 String 类型数组变量,但是没有使用方括号来表示数组。

    5.Stack通常是指“先进先出”的容器。( )

    A.正确
    B.错误
    正确答案:B

    Stack(栈)实际上是一种遵循“后进先出”(Last In, First
    Out,简称LIFO)原则的数据结构。这意味着最后进入栈的元素将是第一个被取出的。这种数据结构在计算机科学中非常常见,用于各种场景,如函数调用的管理、表达式求值、回溯算法等。


    6.Java语言中,下面哪个语句是创建数组的正确语句?( )
    A.float f[][] = new float[6][6];
    B.float []f[] = new float[6][6];
    C.float f[][] = new float[][6];
    D.float [][]f = new float[6][6];
    E.float [][]f = new float[6][];
    正确答案:ABDE

    在Java中,数组的声明和创建可以采用不同的语法,但是每种语法都有其特定的规则。下面是对每个给出选项的分析:

    A. float f[][] = new float[6][6];

  • 这是二维数组的声明和创建。数组f是一个浮点数的二维数组,它有6行6列。
  • B. float []f[] = new float[6][6];

  • 这是另一种声明二维数组的方法。数组f同样是一个浮点数的二维数组,它有6行6列。
  • D. float [][]f = new float[6][6];

  • 这与A选项的语法相同,只是数组的声明和创建在不同的行。数组f是一个浮点数的二维数组,它有6行6列。
  • E. float [][]f = new float[6][];

  • 这种语法创建的是一个“数组的数组”。数组f是一个包含6个元素的一维数组,每个元素都是一个浮点数数组(即列数组)。这种情况下,列数组的长度可以是不同的。但是,如果所有列数组的长度都相同,例如在创建时就初始化,那么它等价于创建一个标准的二维数组。
  • C. float f[][] = new float[][6];

  • 这个语句是不合法的,因为Java中数组的大小必须在创建时指定。这里的语法尝试创建一个未知长度的数组,然后为每一行指定一个固定长度,这在Java中是不允许的。
  • 因此,正确答案是ABDE,它们都是合法的创建二维数组的语句。C选项是不合法的,因为它尝试使用一个不被支持的语法来创建数组。


    注解

    在Java中,@Override, @Deprecated, 和 @SuppressWarnings 是三个非常重要的注解,它们分别用于不同的目的:

    1. @Override注解

    2. 这个注解用于方法声明上,表示当前方法覆盖了超类中的一个方法。
    3. 如果一个方法被错误地标注了@Override(例如,方法的签名与超类中的方法不匹配,或者超类中不存在该方法),那么编译器将抛出一个错误。
    4. @Deprecated注解

    5. 用于标记类、方法、构造器或字段为过时,不鼓励使用。
    6. 当代码中使用了@Deprecated标记的元素时,编译器会发出警告。
    7. 这个注解通常用于表明某个API或功能在未来可能被移除,或者有更优的替代方案。
    8. @SuppressWarnings注解

    9. 这个注解用于抑制编译器的警告信息。
    10. 它可以接受一个或多个字符串参数,每个字符串参数对应一种警告类型。
    11. 例如,@SuppressWarnings("unchecked")用于抑制与泛型类型检查相关的警告。
    12. 虽然使用这个注解可以避免编译时的警告,但它也可能掩盖潜在的问题,因此应谨慎使用。

    下面是这三个注解的使用示例:

    // 使用 @Override 注解
    class BaseClass {
        public void method() {
            // 方法实现
        }
    }
    
    class DerivedClass extends BaseClass {
        @Override
        public void method() {
            // 覆盖方法的实现
        }
    }
    
    // 使用 @Deprecated 注解
    class SomeClass {
        @Deprecated
        public void deprecatedMethod() {
            // 已废弃的方法实现
        }
    }
    
    // 使用 @SuppressWarnings 注解
    class SuppressingWarnings {
        @SuppressWarnings("unchecked")
        public void method() {
            List<String> list = (List<String>) new ArrayList(); // 抑制类型检查警告
        }
    }
    

    这些注解的使用可以提高代码的可读性和可维护性,同时也能帮助开发者更好地管理代码中的API使用和潜在的编译时警告。

    总结


    坚持有所为,有所不为。

    作者:布说在见

    物联沃分享整理
    物联沃-IOTWORD物联网 » 精进日常:每日练习与取舍智慧的艺术之道

    发表回复