【302天】我爱刷题系列061(2017.12.04)

叨叨两句

  1. 想要专一,最强的方法是调动本能自个人力量把本身拉回来

牛客网——java专项练习040

1

下列不属于Java语言性特色的是
正确答案: D 你的答案: D (正确)java

  1. Java致力于检查程序在编译和运行时的错误
  2. Java能运行虚拟机实现跨平台
  3. Java本身操纵内存减小了内存出错的可能性
  4. Java还实现了真数组,避免了覆盖数据类型的可能
真数组: 数组元素在内存中是一个接着一个线性存放的,经过第一个元素就能访问随后的元素,避免了数据覆盖的可能性,和数据类型覆盖并无关系。

2

下面哪一项不是加载驱动程序的方法?
正确答案: A 你的答案: C (错误)mysql

  1. 经过DriverManager.getConnection方法加载
  2. 调用方法 Class.forName
  3. 经过添加系统的jdbc.drivers属性
  4. 经过registerDriver方法注册
加载驱动方法
1.Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
2. DriverManager.registerDriver(new com.mysql.jdbc.Driver());
3.System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");

3

下面有关JVM内存,说法错误的是?
正确答案: Csql

  1. 程序计数器是一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的
  2. 虚拟机栈描述的是Java方法执行的内存模型,用于存储局部变量,操做数栈,动态连接,方法出口等信息,是线程隔离的
  3. 方法区用于存储JVM加载的类信息、常量、静态变量、以及编译器编译后的代码等数据,是线程隔离的
  4. 原则上讲,全部的对象都在堆区上分配内存,是线程之间共享的
大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,Heap(堆) , Program Counter Register(程序计数器) ,   VM Stack(虚拟机栈,也有翻译成JAVA 方法栈的),Native Method Stack  ( 本地方法栈 ),其中Method Area 和  Heap 是线程共享的  ,VM Stack,Native Method Stack  和Program Counter Register  是非线程共享的。为何分为 线程共享和非线程共享的呢?请继续往下看。
首先咱们熟悉一下一个通常性的 Java 程序的工做过程。一个 Java 源程序文件,会被编译为字节码文件(以 class 为扩展名),每一个java程序都须要运行在本身的JVM上,而后告知 JVM 程序的运行入口,再被 JVM 经过字节码解释器加载运行。那么程序开始运行后,都是如何涉及到各内存区域的呢?
归纳地说来,JVM初始运行的时候都会分配好 Method Area(方法区) 和Heap(堆) ,而JVM 每遇到一个线程,就为其分配一个 Program Counter Register(程序计数器) ,   VM Stack(虚拟机栈)和Native Method Stack  (本地方法栈), 当线程终止时,三者(虚拟机栈,本地方法栈和程序计数器)所占用的内存空间也会被释放掉。这也是为何我把内存区域分为线程共享和非线程共享的缘由,非线程共享的那三个区域的生命周期与所属线程相同,而线程共享的区域与JAVA程序运行的生命周期相同,因此这也是系统垃圾回收的场所只发生在线程共享的区域(实际上对大部分虚拟机来讲知发生在Heap上)的缘由。

4

以下代码的输出是数组

package Test;
public class Test {
    private static void test(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            try {
                if (arr[i] % 2 == 0) {
                    throw new NullPointerException();
                } else {
                    System.out.print(i);
                }
            } finally {
                System.out.print("e");
            }
        }
    }
 
    public static void main(String[]args) {
        try {
            test(new int[] {0, 1, 2, 3, 4, 5});
        } catch (Exception e) {
            System.out.print("E");
        }
    }
 
}

能够获得的结论是( )sqlserver

正确答案: B线程

  1. 编译出错
  2. eE
  3. Ee
  4. eE1eE3eE5
  5. Ee1Ee3Ee5
因为arr[0] =0,因此在进入 test()方法里面会在第一个if 上抛出一个 NullPointerException,接着会执行 finally 的语句, (finally语句先于 return 和 throw语句执行),输出一个'e,而后回到 main方法中,因为捕捉到异常,因此进入到catch语句中,而后打印一个'E',因此最终结果为"eE"
这题主要是2点:1.finally中的语句必定会执行。 2.是catch捕获到异常后程序结束。