错题集()

1、构造方法不能被子类继承,所以用final修饰没有意义。构造方法用于创建一个新的对象,不能用静态方法,所以用static修饰没有意义。此外,Java语言不支持native或synchronize的构造方法。

2、在开发中使用泛型取代非泛型的数据类型(比如用ArrayList取代ArrayList),程序运行时的性能会变得更好。 (X)
泛型是程序设计语言的一种特性。允许程序员在强类型程序设计语言中编写代码时定义一些可变部分,那些部分在使用前必须作出指明。各种程序设计语言和其编译器、运行环境对泛型的支持均不一样。将类型参数化以达到代码复用提高软件开发工作效率的一种数据类型。泛型类是引用类型,是堆对象,主要是引入了类型参数这个概念。*
Java 的泛型
Java 泛型的参数只可以代表类,不能代表个别对象。由于 Java 泛型的类型参数之实际类型在编译时会被消除,所以无法在运行时得知其类型参数的类型。Java 编译器在编译泛型时会自动加入类型转换的编码,故运行速度不会因为使用泛型而加快。Java 允许对个别泛型的类型参数进行约束,包括以下两种形式(假设 T 是泛型的类型参数,C 是一般类、泛类,或是泛型的类型参数):T 实现接口 I 。T是C,或继承自 C。一个泛型类不能实现Throwable接口。
*
C++ 的泛型(模板)
C++ 无法对泛型的类型参数进行约束。在编译时,每个被使用的封闭泛型类型(即是所有泛型参数的实际类型都已被指明的泛型)都会有独立的编码产生,编译器会在此时确保类型安全性。可是如果泛型要运用其泛型参数的某成员,而该泛型参数又不包含该成员的时候,编译器所产生的错误信息会看似与实际问题无关,增加出错的难度。
(360百科)

3、如果一个list初始化为{5,3,1},执行以下代码后,其结果为()?

nums.add(6);
nums.add(0,4);
nums.remove(1);

第一步,在末尾加个6 {5,3,1,6}
第二步,在0号索引加个4 {4,5,3,1,6}
第三步,将1号索引上的5移除 {4,3,1,6}

4、根据以下代码段,下列说法中正确的是( )。

public class Parent {
    private void m1(){}
    void m2(){}
    protected void m3(){}
    public static void m4(){}
}

子类中一定能够继承和覆盖Parent类的m1方法
子类中一定能够继承和覆盖Parent类的m2方法
子类中一定能够继承和覆盖Parent类的m3方法 (√)
子类中一定能够继承和覆盖Parent类的m4方法
(解答存疑)

5、写出代码执行后的结果

public class Test {
    public static void main(String [] args){
        System.out.println(new B().getValue());
    }
    static class A{
        protected int value;
        public A(int v) {
            setValue(v);
        }
        public void setValue(int value){
            this.value = value;
        }
        public int getValue(){
            try{
                value++;
                return value;
            } catch(Exception e){
                System.out.println(e.toString());
            } finally {
                this.setValue(value);
                System.out.println(value);
            }
            return value;
        }
    }
    static class B extends A{
        public B() {
            super(5);
            setValue(getValue() - 3);
        }
        public void setValue(int value){
            super.setValue(2 * value);
        }
    }
}

main方法new个B,调用getvalue()
B的构造方法
调用父类A的构造方法,setvalue得5
因为在B的构造方法里,所以调用B的setvalue方法,再调A的setvalue得A的成员变量10
B中的super(5)完事,接着setvalue(getvalue()-3),B无getvalue,用A的getvalue,走try,10变11,返回11。catch不到,走finally,this.setValue(value)的this是B类的,然后再调A的setvalue得22,输出value,22
然后 setValue(getValue() - 3)里的setvalue,因为getvalue先try返回了11,所以值为11-3=8
到了super.setvalue(2*8),Asetvalue(16)
到这new B结束

接着getvalue,B无,找A的
A.getvalue,16变17返回 finally同上,输出value,34
最后输出getvalue返回来的17

即22,34,17

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值