【340天】我爱刷题系列099(2018.01.11)

叨叨两句

  1. ~

牛客网——java专项练习078

1

类Parent和Child定义以下:java

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){ }eclipse

方法重写应遵循“三同一小一大”原则:
“三同”:即方法名相同,形参列表相同,返回值类型相同;
“一小”:子类方法声明抛出的异常比父类方法声明抛出的异常更小或者相等;
“一大”:子类方法的访问修饰符应比父类方法更大或相等。

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 -1
B -2
C 0
D 1spa

易知:每一个线程对a 均作了两次读写操做,分别是 “ +1 ” 和 “ -2 ”
而题目问了是最终a 的结果,因此 a 的结果取决于各自线程对 a 的前后读写的顺序
结论:a的可能取值为-一、0、-2

假设两线程为A、B,设有3种状况:
1.AB不并发:此时至关于两个方法顺序执行。A执行完后a=-1,B使用-1做为a的初值,B执行完后a=-2
2.AB彻底并发:此时读写冲突,至关于只有一个线程对a的读写最终生效。相同于方法只执行了一次。此时a=-1
3.AB部分并发:假设A先进行第一次读写,获得a=1;以后A的读写被B覆盖了。B使用用1做为a的初值,B执行完后a=0

3

若须要定义一个类,下列哪些修饰符是容许被使用的?( )
正确答案: A C D 你的答案: A D (错误)
A static
B package
C private
D public线程

这题只说定义一个类,可是没有说这个类是普通外部类或者内部类。
由于普通类也就是外部类,经过 eclipse 的警告“Illegal modifier for the class Test; only public, abstract & final are permitted” 可知只能用 public, abstract 和 final 修饰。
内部类则能够用 修饰成员变量的修饰符修饰内部类,好比 private, static, protected 修饰。