2020

您所在的位置:网站首页 下面关于jvm说法不准确的是 2020

2020

2024-07-10 12:15| 来源: 网络整理| 查看: 265

1、下面程序的运行结果是  B

String str1 = "hello"; String str2 = "he" + new String("llo"); System.err.println(str1 == str2);

A、true B、false C、exception D、无输出

解析:

String str1 = "hello";这里的str1指的是方法区的字符串常量池中的“hello”,编译时期就知道的; String str2 = "he" + new String("llo");这里的str2必须在运行时才知道str2是什么,所以它是指向的是堆里定义的字符串“hello”,所以这两个引用是不一样的。

 

 

2、以下程序运行的结果为 ( A  )

public class Example extends Thread{

@Override

    public void run(){

        try {

            Thread.sleep(1000);

        } catch (InterruptedException e){

            e.printStackTrace();

        }

        System. out .print( "run" );

    }

    public static void main(String[] args){

        Example example= new Example();

        example.run();

        System. out .print( "main" );

    } }   A、run main B、main run C、main D、run

E、不能确定

解析:

因为Example的run方法里面休眠了100ms,在当今电脑计算性能过剩的时代,如果是多线程启动,main方法肯定会打印出了main。

为啥是runmain而不是mainrun呢?

因为启动线程是调用start方法。 把线程的run方法当普通方法,就直接用实例.run()执行就好了。

没有看到start。所以是普通方法调用。

 

 

 

3、用户不能调用构造方法,只能通过new关键字自动调用。(B)

A、正确 B、错误

解析:

在类内部可以用户可以使用关键字this.构造方法名()调用(参数决定调用的是本类对应的构造方法) 在子类中用户可以通过关键字super.父类构造方法名()调用(参数决定调用的是父类对应的构造方法。) 反射机制对于任意一个类,都能够知道这个类的所有属性和方法,包括类的构造方法。

 

 

4、子类要调用继承自父类的方法,必须使用super关键字。 B

A、正确 B、错误

解析:

1、子类构造函数调用父类构造函数用super 2、子类重写父类方法后,若想调用父类中被重写的方法,用super 3、未被重写的方法可以直接调用。

 

 

5、下面关于程序编译说法正确的是(C)

A、java语言是编译型语言,会把java程序编译成二进制机器指令直接运行 B、java编译出来的目标文件与具体操作系统有关 C、java在运行时才进行翻译指令 D、java编译出来的目标文件,可以运行在任意jvm上

解析:

A:.java编译成的是字节码,再被各系统的jvm翻译成本系统可以识别的机器码,这就是java一次编程多平台应用的跨平台性

B:java源文件生成的是class文件,与系统无关

C:注意字节码和机器码不是一回事 java程序在运行时字节码才会被jvm翻译成机 器码,所以说java是解释性语言

D:注意jvm的版本,好比人穿裤子,一条裤子能被任何人穿上吗

 

 

6、Java网络程序设计中,下列正确的描述是(AD)

A、Java网络编程API建立在Socket基础之上 B、Java网络接口只支持tcP以及其上层协议 C、Java网络接口只支持UDP以及其上层协议 D、Java网络接口支持IP以上的所有高层协议

 

 

7、下面哪些可能是重载的基本条件(ABD)(注意:是可能为重载的基本条件)

A、参数的类型不同 B、参数的顺序不同 C、函数的返回值类型不同 D、参数的个数不同

解析:

重载的概念是:

方法名称相同,参数个数、次序、类型不同

因此重载对返回值没有要求,可以相同,也可以不同

但是如果参数的个数、类型、次序都相同,方法名也相同,仅返回值不同,则无法构成重载

 

 

 

8、在java中重写方法应遵循规则的包括(BC)

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

解析:

方法的重写(override)两同两小一大原则: 方法名相同,参数类型相同 子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限。   注:A选项错误,是因为只有大于,没说明等于。       9、Java1.8版本之前的前提,Java特性中,abstract class和interface有什么区别(D ) A、抽象类可以有构造方法,接口中不能有构造方法 B、抽象类中可以有普通成员变量,接口中没有普通成员变量 C、抽象类中不可以包含静态方法,接口中可以包含静态方法 D、一个类可以实现多个接口,但只能继承一个抽象类。

