java选择题(三)

1、静态内部类不可以直接访问外围类的非静态数据,而非静态内部类可以直接访问外围类的数据,包括私有数据。( )正确答案: A   

A、正确
B、错误
解析:
  静态内部类可以访问外围类的静态数据,包括私有数据,但不能访问非静态数据;
  非静态内部类可以直接访问外围类的数据,包括私有数据

 

2、在类Tester中定义方法如下,public double max(int x, int y) { // 省略 },则在该类中定义如下哪个方法头是对上述方法的重载(Overload)?正确答案: B 

 
A.public int max(int a, int b) {}
B.public int max(double a, double b) {}
C.public double max(int x, int y) {}
D.private double max(int a, int b) {}

 解析:

  重载:同名不同参,返回值无关。

  覆盖/重写:同名同参
 

3、以下Java程序运行的结果是:

public class Tester{
public static void main(String[] args){
   Integer var1=new Integer(1);
   Integer var2=var1;
   doSomething(var2);
   System.out.print(var1.intValue());
   System.out.print(var1==var2);
}
public static void doSomething(Integer integer){
    integer=new Integer(2);
    }
}

正确答案: A   

A.1true
B.2true
C.1false
D.2false

解析:

 4、关于下面的程序Test.java说法正确的是(    )。

public class Test {
    static String x="1";
    static int y=1;
    public static void main(String args[]) {
        static int z=2;
        System.out.println(x+y+z);
    }
}

正确答案: D 

A.3
B.112
C.13
D.程序有编译错误

 解析:

  局部变量,由于在方法中,方法中的变量都在栈中,随着方法的进栈出栈产生和销毁。所以不可以被static修饰。一旦被static修饰变量就属于类了。
 

5、@SuppressWarnings(“deprecation”)的功能是什么?正确答案: A  

A.屏蔽不赞同使用的类和方法的警告
B.屏蔽在强制类型转换的时候编译器给出的警告
C.关闭所有警告信息
D.当在可序列化的类上缺少serialVersionUID定义的警告

解析:

  1、@Override 注解表名子类中覆盖了超类中的某个方法,如果写错了覆盖形式,编译器会报错
  2、@Deprecated 表明不希望别人在以后使用这个类,方法,变量等等
  3、@Suppresswarnings 达到抑制编译器产生警告的目的,但是不建议使用,因为后期编码人员看不懂编译器提示的警告,不能更好的选择更好的类去完成任务

6、对于构造方法,下列叙述正确的是( )。正确答案: A C D

A.构造方法的优先级一般比代码块低。
B.构造方法的返回类型只能是void型。
C.构造方法的主要作用是完成对类的对象的初始化工作。
D.一般在创建新对象时,系统会自动调用构造方法。

解析:

java程序初始化顺序:
  父类静态变量 -> 父类静态代码块(只执行一次) -> 子类静态变量 -> 子类静态代码块(只执行一次) -> 父类非静态变量 -> 父类非静态代码块 -> 父类构造函数 -> 子类非静态变量 -> 子类非静态代码块 -> 子类构造函数
 

7、程序中常采用变量表示数据,变量具有名、地址、值、作用域、生存期等属性。关于变量的叙述,()是正确的。正确答案: A C D

A.根据作用域规则,在函数中定义的变量只能在函数中引用
B.在函数中定义的变量,其生存期为整个程序执行期间
C.在函数中定义的变量不能与其所在函数的形参同名
D.在函数中定义的变量,其存储单元在内存的栈区

解析:

  在函数中,不管中间隔了几层,都不允许定义一个与形参同名的变量

8、final、finally和finalize的区别中,下述说法正确的有?正确答案: A B

A.final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。

B.finally是异常处理语句结构的一部分,表示总是执行。

C.finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源的回收,例如关闭文件等。

D.引用变量被final修饰之后,不能再指向其他对象,它指向的对象的内容也是不可变的。

解析:

  finalize方法一个对象只能执行一次,只能在第一次进入被回收的队列,而且对象所属于的类重写了finalize方法才会被执行。

  使用 final 关键字修饰一个变量时,引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。

9、关于下面一段代码,以下说法正确的是: () 正确答案: A C

public class Test {
    private synchronized void a() {
    }
    private void b() {
        synchronized (this) {
        }
    }
    private synchronized static void c() {
    }
    private void d() {
        synchronized (Test.class) {
        }
    }
}
A.同一个对象,分别调用方法a和b,锁住的是同一个对象
B.同一个对象,分别调用方法a和c,锁住的是同一个对象
C.同一个对象,分别调用方法b和c,锁住的不是同一个对象
D.同一个对象,分别调用方法a、b、c,锁住的不是同一个对象

解析:

  • 同步代码块(synchronized(this),synchronized(类实例对象),锁是小括号()中的实例对象)
  • 同步非静态方法(synchronized method),锁的是当前对象的实例对象
  • 同步代码块(synchronized(类.class)),锁是最小括号 () 中的类对象(Class对象)
  • 同步静态方法(synchronized static method),锁是当前对象的类对象(Class 对象)

10、对于下面这段代码,以下说法正确的是:正确答案: C 

public class Test
{
    public int x;
    public static void main(String []args)
    {
        System. out. println("Value is" + x);
    }
}
A.程序会打出 "Value is 0"
B.程序会抛出 NullPointerException
C.非静态变量不能够被静态方法引用
D.编译器会抛出 "possible reference before assignment"的错误

解析:

  当类加载时,static静态方法随着类加载而初始化,此时实例对象还未被创建,但是非静态成员变量需要等到实例对象创建才会被初始化,故无法被引用。

11、哪个类可用于处理 Unicode? 正确答案: A 

A.InputStreamReader
B.BufferedReader
C.Writer
D.PipedInputStream

解析:  

  InputStreamReader是将字节流转换成字符流供我们使用。同时InputStreamReader可以指定字符集的编码。 

  InputStreamReader(InputStream in, String charsetName)  : 创建使用指定字符集的 InputStreamReader。

12、说明输出结果。正确答案: C

import java.util.Date; 
public class SuperTest extends Date{ 
    private static final long serialVersionUID = 1L; 
    private void test(){ 
       System.out.println(super.getClass().getName()); 
    } 
      
    public static void main(String[]args){ 
       new SuperTest().test(); 
    } 
}
A.SuperTest
B.SuperTest.class
C.test.SuperTest
D.test.SuperTest.class

解析:

  super.getClass().getName()   返回:包名+类名

13、下面的代码输出的结果为正确答案: A

public class Test1 {
    static int cnt = 6;
    static {
        cnt += 9;
    }
    public static void main(String[] args) {
        System.out.println("cnt =" + cnt);
    }
    static {
        cnt /= 3;
    }
}
A.cnt=5
B.cnt=2
C.cnt=3
D.cnt=6

解析:

  本题考查初始化顺序:  

(1)父类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
(2)子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
(3)父类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(4)执行父类构造方法。
(5)子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
(6)执行子类构造方法。

14、一个容器类数据结构,读写平均,使用锁机制保证线程安全。如果要综合提高该数据结构的访问性能,最好的办法是______。

正确答案: C  

A.只对写操作加锁,不对读操作加锁
B.读操作不加锁,采用copyOnWrite的方式实现写操作
C.分区段加锁
D.无法做到

解析:

  选项A,只对写操作加锁,不对读操作加锁,会造成读到脏数据
  选项B,CopyOnWrite的核心思想是利用高并发往往是读多写少的特性,对读操作不加锁,对写操作,先复制一份新的集合,在新的集合上面修改,然后将新集合赋值给旧的引用。这里读写平均,不适用
  选项C,分段加锁,只在影响读写的地方加锁,锁可以用读写锁,可以提高效率,currenthashmap就是分段锁

15、以下哪些继承自 Collection 接口()正确答案: A B

A.List
B.Set
C.Map
D.Array

解析:

 16、以下代码可以使用的修饰符是:()正确答案: A B D

public interface Status {
 /*INSERT CODE HERE*/  int MY_VALUE=10;
 }
A.final
B.static
C.abstract
D.public

解析:

  接口中字段的修饰符:public static final(默认不写)

  接口中方法的修饰符:public abstract(默认不写)

17、Java类Demo中存在方法func1、func2、func3和func4,请问该方法中,哪些是不合法的定义?( ) 正确答案: A D 

public class Demo{
 
  float func1()
  {
    int i=1;
    return;
  }
  float func2()
  {
    short i=2;
    return i;
  }
  float func3()
  {
    long i=3;
    return i;
  }
  float func4()
  {
    double i=4;
    return i;
  }
}
A.func1
B.func2
C.func3
D.func4

解析:

  自动转换按从低到高的顺序转换。不同类型数据间的优先关系如下:
  byte,short,char ->  int  ->  long  ->  float  ->  double

  运算中,不同类型的数据先转化为同一类型,然后进行运算,转换规则如下:

操作数 1 类型

操作数 2 类型

转换后的类型

byte 、 short 、 char

int

int

byte 、 short 、 char 、 int

long

long

byte 、 short 、 char 、 int 、 long

float

float

byte 、 short 、 char 、 int 、 long 、 float

double

double

18、以下各类中哪几个是线程安全的?( )  正确答案: B C D

A.ArrayList
B.Vector
C.Hashtable
D.Stack

解析:

  Stack继承了Vector,所以也是线程安全的

原文地址:https://www.cnblogs.com/strong-FE/p/15460065.html