NowCoder-Java-Note(三)

作者: 路卡利欧Mega | 来源:发表于2017-12-05 20:09 被阅读12次
    001.jpg

    一、 以下的变量定义语句中,合法的是()

    A.byte=128
    B.boolean=null
    C.long a=123L
    D.double=0.9239d

    解析:
    • byte表示的范围为[-128,127];
    • boolean的取值只能是true或false
    • D选项缺少变量名

    答案:C

    二、若在某一个类定义中定义有如下的方法: abstract void performDial( );该方法属于()

    A.本地方法
    B.最终方法
    C.解态方法
    D.抽象方法

    解析:
    • 本地方法:简单地讲,一个native Method就是一个java调用非java代码的接口;native方法表示该方法要用另外一种依赖平台的编程语言实现。

    • 最终方法:final void B(){},这样定义的方法就是最终方法,最终方法在子类中不可以被重写,也就是说,如果有个子类继承了这个最终方法所在的类,那么这个子类中不能出现void B(){}这样的方法。

    • 最终类:final class A {},这样定义的类就是最终类,最终类不能被继承

    • abstract修饰抽象类。

    答案:D

    三、 有以下程序片段,下列哪个选项不能插入到行 1 。( )。

    1.
    2.public class A {
    3.    //do sth
    4.} 
    

    A.public class MainClass{ }
    B.package mine;
    C.class ANotherClass{ }
    D.import java.util.*;

    解析:
    • Java的一个源程序只能有一个public类存在,且类名与文件名相同。java程序是从main方法开始执行的,public为类加载器提供入口,然后找到public类中的main方法开始执行。如果存在多个public类,程序将不知道从哪里开始执行。
    • 注意:内部类是可以public的,因为内部类是作为外部类的成员而存在。

    答案:A

    strlen.gif

    四、执行如下程序,输出结果是( )

    public class Test_Thread {
        public static void main(String[] args) {
            Test mv = new Test();
            Thread t1 = new ThreadExample(mv);
            Thread t2 = new ThreadExample(mv);
            Thread t3 = new ThreadExample(mv);
            t1.start();
            t2.start();
            t3.start();
        }
    }
    class Test{
        private int data;
        int result = 0;
        public void m(){
            result += 2;
            data += 2;
            System.out.print(result + "  " + data);
        }
    }
    class ThreadExample extends Thread{
        private Test mv;
        public ThreadExample(Test mv) {
            this.mv = mv;
        }
        @Override
        public void run() {
            synchronized (mv) {
                mv.m();
            }
        }
    }
    

    A.0 22 44 6
    B.2 42 42 4
    C.2 24 46 6
    D.4 44 46 6

    解析:

    Test mv =newTest()声明并初始化对data赋默认值
    使用synchronized关键字加同步锁线程依次操作m()
    t1.start();使得result=2,data=2,输出即为2 2
    t2.start();使得result=4,data=4,输出即为4 4
    t3.start();使得result=6,data=6,输出即为6 6
    System.out.print(result +" "+ data);是print()方法不会换行,输出结果为2 24 46 6

    答案:C

    五、以下哪项不属于java类加载过程?

    A.生成java.lang.Class对象
    B.int类型对象成员变量赋予默认值
    C.执行static块代码
    D.类方法解析

    解析:
    类加载过程 :
    • 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中准备、验证、解析3个部分统称为连接(Linking)。
      类加载过程

    引用内容链接:
    http://blog.csdn.net/u013256816/article/details/50829596

    选项 :
    • 生成java.lang.Class对象是在加载时进行的。生成Class对象作为方法区这个类的各种数据的访问入口。

    • 既然是对象成员,那么肯定在实例化对象后才有。在类加载的时候会赋予初值的是类变量,而非对象成员。

    • 类方法解析发生在解析过程。

    答案:B

    六、下面哪个语句是创建数组的正确语句?( )

    A.float f[][] = new float[6][6];
    B.float []f[] = new float[6][6];
    C.float f[][] = new float[][6];
    D.float [][]f = new float[6][6];
    E.float [][]f = new float[6][];

    解析:
    • 数组命名时名称与[]可以随意排列,但声明的二维数组中第一个中括号中必须要有值,它代表的是在该二维数组中有多少个一维数组。

    • 如果定义一个这样的二维数组int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};则其在内存中的表示可能下面这样的。

      001.png

    答案:A B D E

    引用内容链接:
    https://www.cnblogs.com/bewolf/p/4321642.html

    七、下面哪些属于JSP内置对象及方法?

    A.request
    B.out
    C.application
    D.config

    解析:
    JSP 有 9 个内置对象:
    • request:封装客户端的请求,其中包含来自 GET 或 POST 请求的参数;
    • response:封装服务器对客户端的响应;
    • session:封装用户会话的对象;
    • application:封装服务器运行环境的对象;
    • out:输出服务器响应的输出流对象;
    • config:Web 应用的配置对象;
    • pageContext:通过该对象可以获取其他对象;
    • page:JSP 页面本身(相当于 Java 程序中的 this);
    • exception:封装页面抛出异常的对象

    答案:A B C D

    八、final、finally和finalize的区别中,下述说法正确的有?

    A.final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
    B.finally是异常处理语句结构的一部分,表示总是执行。
    C.finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源的回收,例如关闭文件等。
    D.引用变量被final修饰之后,不能再指向其他对象,它指向的对象的内容也是不可变的。

    解析:
    • B选项→
      PS:finally 是无论是否有异常都会被处理的语句,除非在 finally 前存在被执行的System.exit(int i)时除外。
    • C选项:JVM 不保证此方法总被调用
    • D选项:使用final修饰一个变量时,是指引用变量不能变引用变量所指向对象中的内容可以改变。

    答案:A B

    九、下列方法中哪个是线程执行的方法? ()

    A.run()
    B.start()
    C.sleep()
    D.suspend()

    解析:
    • run()方法用来执行线程体中具体的内容;
      start()方法用来启动线程对象,使其进入就绪状态
      sleep()方法用来使线程进入睡眠状态
      suspend()方法用来使线程挂起,需要通过resume()方法使其重新启动,不推荐使用。
    注:线程的生命周期及五种基本状态:

    关于Java中线程的生命周期,首先看一下下面这张较为经典的图:


    线程的生命周期
    • Java线程具有五种基本状态:
    1. 新建状态(New):当线程对象创建后,即进入了新建状态,如:
      Thread t = new MyThread();

    2. 就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;

    3. 运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时线程才得以真正执行,即进入到运行状态。注:就 绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中;

    4. 阻塞状态(Blocked):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才 有机会再次被CPU调用以进入到运行状态。根据阻塞产生的原因不同,阻塞状态又可以分为三种:
      1.等待阻塞:运行状态中的线程执行wait()方法,使本线程进入到等待阻塞状态;
      2.同步阻塞 -- 线程在获取synchronized同步锁失败(因为锁被其它线程所占用),它会进入同步阻塞状态;
      3.其他阻塞 -- 通过调用线程的sleep()join()或发出了I/O请求时,线程会进入到阻塞状态。当sleep()状态超时、join()等待线程终止或者超时、或者I/O处理完毕时,线程重新转入就绪状态。

    5. 死亡状态(Dead):线程执行完了或者因异常退出了run()方法,该线程结束生命周期。
      引用内容链接:
      https://www.cnblogs.com/lwbqqyumidi/p/3804883.html

    答案:A

    十、以下哪些类是线程安全的()

    AVector
    B.HashMap
    C.ArrayList
    D.StringBuffer
    E.Properties

    解析:
    java中的线程安全是什么:
    • 就是线程同步的意思,就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他的不能再对他进行操作了,必须等到这次访问结束以后才能对这个线程安全的方法进行访问
    线程安全一般会涉及到synchronized
    • 查看源代码,可以发现Vector,StringBuffer,Properties许多操作都加了synchronized修饰。

    答案:A D E

    相关文章

      网友评论

        本文标题:NowCoder-Java-Note(三)

        本文链接:https://www.haomeiwen.com/subject/rfecixtx.html