解析:

在JDK1.8之前的版本(不包括JDK1.8),接口中不能有静态方法,抽象类中因为有普通方法,故也可以有静态方法。

在JDK1.8后(包括JDK1.8),在抽象类中依旧可以有静态方法,同时在接口中也可以定义静态方法了。

 

 

 

10、以下JAVA程序的运行结果是什么(  D )

public static void main(String[] args) { Object o1 = true ? new Integer(1) : new Double(2.0); Object o2; if (true) {              o2 = new Integer(1); } else { o2 = new Double(2.0); } System.out.print(o1); System.out.print(" ");          System.out.print(o2); }   A、1 1 B、1.0 1.0 C、1 1.0 D、1.0 1

解析:

三元操作符类型的转换规则:1.若两个操作数不可转换,则不做转换,返回值为Object类型2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换,int类型转换为long类型,long类型转换为float类型等。3.若两个操作数中有一个是数字S,另外一个是表达式,且其类型标示为T,那么,若数字S在T的范围内,则转换为T类型;若S超出了T类型的范围,则T转换为S类型。

4.若两个操作数都是直接量数字,则返回值类型为范围较大者   符合4,所以选D.       11、关于Java内存区域下列说法不正确的有哪些   BC A、程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示器,每个线程都需要一个独立的程序计数器. B、Java虚拟机栈描述的是java方法执行的内存模型,每个方法被执行的时候都会创建一个栈帧,用于存储局部变量表、类信息、动态链接等信息 C、Java堆是java虚拟机所管理的内存中最大的一块,每个线程都拥有一块内存区域,所有的对象实例以及数组都在这里分配内存。 D、方法区是各个线程共享的内存区域,它用于存储已经被虚拟机加载的常量、即时编译器编译后的代码、静态变量等数据。

解析:

A.程序计数器是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的信号指示器(偏移地址),Java编译过程中产生的字节码有点类似编译原理的指令,程序计数器的内存空间存储的是当前执行的字节码的偏移地址,每一个线程都有一个独立的程序计数器(程序计数器的内存空间是线程私有的),因为当执行语句时,改变的是程序计数器的内存空间,因此它不会发生内存溢出 ,并且程序计数器是jvm虚拟机规范中唯一一个没有规定 OutOfMemoryError 异常 的区域;   B.java虚拟机栈:线程私有,生命周期和线程一致。描述的是 Java 方法执行的内存模型:每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行结束,就对应着一个栈帧从虚拟机栈中入栈到出栈的过程。  没有类信息,类信息是在方法区中

C.java堆:对于绝大多数应用来说,这块区域是 JVM 所管理的内存中最大的一块。线程共享,主要是存放对象实例和数组

  D.方法区:属于共享内存区域,存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

 

 

12、下列说法错误的有( ACD)

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

解析:

首先: 成员方法又称为实例方法 静态方法又称为类方法 其次: a,静态方法中没有this指针 c,可以通过类名作用域的方式调用Class::fun(); d,太绝对化了,在类中申请一个类对象或者参数传递一个对象或者指针都可以调用;

 

 

 

13、HashSet子类依靠()方法区分重复元素。  C

A、toString(),equals() B、clone(),equals() C、hashCode(),equals() D、getClass(),clone()

解析:

HashSet内部使用Map保存数据,即将HashSet的数据作为Map的key值保存,这也是HashSet中元素不能重复的原因。

而Map中保存key值前,会去判断当前Map中是否含有该key对象,内部是先通过key的hashCode,确定有相同的hashCode之后,再通过equals方法判断是否相同。

 

 

14、以下程序的运行结果是? A

 

 

A、foobar B、barfoo C、foobar或者barfoo都有可能 D、Bar E、Foo F、程序无法正常运行

解析:

答案是 A foobar 这道题是考线程的调用情况,线程的启动方式只能通过start这种方式启动才能真正的实现多线程的效果,如果是手动调用run方法和普通方法调用没有区别,所以这个还是按照顺序执行首先执行run方法之后,执行输出语句所以最终得到结果foobar.

 

 

15、在try的括号里面有return一个值,那在哪里执行finally里的代码? B

