Java习题5
1. A 派⽣出⼦类 B , B 派⽣出⼦类 C ,并且在 java 源代码有如下声明:
A a0=new A();
A a1=new B();
A a2=new C();
问以下哪个说法是正确的?(D)
A 、只有第⼀⾏能通过编译
B 、第1、2⾏能通过编译,但第3⾏编译出错
C 、第1、2、3⾏能通过编译,但第2、3⾏运⾏时出错
D 、第1⾏,第2⾏和第3⾏的声明都是正确的
解析:
2. 下⾯代码将输出什么内容:(B)
public class SystemUtil{
public static boolean isAdmin(String userId){
LowerCase()=="admin";
}
public static void main(String[] args){
System.out.println(isAdmin("Admin"));
}
}
A、 true
B 、false
C 、1
D 、编译错误
解析:
== 基本数据类型⽐较值,引⽤类型⽐较是否指向同⼀地址,
equals 默认是⽐较对象的,先⽐较地址,在⽐较类型,在⽐较值。
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();
}
}
解析:
⾸先static静态⽅法或者说类⽅法不依赖于对象,因此哪怕没有创造出对象代码依旧可以进⾏。
在定义类时,只是通知编译器需要准备多⼤的内存空间,并没有为它分配内存空间。只有⽤类创建了对象(new)后,才会真正占⽤内存空间。
类在声明时会被加载,static语句/成员变量/构造函数也会因此声明执⾏。
4. 在使⽤super和this关键字时,以下描述正确的是(A)
A、 在⼦类构造⽅法中使⽤super()显⽰调⽤⽗类的构造⽅法,super()必须写在⼦类构造⽅法的第⼀
⾏,否则编译不通过
B、 super()和this()不⼀定要放在构造⽅法内第⼀⾏
C 、this()和super()可以同时出现在⼀个构造函数中
D 、this()和super()可以在static环境中使⽤,包括static⽅法和static语句块
解析:
1. super(),this()和super,this关键字不是⼀个概念,前者是在构造器之间相互调⽤的语法,后者是代
之⽗类或者本类的对象。
2. 每个构造器默认的第⼀⾏都是super(),但是有的时候直接⽗类的没有⽆参构造,那么就必须在⼦类构造的第⼀⾏显式的声明要调⽤哪个构造器。
3. this()和super()都必须出现在构造器的第⼀⾏,所以两者不可能出现在同⼀个构造器中
4. this和super都不能出现了静态⽅法、静态块中
5. 如下代码的 结果是什么 ? (B)
class Base {
Base(){
System.out.print("Base");
}
}
public class Alpha extends Base {
public static void main( String[] args ){
new Alpha();
//调⽤⽗类⽆参的构造⽅法
new Base();
}
}
A 、Base
B 、BaseBase
C 、编译失败
D 、代码运⾏但没有输出
E 、运⾏时抛出异常
解析:
在执⾏new Alpha()时,会先执⾏⽗类的构造⽅法,在执⾏相应的⼦类的构造⽅法,所以此处会打印Base,在执⾏new Base()时,会直接执⾏Base中⽆参构造器的代码,再输出Base。
6. 如下代码的输出结果是什么? (D)
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);
}
}
A、 0
B 、1
C 、2
D 、编译失败
解析:
Java中静态变量只能在类主体中定义,不能在⽅法中定义。 静态变量属于类所有⽽不属于⽅法。
7. 下列哪⼀种叙述是正确的(D)
A、 abstract修饰符可修饰字段、⽅法和类
B 、抽象⽅法的body部分必须⽤⼀对⼤括号{ }包住
C 、声明抽象⽅法,⼤括号可有可⽆
D 、声明抽象⽅法不可写出⼤括号
解析:
A abstract 只能修饰类和⽅法不能修饰字段。
B 抽象⽅法没有⽅法体只有⼀个声明,所以不需要{}包住。
C 声明抽象⽅法⼤括号不能有,有代表的是有⽅法体,就与原有抽象⽅法定义相驳。
8. 下列说法正确的有:(C)
A、 class中的constructor不可省略
B 、constructor必须与class同名,但⽅法不能与class同名
C 、constructor在⼀个对象被new 时执⾏
D 、⼀个class只能定义⼀个constructor
解析:
A,构造函数可以省略,省略后JVM会⾃动创建⼀个⽆参的构造函数
B,构造函数必须与public 类同名,⽅法可以和类同名
D,构造函数可以重载
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是抽象⽅法,抽象类可以包含抽象⽅法,也可以不包含,实现重载。(√)/
B 在类中不能constInt = constInt + 5(×)
C 返回值不能作为重载的依据(×)
D 有⽅法体的不能作为抽象函数(×)
10. java 中哪个关键字可以对对象加互斥锁?()
A 、transient
static修饰的变量B 、synchronized
C 、serialize
D 、static
解析:
synchronized 关键字 : ⽤来给对象和⽅法或者代码块加锁,当它锁定⼀个⽅法或者⼀个代码块的时候,同⼀时刻最多只有⼀个线程执⾏这个段代码。
volatile:⽤来确保将变量的跟新操作通知到其他线程,当把变量声明为volatile类型后,编译器与运⾏时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存操作⼀起重排序。然⽽,在访问volatile变量时不会执⾏加锁操作,因此也就不会使执⾏线程阻塞,因此volatile变量是⼀种⽐ synchronized关键字更轻量级的同步机制。
serialize:Java 对象序列化为⼆进制⽂件。
static关键字: static关键字可以修饰变量,⽅法,静态代码块。
静态变量:
由static修饰的变量称为静态变量
静态变量属于类,⽽不属于某个对象
静态变量它的副本只有⼀个(静态变量在类中只加载⼀)
静态⽅法:
在静态⽅法中只能调⽤静态变量和静态⽅法
在⾮静态⽅法中,可以调⽤静态⽅法或者变量。
在静态⽅法中不能使⽤this和super关键字。
静态代码块
作⽤:⽤来给静态成员变量初始化
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论