2020 |
您所在的位置:网站首页 › 下面关于jvm说法不准确的是 › 2020 |
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、runE、不能确定 解析: 因为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 |