A、不执行finally代码 B、return前执行 C、return后执行

解析:

https://www.ibm.com/developerworks/cn/java/j-lo-finally/

 

 

 

16、关于访问权限说法正确 的是 ? (B )

A、外部类前面可以修饰public,protected和private B、成员内部类前面可以修饰public,protected和private C、局部内部类前面可以修饰public,protected和private D、以上说法都不正确

解析:

( 1 )对于外部类而言,它也可以使用访问控制符修饰,但外部类只能有两种访问控制级别: public 和默认。因为外部类没有处于任何类的内部,也就没有其所在类的内部、所在类的子类两个范围,因此 private 和 protected 访问控制符对外部类没有意义。

( 2 )内部类的上一级程序单元是外部类,它具有 4 个作用域:同一个类( private )、同一个包( protected )和任何位置( public )。

( 3 ) 因为局部成员的作用域是所在方法,其他程序单元永远不可能访问另一个方法中的局部变量,所以所有的局部成员都不能使用访问控制修饰符修饰。

 

 

 

17、在一个基于分布式的游戏服务器系统中,不同的服务器之间,哪种通信方式是不可行的(A)?

A、管道 B、消息队列 C、高速缓存数据库 D、套接字

解析:

对于管道,有下面这几种类型: ①普通管道(PIPE):通常有两种限制,一是单工,即只能单向传输;二是血缘,即常用于父子进程间(或有血缘关系的进程间)。

②流管道(s_pipe):去除了上述的第一种限制,实现了双向传输。

③命名管道(name_pipe):去除了上述的第二种限制,实现了无血缘关系的不同进程间通信。 显然,要求是对于不同的服务器之间的通信,是要要求全双工形式的,而管道只能是半双工,虽然可以双向,但是同一时间只能有一个方向传输,全双工和半双工的区别可以如下图示理解:

 

 

 

18、关于java中的数组,下面的一些描述,哪些描述是准确的:(ACF)

A、数组是一个对象,不同类型的数组具有不同的类 B、数组长度是可以动态调整的 C、数组是一个连续的存储结构 D、一个固定长度的数组可类似这样定义:int array[100] E、两个数组用equals方法比较时,会逐个便利其中的元素,对每个元素进行比较 F、可以二维数组,且可以有多维数组,都是在java中合法的。

解析:

这个E选项是错的。

public static void main(String[] args) { int[] a = {1,2,3,4,5};int[] b = {1,2,3,4,5};System.out.println(a.equals(b));}

图片说明

进方法内部:图片说明明显是Object里面的equals();

 

 

19、下列说法正确的有( C)

A、class中的constructor不可省略 B、constructor必须与class同名,但方法不能与class同名 C、constructor可在一个对象被new时执行 D、一个class只能定义一个constructor

 解析:

constructor表示构造方法。

 

 

20、以下哪个类包含方法flush()?(B)

A、InputStream B、OutputStream C、A 和B 选项都包含 D、A 和B 选项都不包含

解析:

flush()函数强制将缓冲区中的字符流、字节流等输出,目的是如果输出流输出到缓冲区完成后,缓冲区并没有填满,那么缓冲区将会一直等待被填满。所以在关闭输出流之前要调用flush()。

 

 

 

21、下面有关servlet service描述错误的是?     B

A、不管是post还是get方法提交过来的连接,都会在service中处理 B、doGet/doPost 则是在 javax.servlet.GenericServlet 中实现的 C、service()是在javax.servlet.Servlet接口中定义的 D、service判断请求类型,决定是调用doGet还是doPost方法

解析:

doGet/doPost 则是在 javax.servlet.http.HttpServlet 中实现的。

 

 

22、以下程序的输出结果为  D

class Base{     public Base(String s){         System.out.print("B");     } } public class Derived extends Base{     public Derived (String s) {         System.out.print("D");     }     public static void main(String[] args){         new Derived("C");     } }   A、BD B、DB C、C D、编译错误

解析:

子类构造方法在调用时必须先调用父类的,由于父类没有无参构造,必须在子类中显式调用,修改子类构造方法如下即可: public Derived(String s){    super("s");    System.out.print("D"); }

 

 

 

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3