叨叨两句
- ~
牛客网——java专项练习078
1
类Parent和Child定义如下:
1 .class Parent{2. public float aFun(float a, float b) { }3 .}4 .class Child extends Parent{5 .6 .}
将以下哪种方法插入行5是不合法的。( )
正确答案: A
A float aFun(float a, float b){ }B public int aFun(int a, int b) { }C public float aFun(float p, float q){ }D private int aFun(int a, int b){ }方法重写应遵循“三同一小一大”原则:“三同”:即方法名相同,形参列表相同,返回值类型相同;“一小”:子类方法声明抛出的异常比父类方法声明抛出的异常更小或者相等;“一大”:子类方法的访问修饰符应比父类方法更大或相等。A选项是重写,但是默认访问修饰符比父类小,插入第五行编辑器会报错。B、D不是重写。因为形参列表和返回值类型不同,不满足“三同”。所以写在第五行以普通方法对待,插入第五行没有错误。C选项满足重写的各项条件,是正确的重写,所以插入第五行没有错误
2
假设 a 是一个由线程 1 和线程 2 共享的初始值为 0 的全局变量,则线程 1 和线程 2 同时执行下面的代码,最终 a 的结果不可能是()
boolean isOdd = false;for(int i=1;i<=2;++i){if(i%2==1)isOdd = true;else isOdd = false;a+=i*(isOdd?1:-1);}
正确答案: D
A -1B -2C 0D 1易知:每个线程对a 均做了两次读写操作,分别是 “ +1 ” 和 “ -2 ”而题目问了是最终a 的结果,所以 a 的结果取决于各自线程对 a 的先后读写的顺序结论:a的可能取值为-1、0、-2
假设两线程为A、B,设有3种情况:1.AB不并发:此时相当于两个方法顺序执行。A执行完后a=-1,B使用-1作为a的初值,B执行完后a=-22.AB完全并发:此时读写冲突,相当于只有一个线程对a的读写最终生效。相同于方法只执行了一次。此时a=-13.AB部分并发:假设A先进行第一次读写,得到a=1;之后A的读写被B覆盖了。B使用用1作为a的初值,B执行完后a=0
3
若需要定义一个类,下列哪些修饰符是允许被使用的?( )
正确答案: A C D 你的答案: A D (错误)A staticB packageC privateD public这题只说定义一个类,但是没有说这个类是普通外部类或者内部类。因为普通类也就是外部类,通过 eclipse 的警告“Illegal modifier for the class Test; only public, abstract & final are permitted” 可知只能用 public, abstract 和 final 修饰。内部类则可以用 修饰成员变量的修饰符修饰内部类,比如 private, static, protected 修饰。