每日一题Day2

1.A 派生出子类 B , B 派生出子类 C ,并且在 java 源代码有如下声明:

  1. A a0=new A();
  2. A a1=new B();
  3. A a2=new C();

问以下哪个说法是正确的?(D)
A 只有第一行能通过编译
B 第1、2行能通过编译,但第3行编译出错
C 第1、2、3行能通过编译,但第2、3行运行时出错
D 第1行,第2行和第3行的声明都是正确的

2.下面代码将输出什么内容:()

public class SystemUtil{
public static boolean isAdmin(String userId){
return userId.toLowerCase()=="admin";
}
public static void main(String[] args){
System.out.println(isAdmin("Admin"));
}
}

答案:false
解析:char toLowerCase(char ch):方法用于将大写字符转换为小写。 从源码中我们可以发现,toLowerCase方法会重新new一个对象,所以导致了,不是同一个对象,返回false。而如果这里不使用“=="而使用"equals"方法去比较的话,则会返回true。

3.阅读如下代码。 请问,对语句行 test.hello(). 描述正确的有(A)

package NowCoder;
class Test {
public static void hello() {
System.out.println("hello");
}
}
public class MyApplication {
public static void main(String[] args) {
// TODO Auto-generated method stub
Test test=null;
test.hello();
}
}

A 能编译通过,并正确运行
B 因为使用了未初始化的变量,所以不能编译通过
C 以错误的方式访问了静态方法
D 能编译通过,但因变量为null,不能正常运行
解析:
因为Test类的hello方法是静态的,所以是属于类的,
当实例化该类的时候,静态会被优先加载而且只加载一次;
并且不受实例化new Test();语句影响,只要是使用到了Test类,都会加载静态hello方法!
另外,在其他类的静态方法中也是可以调用公开的静态方法,此题hello方法是使用public修饰的所以在MyApplication中调用hello也可以。
总结:
在Test test=null;中会加载静态方法,所以test数据中包含Test类的静态初始化数据,但是test并不能调用该类的非静态数据。

  1. 在使用super和this关键字时,以下描述正确的是()

A 在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
B super()和this()不一定要放在构造方法内第一行
C this()和super()可以同时出现在一个构造函数中
D this()和super()可以在static环境中使用,包括static方法和static语句块
答案:A
解析:super(),this()和super,this关键字不是一个概念,
前者是在构造器之间相互调用的语法,后者是代之父类或者本类的对象。每个构造器默认的第一行都是super(),但是有的时候父类没有无参构造,那就必须在子类构造的第一行显式的声明要调用哪个构造器。
this()和super()都必须出现在构造器的第一行,所以两者不可能出现在同一个构造器中。
this和super都不能出现在静态方法、静态块中。
为什么要放置在第一行?
1、super()防止子类后面调用父类属性,在第一行初始化父类;
2、this()其自带调用super(),出现第一行,保证父类初始化的唯一性,不然会多次重复初始化

5.如下代码的 结果是什么 ?

class Base {
Base() {
System.out.print("Base");
}
}
public class Alpha extends Base {
public static void main( String[] args ) {
new Alpha();
//调用父类无参的构造方法
new Base();
}
}

答案:BaseBase

6.如下代码的输出结果是什么?

public class Test {
public int aMethod(){
static int i = 0;
i++;
return i;
}
public static void main(String args[]){
Test test = new Test();
test.aMethod();
int j = test.aMethod();
System.out.println(j);
}
}

答案:编译失败
解析:静态变量又称为“类变量”,始终跟类联系在一起,只能定义在类主体里,不能定义在方法中,即便是静态方法也不行。
static的任何都是先于类而加载的。

  1. 下列哪一种叙述是正确的(D)

A abstract修饰符可修饰字段、方法和类
B 抽象方法的body部分必须用一对大括号{ }包住
C 声明抽象方法,大括号可有可无
D 声明抽象方法不可写出大括号
解析:抽象方法不能拥有方法体,即不能写出代表代码块的{}大括号。
A 不能修饰字段,可以有抽象类和抽象方法
B 抽象方法不能有body部分,只能在子类中覆写
C 声明时大括号不能有,覆写时要补全方法体。

8.下列说法正确的有:(C)
A class中的constructor不可省略
B constructor必须与class同名,但方法不能与class同名
C constructor在一个对象被new 时执行
D 一个class只能定义一个constructor

9.选项中哪一行代码可以替换 //add code here 而不产生编译错误

public abstract class MyClass {
public int constInt = 5;
//add code here
public void method() {
}
}

A public abstract void method(int a);
B consInt=constInt+5;
C public int method();
D public abstract void anotherMethod(){}
答案:A
解析:
A:抽象类可以包含抽象方法
B:类中定义成员和方法,不能直接进行运算,可以写在代码块{}或者静态代码块中static{}中
C: 与第四行想要构成重载,二者区别是返回类型,但是返回类型不能作为重载的依据
D: 该方法使用abstract修饰,是抽象方法,但是他有方法体(带有{}的就是方法体,即使里面是空的),就不能作为抽象方法

10.java 中哪个关键字可以对对象加互斥锁(B)
A transient
B synchronized
C serialize
D static

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值