Java刷题总结

选择题

  • 如果一个方法或变量是"private"访问级别,那么它的访问范围是:(D)
    A.在当前类,或者子类中
    B.在当前类或者它的父类中
    C.在当前类,或者它所有的父类中
    D.在当前类中
    解析:
    Java刷题总结_第1张图片
  • 在使用super 和this关键字时,以下描述正确的是(A)
    A.在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
    B.super()和this()不一定要放在构造方法内第一行
    C.this()和super()可以同时出现在一个构造函数中
    D.this()和super()可以在static环境中使用,包括static方法和static语句块
    解析:
    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关键字。
  • Math.round(11.5) 等于:(C)
    A.11
    B.11.5
    C.12
    D.12.5
    解析:
    Math类中提供了三个与取整有关的方法:ceil、floor、round,这些方法的作用与它们的英文名称的含义相对应,例如,ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;floor的英文意义是地板,该方法就表示向下取整,Math.ceil(11.6)的结果为11,Math.ceil(-11.6)的结果是-12;最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。
  • 有如下代码:请写出程序的输出结果。(B)
public class Test
{
    public static void main(String[] args)
    {
        int x = 0;
        int y = 0;
        int k = 0;
        for (int z = 0; z < 5; z++) {
            if ((++x > 2) && (++y > 2) && (k++ > 2))
            {
                x++;
                ++y;
                k++;
            }
        }
        System.out.println(x + ”” +y + ”” +k);
    }
}

A.432
B.531
C.421
D.523
解析:
&和&&都是逻辑运算符,都是判断两边同时真则为真,否则为假;但是&&当第一个条件不成之后,后面的条件都不执行了,而&则还是继续执行,直到整个条件语句执行完为止。

z=0时候,执行++x > 2,不成立,&&后面就不执行了,此时 x=1,y=0,k=0;
z=1时候,执行++x > 2,还不成立 ,&&后面就不执行了,此时 x=2,y=0,k=0;
z=2时候, 执行++x > 2,成立,继续执行 ++y > 2, 不成立 , &&后面就不执行了, 此时 x=3,y=1,k=0;
z=3时候,执行++x > 2,成立,继续执行++y > 2,不成立 , &&后面就不执行了, 此时 x=4,y=2,k=0;
z=4 时候,执行++x > 2,成立,继续执行 ++y > 2, 成立 , 继续执行k++>2 ,不成立,此时仍没有进入for循环的语句中, 但此时 x=5,y=3,k=1;
z=5时候,不满足条件了,整个循环结束,所以最好打印时候: x=5,y=3,k=1。

  • 以下程序的运行结果是?(A)
    Java刷题总结_第2张图片
    A.foobar
    B.barfoo
    C.foobar或者barfoo都有可能
    D.Bar
    E.Foo
    F.程序无法正常运行
    解析:
    这道题是考线程的调用情况,线程的启动方式只能通过start这种方式启动才能真正的实现多线程的效果,如果是手动调用run方法和普通方法调用没有区别,所以这个还是按照顺序执行首先执行run方法之后,执行输出语句所以最终得到结果foobar.

  • 在Java图形用户界面编程中,如果需要显示信息,一般是使用__________类的对象来实现。(A)
    A.JLabel
    B.JButton
    C.JTextArea
    D.JtextField
    解析:
    四个选项都是Swing组件。JTextField输入单行文本,JTextArea输入多行文本,JButton显示按钮,JLebel提示信息。

  • 从运行层面上来看,从四个选项选出不同的一个。(B)
    A.JAVA
    B.Python
    C.objectC
    D.C#
    解析:
    A,C,D都是类C语言,B不是
    Python是解释执行的,其他语言都需要先编译

  • ArrayList list = new ArrayList(20);中的list扩充几次(A)
    A.0
    B.1
    C.2
    D.3
    解析:
    ArrayList的构造函数总共有三个:
    (1)ArrayList()构造一个初始容量为 10 的空列表。
    (2)ArrayList(Collection c)构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
    (3)ArrayList(int initialCapacity)构造一个具有指定初始容量的空列表。
    调用的是第三个构造函数,直接初始化为大小为20的list,没有扩容,所以选择A。

  • 关于sleep()和wait(),以下描述错误的一项是(D )
    A.sleep是线程类(Thread)的方法,wait是Object类的方法;
    B.sleep不释放对象锁,wait放弃对象锁
    C.sleep暂停线程、但监控状态仍然保持,结束后会自动恢复
    D.wait后进入等待锁定池,只有针对此对象发出notify方法后获得对象锁进入运行状态
    解析:
    Java中的多线程是一种抢占式的机制,而不是分时机制。抢占式的机制是有多个线程处于可运行状态,但是只有一个线程在运行。
    共同点 :

  • 他们都是在多线程的环境下,都可以在程序的调用处阻塞指定的毫秒数,并返回。

  • wait()和sleep()都可以通过interrupt()方法 打断线程的暂停状态 ,从而使线程立刻抛出InterruptedException。
    如果线程A希望立即结束线程B,则可以对线程B对应的Thread实例调用interrupt方法。如果此刻线程B正在wait/sleep/join,则线程B会立刻抛出InterruptedException,在catch() {} 中直接return即可安全地结束线程。
    需要注意的是,InterruptedException是线程自己从内部抛出的,并不是interrupt()方法抛出的。对某一线程调用 interrupt()时,如果该线程正在执行普通的代码,那么该线程根本就不会抛出InterruptedException。但是,一旦该线程进入到 wait()/sleep()/join()后,就会立刻抛出InterruptedException 。
    不同点 :
    1.每个对象都有一个锁来控制同步访问。Synchronized关键字可以和对象的锁交互,来实现线程的同步。
    sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
    2.wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用
    3.sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常
    4.sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。
    5.wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

  • java8中,忽略内部接口的情况,不能用来修饰interface里的方法的有(AC )
    A.private
    B.public
    C.protected
    D.static

你可能感兴趣的:(Java,刷题总结)