Java基础笔试练习(五)

1,820 阅读11分钟

Java基础笔试练习(五)

1.以下关于Integer与int的区别错误的是?

A.int是java提供的8种原始数据类型之一 B.Integer是java为int提供的封装类 C.int的默认值为0 D.Integer的默认值为1

答案: D

解析:

2.给定以下方法声明,调用执行mystery(1234)的输出结果?

//precondition:  x >=0
public void mystery (int x)
{
System.out.print(x % 10);
 
if ((x / 10) != 0)
{
mystery(x / 10);
}
System.out.print(x % 10);
}

A.1441 B.43211234 C.3443 D.12344321

答案: B

解析: 递归调用

3.下面不是类及类成员的访问控制符的是( )。(不考虑内部类的情况)

A.public B.private C.static D.protected

答案: C

解析: 类访问控制符只有三种:public ,private, protected static和访问控制无关

4.下列修饰符中与访问控制权限无关的是?( )

A.private B.public C.protected D.final

答案: D

解析: private : 修饰私有变量 public : 修饰公有变量 protected: 修饰受保护变量 没有final, final用于保护变量不受改变

5.局部变量能否和成员变量重名?

A.可以,局部变量可以与成员变量重名,这时可用“this”来指向成员变量 B.可以,这时可用“local”关键字来指向局部变量 C.不能,局部变量不能与成员变量重名 D.不能,在一个类中不能有重名变量,不管是成员变量还是函数中的局部变量

答案: A

解析: JAVA访问变量采用就近原则,局部变量与成员变量重名时,局部变量比较近,使用局部变量

6.下列说法正确的是()

A.在类方法中可用this来调用本类的类方法 B.在类方法中调用本类的类方法可直接调用 C.在类方法中只能调用本类的类方法 D.在类方法中绝对不能调用实例方法

答案: B

解析: 在类方法中调用本类的类方法可直接调用。 实例方法也叫做对象方法。 类方法是属于整个类的,而实例方法是属于类的某个对象的。 由于类方法是属于整个类的,并不属于类的哪个对象,所以类方法的方法体中不能有与类的对象有关的内容。即类方法体有如下限制: (1) 类方法中不能引用对象变量; (2) 类方法中不能调用类的对象方法; (3) 在类方法中不能使用super、this关键字。 (4)类方法不能被覆盖。 如果违反这些限制,就会导致程序编译错误。 与类方法相比,对象方法几乎没有什么限制: (1) 对象方法中可以引用对象变量,也可以引用类变量; (2) 对象方法中可以调用类方法; (3) 对象方法中可以使用super、this关键字。

7.关于依赖注入,下列选项中说法错误的是()?

A.依赖注入能够独立开发各组件,然后根据组件间关系进行组装 B.依赖注入提供使用接口编程 C.依赖注入使组件之间相互依赖,相互制约 D.依赖注入指对象在使用时动态注入

答案: C

解析: 依赖注入目的是减少组件之间的耦合度,使开发变得简单。

8.运行下面代码,输出的结果是()

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

A.

class A static 
class B static 
I'm A class 
class A
I'm B class 
class B

B.

class A static
I'm A class
class A
class B static
I'm B class
class B

C.

class A static
class B static
class A
I'm A class 
class B
I'm B class

D.

class A static
class A
I'm A class
class B static
class B
I'm B class

答案: A

解析: 此题考虑 Java 中构造器、初始化块、静态初始化块的执行顺序。

静态初始化块 > 初始化块 > 构造器 父类 > 子类 综合下来顺序就是:

父类静态初始化块 子类静态初始化块 父类初始化块 父类构造器 子类初始化块 子类构造器 需要注意静态初始化块是在类第一次加载的时候就会进行初始化。

9.下面哪个标识符是合法的?

A."9HelloWorld" B."_Hello World" C."Hello*World" D."Hello$World"

答案: D

解析: 标识符是以字母开头的字母数字序列: 数字是指0~9,字母指大小写英文字母、下划线(_)和美元符号($),也可以是Unicode字符集中的字符,如汉字; 字母、数字等字符的任意组合,不能包含+、- 等字符; 不能使用关键字; 大小写敏感 由此可以看出: A:不可以数字开头 B:用下划线开头符合,但是中间有空格 C:不能包含“” 排除ABC,答案即是D

