Java选择03

21. 关于 JAVA 堆,下面说法错误的是(D)
A 所有类的实例和数组都是在堆上分配内存的
B 对象所占的堆内存是由自动内存管理系统回收
C 堆内存由存活和死亡的对象,空闲碎片区组成
D 数组是分配在栈中的

解析:这道题主要考的是Java内存堆内存和栈内存
栈内存:一般存放的是基本数据类型和引用类型的变量,创建时会在栈中分配一块内存存储变量,当变量超出它的作用域也就是不再使用时Java会自动释放这块空间用在其他地方。

堆内存:存放的是new出来的对象,比如类对象或者数组对象,他们的信息存储在堆内存中,但是会在栈内存中存储他们的引用,也就是在栈内存中存储它们的首地址,就和指针的作用类似,在程序中就可以使用栈内存中的引用访问堆内存中的数组或者对象。当new出来的对象不再使用或者超出它的作用域时不会立即释放内存,而是在一个不确定的时间段由JVM垃圾回收机制自动回收,回收的是没有引用指向的内存,也就是存储在栈内存中指向堆内存的引用不再指向堆内存。

也就是说堆上存储的是对象,栈上存储的是引用。栈内存指向堆内存。栈内存就和指针的作用很相似。

22.有关下述Java代码描述正确的选项是 F。

public class TestClass {
   private static void testMethod(){
        System.out.println("testMethod");
   }
   public static void main(String[] args) {
        ((TestClass)null).testMethod();
   }
}

A 编译不通过
B 编译通过,运行异常,报NullPointerException C 编译通过,运行异常,报IllegalArgumentException
D 编译通过,运行异常,报NoSuchMethodException
E 编译通过,运行异常,报Exception
F 运行正常,输出testMethod

解析:这里的方法是静态方法,静态方法的调用可以使用类名.方法名。静态方法的使用不依赖类的创建,而null可以强转为任意类型,所以可以通过(类名)null.方法名 来执行静态方法

23.在jdk1.5之后,下列 java 程序输出结果为 B

int i=0;
Integer j = new Integer(0);
System.out.println(i==j);
System.out.println(j.equals(i));

A true,false
B true,true
C false,true
D false,false
E 对于不同的环境结果不同
F 程序无法执行

解析:本题针对的是自动拆装箱,jdk1.5之后才出现的自动拆装箱
首先 ”== ”比较的是址,equals()比较的是值。
以下情况是不考虑new对象的
1.当基本型和封装性进行“== ” 比较时,封装型会自动拆箱为基本类型,
2.两个Integer类型进行 “ ==”比较时,如果范围在-128到127之间是true,超出这个范围就是false;
3.两个封装型进行equals()比较,首先equals()会比较类型,如果类型相同则继续比较值,如果值也相同返回true。
4.当封装型调用equals()但是参数是基本类型时,会先进行自动装箱,基本类型转换为封装型再进行3比较
5.基本类型不是引用类型所以不能调用equals()

当new了一个Integer()时,进行“ ==”比较时返回的就是false,因为这相当于在堆上重新分配了一块新的内存,进行“ == ”比较,比较的是地址,所以返回的是false。

本题中i为基本类型,j为new出的Integer类型的引用。i==j比较时j会先进行拆箱,所以就是0 == 0 结果为true;j.equals(i)i会进行装箱,equals()进行比较判断两个类型都是Integer类型,再去比较两个的值两个都是0 所以结果就是true

24.结构型模式中最体现扩展性的模式是(A)
A.装饰模式

B.合成模式

C.桥接模式

D.适配器

解析:
结构型模式是描述如何将类与对象结合在一起,形成一个更大的结构。
其中:
装饰模式 Decorator装饰模式动态是动态的给一个对象添加一些附属功能,可以理解为装饰模式是给一个对象升级加装备。装饰模式把复杂类中的一些核心功能和装饰功能区分开来了,这样既可以简化复杂类又可以消除一些相关类的重复修饰逻辑。装饰逻辑可以理解为和继承是一样的功能,就是对原有类进行扩展,但是比生成子类更加灵活。所以装饰模式可以说是继承关系的一种替代方案。

