写目录
题目
选自牛客网
1.有如下4条语句:()
Integer i01=59;
int i02=59;
Integer i03=Integer.valueOf(59);
Integer i04=new Integer(59);
以下输出结果为false的是:
A.System.out.println(i01== i02);
B.System.out.println(i01== i03);
C.System.out.println(i03== i04);
D.System.out.println(i02== i04);
正确答案是 C. System.out.println(i03 == i04)。 在 Java 中,Integer.valueOf
方法返回一个 Integer 对象,该对象包装了指定的 int 值。当使用 == 比较两个 Integer
对象时,它比较的是引用而不是值。i03 和 i04 是两个不同的 Integer 对象,尽管它们的值相同,但它们的引用不同。因此,i03
== i04 的结果为 false。 其他选项比较的是值,因此结果为 true。A 选项比较的是 int 值和 Integer 对象的值,B 选项比较的是 Integer 对象和 int 值,D 选项比较的是 int 值和 Integer 对象的值。在 Java
中,可以自动拆箱(Integer 对象转换为 int),因此这些比较返回 true。
2.以下描述错误的一项是( )?
A.程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行 到了第几行,是线程隔离的
B.原则上讲,所有的对象都是在堆区上分配内存,是线程之间共享的
C.方法区用于存储JVM加载的类信息、常量、静态变量,即使编译器编译后的代码等数据,是线程隔离的
D.Java方法执行内存模型,用于存储局部变量,操作数栈,动态链接,方法出口等信息,是线程隔离的
正确答案是 C. 方法区用于存储 JVM 加载的类信息、常量、静态变量,即使编译器编译后的代码等数据,是线程隔离的。 方法区(MethodArea)是 JVM中用于存储类信息、常量、静态变量等数据的区域,但它不是线程隔离的。方法区是所有线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量以及编译后的代码等数据。这些数据对于所有线程都是可见的,并且可以被所有线程共享。
因此,C 选项的描述是错误的。 程序计数器(Program Counter
Register)用于指示当前线程所执行的字节码执行到了第几行,它是一个比较小的内存区域,用于存储线程的执行位置。堆区(Heap)是用于存储所有对象的内存区域,所有的对象都在堆上分配内存。
Java 方法执行内存模型(Method Area)用于存储局部变量、操作数栈、动态链接、方法出口等信息,这些信息是线程隔离的。每个线程都有自己的方法执行内存模型。
3.下列在Java语言中关于数据类型和包装类的说法,正确的是()
A.基本(简单)数据类型是包装类的简写形式,可以用包装类替代基本(简单)数据类型
B.long和double都占了64位(64bit)的存储空间。
C.默认的整数数据类型是int,默认的浮点数据类型是float。
D.和包装类一样,基本(简单)数据类型声明的变量中也具有静态方法,用来完成进制转化等。
正确答案是 B. long 和 double 都占了 64 位(64bit)的存储空间。 在 Java 中,基本数据类型包括
byte、short、int、long、float、double、char、boolean,而 Long、Double、Integer
等是它们对应的包装类。基本数据类型是包装类的简写形式,但它们之间有一些区别。例如,基本数据类型不能为 null,而包装类可以为
null。因此,A 选项是错误的。 long 和 double 都占了 64 位的存储空间,这是 Java
中的数据类型定义所决定的。默认的整数数据类型是 int,但默认的浮点数据类型是 double,而不是 float。因此,C 选项是错误的。
基本数据类型没有静态方法来完成进制转化等操作,这些操作通常由包装类提供。因此,D 选项是错误的。
4.StringBuffer类对象创建之后可以再修改和变动.
A.正确
B.错误
正确答案:A
5.关于 访问权限说法正确 的是 ? ( )
A.外部类定义前面可以修饰public,protected和private
B.局部内部类前面可以修饰public,protected和private
C.匿名内部类前面可以修饰public,protected和private
D.以上说法都不正确
正确答案是 D. 以上说法都不正确。 在 Java 中,外部类、局部内部类和匿名内部类都可以使用 public、protected 和
private 修饰符。但是,匿名内部类不能使用 private 和 protected修饰符,因为它们没有名字,所以无法被外部类访问。因此,C 选项是错误的。
外部类可以使用 public、protected 和 private修饰符来控制其他类对它的访问。局部内部类也可以使用这些修饰符,但它们只能在当前类中访问。匿名内部类由于没有名字,因此无法被外部类访问,所以不需要使用修饰符。
6.如下代码的输出是
package Test;
public class Test {
private static void test(int[] arr) {
for (int i = 0; i < arr.length; i++) {
try {
if (arr[i] % 2 == 0) {
throw new NullPointerException();
} else {
System.out.print(i);
}
} finally {
System.out.print(“e”);
}
}
}
public static void main(String[]args) {
try {
test(new int[] {0, 1, 2, 3, 4, 5});
} catch (Exception e) {
System.out.print("E");
}
}
}
可以得到的结论是( )
A.编译出错
B.eE
C.Ee
D.eE1eE3eE5
E.Ee1Ee3Ee5
正确答案:B 在 main 方法中,我们调用 test 方法并传递了一个 int 数组 {0, 1, 2, 3, 4, 5}。在 test
方法中,我们遍历数组并检查每个元素是否为偶数。如果元素为偶数,我们抛出一个 NullPointerException。在 for 循环的
finally 块中,我们总是打印 “e”。因此,对于偶数元素,会先打印 “e”,然后抛出异常并跳转到 catch 块。
对于奇数元素,只打印 “e”。因此,输出将是 “eE1eE3eE5”。
知识点
1.基本类型存储在栈里,包装类型存储在堆里。因为栈的效率更高,所以保留了基本类型。
这个说法是正确的。在 Java 中,基本数据类型(如 int、double、char 等)的值直接存储在栈中,而包装类(如 Integer、Double、Character 等)的对象存储在堆中。栈的访问速度通常比堆快,因此使用基本数据类型可以提高性能。这也是 Java 保留基本数据类型的原因之一。
2.包装类是对象,拥有方法和字段,对象的调用是引用对象的地址。
这个说法也是正确的。包装类是对象,它们拥有方法和字段,而基本数据类型没有。当我们使用包装类时,实际上是引用了堆中的对象地址,而不是直接操作值。这意味着我们可以使用包装类的方法和字段,而不能直接操作基本数据类型的值。
3.基本类型是值传递,包装类是引用传递。
这个说法是正确的。当我们传递基本数据类型作为参数时,传递的是值的副本,而当我们传递引用类型(如包装类)时,传递的是引用的副本。这意味着如果我们修改了传递的基本数据类型的值,原始值不会改变,而如果我们修改了引用类型的值,原始值会被改变。
4.向 ArrayList,LinkedList 中放数据的时候,只能放 Object 类型的,基本类型放不进去。
这个说法是错误的。ArrayList 和 LinkedList 都实现了 List 接口,它们可以存储任何类型的对象,包括基本数据类型和包装类。实际上,当我们向这些集合中添加基本数据类型时,它们会被自动装箱为相应的包装类对象。例如,当我们向 ArrayList 中添加 int 值时,实际上添加的是 Integer 对象。
5.包装类的默认值为 Null。
这个说法是正确的。包装类的默认值为 null,因为它们是对象引用。在声明包装类变量时,如果没有初始化,它们的值默认为 null。而基本数据类型的默认值取决于数据类型,例如 int 的默认值为 0,boolean 的默认值为 false 等。
6.内部静态类
(1)静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似;
(2)不能使用外部类的非static成员变量或者方法
解析:静态内部类(Static Nested Class)是 Java 中的一种特殊类型的内部类,它使用 static 关键字修饰。与成员内部类不同,静态内部类不需要依赖于外部类的对象就可以被实例化。它可以访问外部类的静态成员,但不能直接访问外部类的非静态成员。如果要访问外部类的非静态成员,需要通过外部类的对象引用。静态内部类类似于外部类的一个静态成员,它可以有自己的构造方法、成员变量和方法。