10.以下程序执行的结果是:

class X{
    Y y=new Y();
    public X(){
        System.out.print("X");
    }
}
class Y{
    public Y(){
        System.out.print("Y");
    }
}
public class Z extends X{
    Y y=new Y();
    public Z(){
        System.out.print("Z");
    }
    public static void main(String[] args) {
        new Z();
    }
}

A.ZYXX B.ZYXY C.YXYZ D.XYZX

答案: C

解析: 1.父类静态代码块 (java虚拟机加载类时,就会执行该块代码,故只执行一次) 2 .子类静态代码块 (java虚拟机加载类时,就会执行该块代码,故只执行一次) 3. 父类属性对象初始化 4.父类普通代码块(每次new,每次执行 ) 5. 父类构造函数(每次new,每次执行) 6.子 类 属性对象初始化 7.子类普通代码块(每次new,每次执行 ) 8.子 类构造函数(每次new,每次执行)

11.以下声明合法的是

A.default String s B.public final static native int w( ) C.abstract double d D.abstract final double hyperbolicCosine( )

答案: B

解析: A:java的访问权限有public、protected、private和default的,default不能修饰变量 C:普通变量不能用abstract修饰,abstract一般修饰方法和类 D:被定义为abstract的类需要被子类继承,但是被修饰为final的类是不能被继承和改写的心存疑问可以实验一下,看是否能通过编译.

12.java用()机制实现了进程之间的同步执行

A.虚拟机 B.多个CPU C.异步调用 D.监视器

答案: D

解析: 同步执行,需要监视器,即锁。

13.What is displayed when the following is executed;

double d1=-0.5;
System.out.println("Ceil d1="+Math.ceil(d1));
System.out.println("floor d1="+Math.floor(d1));

A.Ceil d1=-0.0 floor d1=-1.0 B.Ceil d1=0.0 floor d1=-1.0 C.Ceil d1=-0.0 floor d1=-0.0 D.Ceil d1=0.0 floor d1=0.0 E.Ceil d1=0 floor d1=-1

答案: A

解析:

14.有关下述Java代码描述正确的选项是____。

public class TestClass {
   private static void testMethod(){
        System.out.println("testMethod");
   }
   public static void main(String[] args) {
        ((TestClass)null).testMethod();
   }
}

A.编译不通过 B.编译通过,运行异常,报NullPointerException C.编译通过,运行异常,报IllegalArgumentException D.编译通过,运行异常,报NoSuchMethodException E.编译通过,运行异常,报Exception F.运行正常,输出testMethod

答案: F

解析: 1)此处是类对方法的调用,不是对象对方法的调用。 2)方法是static静态方法,直接使用"类.方法"即可,因为静态方法使用不依赖对象是否被创建。null可以被强制类型转换成任意类型(不是任意类型对象),于是可以通过它来执行静态方法。 3)非静态的方法用"对象.方法"的方式,必须依赖对象被创建后才能使用,若将testMethod()方法前的static去掉,则会报 空指针异常 。此处也验证了2)的观点 当然,不管是否静态方法,都是已经存在的,只是访问方式不同。

15.下面哪些具体实现类可以用于存储键,值对,并且方法调用提供了基本的多线程安全支持:()

A.java.util.ConcurrentHashMap B.java.util.Map C.java.util.TreeMap D.java.util.SortMap E.java.util.Hashtable F.java.util.HashMap

答案: A E

解析:

  • ConcurrentHashMap简称CHM,CHM 允许并发的读和线程安全的更新操作。在执行写操作时,CHM 只锁住部分的 Map,并发的更新是通过内部根据并发级别将 Map 分割成小部分实现的,高的并发级别会造成时间和空间的浪费,低的并发级别在写线程多时会引起线程间的竞争,CHM 的所有操作都是线程安全,CHM 返回的迭代器是弱一致性, fail-safe 并且不会抛出ConcurrentModificationException 异常,CHM不允许null的键值。可以使用 CHM 代替 HashTable,但要记住 CHM 不会锁住整个 Map
  • 除了Hashtable,其他是非线性安全的。

