Java日常刷题第十天

选择题

1.在使用super和this关键字时,在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过.
解析:1)调用super()必须写在子类构造方法的第一行,否则编译不通过。每个子类构造方法的第一条语句,都是隐含地调用super(),如果父类没有这种形式的构造函数,那么在编译的时候就会报错。
2)super()和this()类似,区别是,super从子类中调用父类的构造方法,this()在同一类内调用其它方法。
3)super()和this()均需放在构造方法内第一行。
4)尽管可以用this调用一个构造器,但却不能调用两个。
5)this和super不能同时出现在一个构造函数里面,因为this必然会调用其它的构造函数,其它的构造函数必然也会有super语句的存在,所以在同一个构造函数里面有相同的语句,就失去了语句的意义,编译器也不会通过。
6)this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块。
7)从本质上讲,this是一个指向本对象的指针, 然而super是一个Java关键字。
2.已知如下类定义:

class Base {  
 public Base (){ 
 //... 
 }  
 public Base ( int m ){ 
 //... 
 }  
 public void fun( int n ){ 
 //... 
 } 
}  
public class Child extends Base{  
 // member methods  
}  

如下哪句可以正确地加入子类中?(D)
A。private void fun( int n ){ //…}
B。void fun ( int n ){ //… }
C。protected void fun ( int n ) { //… }
D。public void fun ( int n ) { //… }
解析:方法的重写(override)两同两小一大原则:
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限。
3.//中可以嵌套//注释,也能嵌套//注释。(错)
4.假设有以下代码String s = “hello”;String t = “hello”;char c [ ] = {‘h’,‘e’,‘l’,‘l’,‘o’};下列选项中返回false的语句是?(B)
A。s.equals (t);
B。t.equals ©;
C。s== t;
D。t.equals (new String (“hello”));
解析:首先 == 与equals是有明显区别的。
== 强调栈中的比较,可以理解为地址比较
equals强调对象的内容比较
String s=“hello”;会在栈中生成hello字符串,并存入字符串常量池中。
String t=“hello” ;创建时,会在字符串常量池中寻找,当找到需要的hello时,不进行字符串的创建,引用已有的。 所以,s== t返回true,s.equals(t)也是true。
char c[]={‘h’,‘e’,‘l’,‘l’,‘o’}; c==s这个是不存在的,==两边类型不同
t.equals©这个语句在anObject instanceof String这步判断不会通过,也就是cha[] 压根不能与String相比较,类型不是相同的。返回false
5.阅读下列程序,选择哪一个是正确的输出结果(C)

class HelloA{
public HelloA()
    {
        System.out.println("I’m A class ");
    }
    static
    {
    System.out.println("static A");
    }
}
public class HelloB extends HelloA{
    public HelloB()
    {
        System.out.println("I’m B class");
    }
    static{
        System.out.println("static B");
    }
    public static void main (String[] args){
        new HelloB();
    }
}

A。static A I’m A class static B I’m B class
B。I’m A class I’m B class static A static B
C。static A static B I’m A class I’m B class
D。I’m A class static A I’m B class static B
解析: 类的初始化顺序是: 1、初始化父类中的静态成员变量和静态代码块。 2、初始化子类中的静态成员变量和静态代码块。 3、初始化父类中的普通成员变量和代码块,在执行父类中的构造方法。 4、初始化子类中的普通成员变量和代码块,在执行子类中的构造方法。
6.关于以下程序代码的说明正确的是?

1.   public class HasStatic{
2.     private static int x=100;
3.     public static void main(String args[]){
4.          HasStatic hs1=new HasStatic();
5.          hs1.x++;
6.          HasStatic  hs2=new HasStatic();
7.          hs2.x++;
8.          hs1=new HasStatic();
9.          hs1.x++;
10.        HasStatic.x--;
11.        System.out.println("x="+x);
12.     }
13.   } 

A。程序通过编译,输出结果为:x=103
B。10行不能通过编译,因为x是私有静态变量
C。5行不能通过编译,因为引用了私有静态变量
D。程序通过编译,输出结果为:x=102
解析:main是HasStatic的静态方法,在其内部可直接访问静态变量,不存在因为私有变量不能通过编译的问题;如果在其他类中,包括HasStatic的派生类中,均不能访问其私有静态变量
7.枚举(enum)属于原始数据类型(primitive type)。(错×)
解析:在Java中,变量有两种类型,一种是原始类型,一种是引用类型。

原始类型一共有8种,它们分别是char,boolean,byte,short,int,long,float,double。在Java API中,有它们对应的包装类,分别是(首字母大写)Character,Boolean,Byte,Short,Integer,Long,Float,Double(char,int的变化稍微大点)。

JAVA JVM对于不同的原始类型会分配不同的存储空间,具体分配如下:

byte : 1个字节 8位
最大值: 127 (有符号)

short : 2个字节 16位 32767

int : 4个字节 32位 2147483647

long: 8个字节 64位 9223372036854775807

float: 4个字节 32位 3.4028235E38

double:8个字节 64位 1.7976931348623157E308

枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示,是特殊的类,可以拥有成员变量和方法。
8.下列关于异常处理的描述中,错误的是( D )。
A。程序运行时异常由Java虚拟机自动进行处理
B。使用try-catch-finally语句捕获异常
C。可使用throw语句抛出异常
D。捕获到的异常只能在当前方法中处理,不能在其他方法中处理
解析:运行时异常java虚拟机会自行处理,只有当是检查时异常java会强制性抛出异常,对异常进行处理。

  1. 运行型异常由JVM自行处理,程序员不需要管。
    检查型异常由编译器检查,需要程序员手动捕获处理。

  2. 捕获到的异常可以选择在当前方法中处理,也可以在调用它的上一级方法中抛出。

  3. 编译时异常必须显示处理,运行时异常交给虚拟机。
    运行时异常可以不处理。当出现这样的异常时,总是由虚拟机接管。比如我们从来没有人去处理过Null Pointer Exception异常,它就是运行时异常,并且这种异常还是最常见的异常之一。出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run()抛出,如果是单线程就被main()抛出。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,整个程序也就退出了。运行时异常是Exception的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往不对它处理罢了。也就是说,如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。
    9.以下代码执行的结果显示是多少( )?

    public class Demo { class Super{ int flag=1;
    Super(){
    test();
    } void test(){
    System.out.println(“Super.test() flag=”+flag);
    }
    } class Sub extends Super{
    Sub(int i){ flag=i;
    System.out.println(“Sub.Sub()flag=”+flag);
    } void test(){
    System.out.println(“Sub.test()flag=”+flag);
    }
    } public static void main(String[] args) { new Demo().new Sub(5);
    }
    }
    A。 Sub.test() flag=1
    Sub.Sub() flag=5
    B。 Sub.Sub() flag=5
    Sub.test() flag=5
    C。 Sub.test() flag=0
    Sub.Sub() flag=5
    D。 Super.test() flag=1
    Sub.Sub() flag=5
    解析:在继承中代码的执行顺序为:1.父类静态对象,父类静态代码块
    2.子类静态对象,子类静态代码块
    3.父类非静态对象,父类非静态代码块
    4.父类构造函数
    5.子类非静态对象,子类非静态代码块
    6.子类构造函数
    对于本题来说:在只想new Sub(5)的时候,父类先初始化了 int flag = 1,然后执行父类的构造函数Super(),父类构造函数中执行的test()方法,因子类是重写了test()方法的,因此父类构造函数中的test()方法实际执行的是子类的test()方法,所以输出为Sub.test() flag=1,接着执行子类构造函数Sub(5) 将flag赋值为5,因此输出结果Sub.Sub() flag=5。最终选择了A。

10.容器panel缺省使用的布局编辑策略是( B)
A。Border Layout
B。Flow Layout
C。GridLayout
D。Card Layout
解析:系统默认的是流试的FlowLayout的布局管理器

猜你喜欢

转载自blog.csdn.net/yangyuCISCO/article/details/83383573