合成模式 Composite合成模式是将对象组合成一定的结构比如树状结构、层次结构。合成模式使得用户对单个对象和组合对象的使用具有一致性。

桥接模式 Bridge桥接模式就是将抽象和实现分离,让实现可以独立的变化,这样实现部分功能就可以多元化,减少耦合。

适配器 Adapter适配器模式是将类的接口进行转换,转换为用户所希望的。使得原本由于接口不兼容而不能工作的那些类可以进行交互工作。因为两个比较成熟的类需要通信,但是由于接口的原因和开闭原则我们不能直接去修改这两个类,所以就需要一个适配器来完成这样一个衔接过程。

以上参考牛客网上的评论。

25.以下声明合法的是 B

A.default String s

B.public final static native int w( )

C.abstract double d

D.abstract final double hyperbolicCosine( )

解析:
A.没有这种写法,在不写修饰符的时候是默认default,写了就会出错,在java中用到default的地方就是:
1.switch语句中使用default 使用方法:(当case里的值与switch里的key没有匹配的时候,执行default里的方法)
2.在定义接口的时候使用default来修饰具体的方法 使用方法:(default修饰的目的是让接口可以拥有具体的方法,让接口内部包含了一些默认的方法实现)

C.abstract修饰方法和类

D.abstract 和 final冲突,abstract定义的方法没有实现,必须被子类重写,而final修饰的方法不能被重写

26.下列Java代码中的变量a、b、c分别在内存的_C_存储区存放。


class A {
    private String a = “aa”;
    public boolean methodB() {
        String b = “bb”;
        final String c = “cc”;
    }
}

A.堆区、堆区、堆区

B.堆区、栈区、堆区

C.堆区、栈区、栈区

D.堆区、堆区、栈区

E.静态区、栈区、堆区

F.静态区、栈区、栈区

解析:当一个方法执行时,每个方法都会建立自己的内存栈,在这个方法内定义的变量将会逐个放入这块栈内存中,随着方法的执行结束,这个方法的内存栈也将自然销毁。因此,所有在方法中定义的局部变量都是放在栈内存中的;在程序中创建一个对象时,这个对象将被保存到运行时数据区中,以便反复利用(因为对象的创建成本通常较大),这个运行时数据区就是堆内存。堆内存中的对象不会随着方法的结束而销毁,即便方法结束后,这个对象还可能被另一个引用变量所引用(在方法中的参数传递很常见),则这个对象依然不会被销毁。只有当一个对象没有任何引用变量引用它时,系统的垃圾回收器才会在合适的时候回收它。

27.下面哪个标识符是合法的?D

A “9HelloWorld”
B “_Hello World”
C “Hello*World”
D “Hello$World”

解析:
Java中标识符是以字母、数字、下划线、美元符号($)组成。开头必须是字母、下划线、美元符号。
A.数字开头,错误。
B.有空格,错误
c.有*,错误

28.以下描述正确的是 B

A.CallableStatement是PreparedStatement的父接口

B.PreparedStatement是CallableStatement的父接口

C.CallableStatement是Statement的父接口

D.PreparedStatement是Statement的父接口

解析:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
29.下列关于容器集合类的说法正确的是?C

A LinkedList继承自List
B AbstractSet继承自Set
C HashSet继承自AbstractSet
D WeakMap继承自HashMap

解析:
如下图:虚线是接口实现,实现是父类继承
在这里插入图片描述
30.ArrayList list = new ArrayList(20);中的list扩充几次 A

A 0
B 1
C 2
D 3

解析:
ArrayList的三种构造方法:
1.ArrayList(),这是构造一个初始容量为10的空列表
2.ArrayList(Collection<? extends E> c)构造一个包含指定collection的元素的列表,这些元素是按照该collection的迭代器返回它们的顺序排列的
3.ArrayList(int initialCapacity)构造一个具有初始化容量的空列表。
这里调用的就是第三个构造函数,直接初始化为20的list,没有进行扩容操作

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值