16.JavaWEB中有一个类,当会话种邦定了属性或者删除了属性时,他会得到通知,这个类是:( )

A.HttpSessionAttributeListener B.HttpSessionBindingListener C.HttpSessionObjectListener D.HttpSessionListener; E.HttpSession F.HttpSessionActivationListener

答案: A

解析: HttpSessionAttributeListener:可以实现此侦听器接口获取此web应用程序中会话属性列表更改的通知; HttpSessionBindingListener:当该对象从一个会话中被绑定或者解绑时通知该对象,这个对象由HttpSessionBindingEvent对象通知。这可能是servlet程序显式地从会话中解绑定属性的结果,可能是由于会话无效,也可能是由于会话超时; HttpSessionObjectListener:没有该接口API; HttpSessionListener:当web应用程序中的活动会话列表发生更改时通知该接口的实现类,为了接收该通知事件,必须在web应用程序的部署描述符中配置实现类; HttpSessionActivationListener:绑定到会话的对象可以侦听容器事件,通知它们会话将被钝化,会话将被激活。需要一个在虚拟机之间迁移会话或持久会话的容器来通知所有绑定到实现该接口会话的属性。

17.在java中重写方法应遵循规则的包括()

A.访问修饰符的限制一定要大于被重写方法的访问修饰符 B.可以有不同的访问修饰符 C.参数列表必须完全与被重写的方法相同 D.必须具有不同的参数列表

答案: B C

解析: 方法重写

  • 参数列表必须完全与被重写方法的相同;
  • 返回类型必须完全与被重写方法的返回类型相同;
  • 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
  • 父类的成员方法只能被它的子类重写。
  • 声明为final的方法不能被重写。
  • 声明为static的方法不能被重写,但是能够被再次声明。
  • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
  • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
  • 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
  • 构造方法不能被重写。
  • 如果不能继承一个方法,则不能重写这个方法。 方法重载
  • 被重载的方法必须改变参数列表(参数个数或类型或顺序不一样);
  • 被重载的方法可以改变返回类型;
  • 被重载的方法可以改变访问修饰符;
  • 被重载的方法可以声明新的或更广的检查异常;
  • 方法能够在同一个类中或者在一个子类中被重载。
  • 无法以返回值类型作为重载函数的区分标准。

18.What might cause the current thread to stop or pause executing

A.An InterruptedException is thrown. B.The thread executes a wait() call. C.The thread constructs a new Thread. D.A thread of higher priority becomes ready. E.The thread executes a waitforID()call on a MediaTracker.

答案: A B E

解析:

19.下列说法错误的有( )

A.Java面向对象语言容许单独的过程与函数存在 B.Java面向对象语言容许单独的方法存在 C.Java语言中的非静态方法属于类中的成员(member) D.Java语言中的方法必定隶属于某一类(对象),调用方法与C语言的过程或C++语言的函数相同

答案: A B C D

解析: Java的静态方法属于类的成员,实例方法属于对象的成员。

20.下列流当中,属于处理流的是:()

A.FilelnputStream B.lnputStream C.DatalnputStream D.BufferedlnputStream

答案: C D

解析: 此题考察对于java流的理解 节点流是实际工作的流, 处理流(我们叫包装流可能容易理解一点)设计的目的是让对流中数据的操作,转化成我们能更简单明了的看懂的数据(而不是二进制的字节等)的操作,但实际上增加了很多类,是io流变的更复杂 字节流必是一个接点流,字符流就是一个操作流 使用时,必须是有一个结点流,然后才能用操作流来包装结点流,即把结点流当参数传个操作流

注:以上笔试题均来自网络,由笔者整理得出

推荐

笔试内容集合 欢迎关注,持续更新中....

文末

欢迎关注个人微信公众号:Coder编程 获取最新原创技术文章和免费学习资料,更有大量精品思维导图、面试资料、PMP备考资料等你来领,方便你随时随地学习技术知识!

文章收录至 Github: github.com/CoderMerlin… Gitee: gitee.com/573059382/c… 欢迎关注并star~

微信公众号