Java错题合集(5)

时间:2024-03-05 18:30:24

1、有关jdbc statement的说法正确的是?

JDBC提供了Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程

对于PreparedStatement来说,数据库可以使用已经编译过及定义好的执行计划,由于 PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象”

PreparedStatement可以阻止常见的SQL注入式攻击

2、执行完以下代码 int [ ] x = new int[10] ;后,说明是正确的( )

x[9]为0

解析:
数组引用类型的变量的默认值为 null。当数组变量的实例后,如果没有没有显示的为每个元素赋值,Java 就会把该数组的所有元素初始化为其相应类型的默认值。
int型的默认值为0

3、哪个事件会导致线程销毁?

run()方法的执行结束

4、这条语句一共创建了多少个对象:String s="welcome"+"to"+360;

1

5、如果希望监听TCP端口9000,服务器端应该怎样创建socket?

new ServerSocket(9000);

6、哪几个函数 public void example(){....} 的重载函数?()

public void example(int m){...}

public int example(int m,float f){...}

解析:
java重载的时候以参数个数和类型作为区分,方法名相同,返回类型可以相同也可以不同,但不以返回类型作为区分。

7、哪个是合法的 Java 标识符?( )

FirstJavaApplet

First_Applet

8、不是 Java 关键字的是 ( )

false

sizeof

9、不能用来修饰interface的有( )(仅限外部接口)

private

protected

static

10、关于Java中的数组,描述是准确的

数组是一个对象,不同类型的数组具有不同的类

数组是一个连续的存储结构

可以二维数组,且可以有多维数组,都是在Java中合法的

11、容器中,哪些容器按 key 查找的复杂度为 O(log(n)) ()

std::multimap

std::map

解析:
STL库中,map和multimap底层都是红黑树实现的,两者的不同在于multimap允许重复的可以,而map中不行。
红黑树的查找复杂度为O(log(n))
unodered_map/_set底层是哈希表实现的,查找复杂度为O(1)

12、哪几种方式可用来实现线程间通知和唤醒

Object.wait/notify/notifyAll

Condition.await/signal/signalAll

13、Java语言中,创建数组的正确语句

float f[][] = new float[6][6];

float []f[] = new float[6][6];

float [][]f = new float[6][6];

float [][]f = new float[6][];

14、局部内部类可以用哪些修饰符修饰?

abstract

final

解析:
局部内部类是放在代码块或方法中的,不能有访问控制修饰符,且不能用static修饰

15、Java.Thread的方法resume()负责重新开始被以下哪个方法中断的线程的执行()。

suspend

16、Hashtable 和 HashMap 的区别是:

HashMap 是内部基于哈希表实现,该类继承AbstractMap,实现Map接口

Hashtable 线程安全的,而 HashMap 是线程不安全的

Properties 类 继承了 Hashtable 类,而 Hashtable 类则继承Dictionary 类

HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。

17、一个以”.java”为后缀的源文件

只能有一个与文件名相同的类,可以包含其他类

解析:
当编写一个java源代码文件时,此文件通常被称为编译单元(有时也被称为转译单元)。每个编译单元都必须有一个后缀名.java,而在编译单元内则可以有一个public类,该类的名称必须与文件的名称相同(包括大小写,但不包括文件的后缀名.java)。每个编译单元只能有一个public类,否则编译器就不会接受。如果在该编译单元之中还有额外的类的话,那么在包之外的世界是无法看见这些类的,这是因为它们不是public类,而且它们主要用来为主public类提供支持。            --《Java 编程思想》
注:public类不是必须的,但是如果源文件中有一个(只能有一个)public类的话,文件名必须与这个public类同名,原因 是为了方便虚拟机在相应的路径中找到相应的类所对应的字节码文件。所以在没有public类的Java文件中,文件名和类名都没什么联系。

18、 有关线程的叙述正确的是

线程通过使用synchronized关键字可获得对象的互斥锁定。

19、Java的跨平台特性是指它的源代码可以在多个平台运行

错误

解析:
Java的跨平台特性是因为JVM的存在, 它可以执行.class字节码文件,而不是.java源代码

20、在Java中,HashMap中是用哪些方法来解决哈希冲突的?

链地址法

21、创建一个标识有“关闭”标签的语句是 ( ) 。

Label  b = new  Label(“关闭”);

22、关于包(package)的描述,正确的是

定义在同一个包(package)内的类可以不经过import而直接相互使用。

23、关于ASCII码和ANSI码,说法正确的是

标准ASCII只使用7个bit

在简体中文的Windows系统中,ANSI就是GB2312

ASCII码是ANSI码的子集

24、说法是正确的()

SimpleDateFormat是线程不安全的

25、如果希望监听TCP端口9000,服务器端应该怎样创建socket?

new ServerSocket(9000);

解析:
ServerSocket  (int port)
创建一个serversocket 绑定在特定的端口

Socket(InetAddress address, int port)
创建一个socket流,连接到特定的端口和ip地址

26、java8中,哪个类用到了解决哈希冲突的开放定址法

ThreadLocal

27、关于面向对象的一些理解哪些是正确的

面向对象的最重要的特性是支持继承、封装和多态

系统设计应该遵循开闭原则,系统应该稳定不不可修改,但应支持通过继承、组合等方式进行扩展

面向对象设计时,每个类的职责应该单一,不要再一个类中引入过多的接口

过程式语言和面向对象的语言各有其优势,过程式语言更加灵活,面向对象语言更加强调抽象和封装

Java和C++都是静态类型的面向对象编程语言

28、Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,关于Java反射的描述,哪些是正确的

通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法

通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员

Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多

29、哪种流可以用于字符输入:

java.io.inputStreamReader

解析:
inputStream是字节流输入流;而inputStreamReader是对字符流的处理,inputStreamReader将字符流处理成字节流

30、事务隔离级别是由谁实现的?

数据库系统

31、String s = new String("xyz");创建了几个StringObject?

两个或一个都有可能

解析:
1.String对象的两种创建方式:
第一种方式: String str1 = "aaa"; 是在常量池中获取对象("aaa" 属于字符串字面量,因此编译时期会在常量池中创建一个字符串对象),
第二种方式: String str2 = new String("aaa") ; 一共会创建两个字符串对象一个在堆中,一个在常量池中(前提是常量池中还没有 "aaa" 字符串对象)。
System.out.println(str1==str2);//false

2.String类型的常量池比较特殊。它的主要使用方法有两种:
直接使用双引号声明出来的String对象会直接存储在常量池中。
如果不是用双引号声明的String对象,可以使用 String 提供的 intern 方法。 String.intern() 是一个 Native 方法,它的作用是: 如果运行时常量池中已经包含一个等于此 String 对象内容的字符串,则返回常量池中该字符串的引用; 如果没有,则在常量池中创建与此 String 内容相同的字符串,并返回常量池中创建的字符串的引用。
String s1 = new String("AAA");
String s2 = s1.intern();
String s3 = "AAA";
System.out.println(s2);//AAA
System.out.println(s1 == s2);//false,因为一个是堆内存中的String对象一个是常量池中的String对象,
System.out.println(s2 == s3);//true, s2,s3指向常量池中的”AAA“

32、哪些一个是赋值符号?

+=

<<=

>>>=

解析:
<<表示左移位
>>表示带符号右移位
>>>表示无符号右移

33、URL u =new URL("http://www.123.com");。如果www.123.com不存在,则返回______。

http://www.123.com

解析:
我们在执行URL u =new URL("http://www.123.com");这句话的时候确实要抛出异常,但是这个异常属于IOException,不管网址是否存在,最后都会返回该网址的一个连接,打印出来就是该网址。

34、哪些具体实现类可以用于存储键,值对,并且方法调用提供了基本的多线程安全支持:( )

java.util.ConcurrentHashMap

java.util.Hashtable

35、关于构造方法的叙述中,正确的是

java语言规定构造方法名与类名必须相同

java语言规定构造方法没有返回值,但不同void声明

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

可以有不同的访问修饰符

参数列表必须完全与被重写的方法相同

37、关于final关键字说法正确的是()

final修饰的类不能被继承

final修饰的变量不允许被再次赋值

38、true、false、null、sizeof、goto、synchronized 哪些是Java关键字?

goto

synchronized

39、关于运行时常量池,说法是正确的

运行时常量池大小受方法区大小的影响

存放了编译时期生成的各种字面量

存放编译时期生成的符号引用

40、jvm中垃圾回收分为scanvenge gc和full GC,其中full GC触发的条件可能有哪些

老年代满

持久代满

System.gc()

41、下面哪些类可以被继承? Java.lang.Thread、java.lang.Number、java.lang.Double、java.lang.Math、 java.lang.ClassLoader

Thread

Number

ClassLoader

42、截止JDK1.8版本,java并发框架支持锁包括?

读写锁

自旋锁

乐观锁

43、说法正确的有

环境变量可在编译source code时指定

javac一次可同时编译数个Java源文件

javac.exe能指定编译结果要置于哪个目录(directory)

44、属于容器的组件有

JPanel

45、字符界面下接受用户从键盘输入,需要import的包是

java.io包

46、如果一个list初始化为{5,3,1},执行以下代码后,其结果为()?
nums.add(6);
nums.add(0,4);
nums.remove(1);

[4, 3, 1, 6]

47、关于final说法正确的是? ( )

final类的方法能否被同一个包的类访问不是由final决定

48、非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完全一致

错误

解析:
实际上这道题考查的是两同两小一大原则:
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限。

49、正确的 Java 语言标识符是

Sky

$Computer

NULL

50、java程序内存泄露的最直接表现是

程序抛内存控制的Exception

51、有关servlet和cgi的描述,说法正确的是

servlet处于服务器进程中,它通过多线程方式运行其service方法

CGI对每个请求都产生新的进程,服务完成后就销毁

servlet在易用性上强于cgi,它提供了大量的实用工具例程,例如自动地解析和解码HTML表单数据、读取和设置HTTP头、处理Cookie、跟踪会话状态等

52、叙述那个是正确的

在java中,我们可以用违例(Exception)来抛出一些并非错误的消息,但这样比直接从函数返回一个结果要更大的系统开销。

53、Java 提供的事件处理模型是一种人机交互模型。它有三个基本要素

事件源

事件对象

事件监听器

54、关于Java描述正确的有

String类是一个final类

Class类可以装载其它类

55、Java.Thread的方法resume()负责重新开始被以下哪个方法中断的线程的执行

suspend

56、关于java中的数组,下面的一些描述,描述是准确的

数组是一个对象,不同类型的数组具有不同的类

数组是一个连续的存储结构

java中不存在 int *a这样的东西做数组的形参

57、character流和byte流的区别不包括

每次读入的字节数不同

前者带有缓冲,后者没有。

二者没有区别,可以互换。

58、关于JAVA的垃圾回收机制,正确的是

垃圾回收不能确定具体的回收时间

解析:
java提供了一个系统级的线程,即垃圾回收器线程。用来对每一个分配出去的内存空间进行跟踪。当JVM空闲时,自动回收每块可能被回收的内存,GC是完全自动的,不能被强制执行。程序员最多只能用System.gc()来建议执行垃圾回收器回收内存,但是具体的回收时间,是不可知的。当对象的引用变量被赋值为null,可能被当成垃圾。

59、程序读入用户输入的一个值,要求创建一个自定义的异常,如果输入值大于 10 ,使用 throw 语句显式地引发异常,异常输出信息为 ”something’swrong!” ,语句为

if(i>10)throw new Exception("something’swrong!");

60、对于Java中异常的描述正确的是

Java中的可不检测(unchecked)异常可能来自RuntimeException类或其子类。

61、有关java object默认的基本方法,说法正确的是

equals(Object obj) 指示某个其他对象是否与此对象“相等”

wait() 导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法

toString() 返回该对象的字符串表示

62、以下哪个类包含方法flush()

OutputStream

63、判断对错。在java的多态调用中,new的是哪一个类就是调用的哪个类的方法

错

解析:
java多态有两种情况:重载和覆写
在覆写中,运用的是动态单分配,是根据new的类型确定对象,从而确定调用的方法;
在重载中,运用的是静态多分派,即根据静态类型确定对象,因此不是根据new的类型确定调用的方法

64、有关JAVA异常类的描述,说法正确的是

异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception

非RuntimeException一般是外部错误(非Error),其必须被 try{}catch语句块所捕获

Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉

65、在开发中使用泛型取代非泛型的数据类型(比如用ArrayList取代ArrayList),程序的运行时性能会变得更好

错误

解析:
使用泛型的好处
1,类型安全。 泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。
 

2,消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。

 

3,潜在的性能收益。 泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的 JVM 的优化带来可能。由于泛型的实现方式,支持泛型(几乎)不需要 JVM 或类文件更改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是更能确保类型安全而已。

所以泛型只是提高了数据传输安全性,并没有改变程序运行的性能

66、哪些内存区域属于JVM规范

方法区

程序计数器

虚拟机栈

67、对于线程局部存储TLS(thread local storage),表述正确的是

解决多线程中的对同一变量的访问冲突的一种技术

TLS会为每一个线程维护一个和该线程绑定的变量的副本

Java平台的java.lang.ThreadLocal是TLS技术的一种实现

**68、关于equals和hashCode描述正确的是 **

两个obj,如果equals()相等,hashCode()一定相等(符合代码规范的情况下)

两个obj,如果hashCode()相等,equals()不一定相等

两个不同的obj, hashCode()可能相等

69、在java中重写方法应遵循规则的包括

访问修饰符的限制一定要大于被重写方法的访问修饰符

必须具有不同的参数列表

70、 方式实现的单例是线程安全的

枚举

静态内部类

双检锁模式

饿汉式

71、在运行时,由java解释器自动引入,而不用import语句引入的包是

java.lang

72、关于hibernate核心接口说明正确的是

Configuration 接口:配置Hibernate,根据其启动hibernate,创建SessionFactory 对象

Query 和Criteria 接口:执行数据库的查询

Transaction 接口:管理事务

73、有关jsp中静态include和动态include的区别,说法正确的是

动态INCLUDE:用jsp:include动作实现 

静态INCLUDE:用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>

静态include的结果是把其他jsp引入当前jsp,两者合为一体;动态include的结构是两者独立,直到输出时才合并

74、关于struts框架,说法是正确的?

Struts框架基于MVC模式

75、对于子类的构造函数说明,叙述中正确的是

子类不能继承父类的无参构造函数。

子类可以在自己的构造函数中使用super关键字来调用父类的含参数构造函数,但这个调用语句必须是子类构造函数的第一个可执行语句。

在创建子类的对象时,若不含带参构造函数,将先执行父类的无参构造函数,然后再执行自己的无参构造函数。

76、JSP分页代码中,哪个步骤次序是正确的

先取总记录数,得到总页数,最后显示本页的数据。

77、变量a是一个64位有符号的整数,初始值用16进制表示为:0Xf000000000000000; 变量b是一个64位有符号的整数,初始值用16进制表示为:0x7FFFFFFFFFFFFFFF。 则a-b的结果用10进制表示为多少

2^62+2^61+2^60+1

78、有可能在某个进制下成立

13*14=204

解析:
八进制13转十进制:1*8+3=11
八进制14转十进制:1*8+4=12
11*12=132
八进制204转十进制:2*8*8+0*8+4=132 
所以:(1*x¹+3*x°)* (1*x¹+4*x°) = 2*x²+0*x¹+4*x°
             (x+3)*(x+4)=2x²+4
             x²+7x+12=2x²+4
             x²-7x=8
             x*(x-7)=8
             x₁=8    x₂=-1
  解二元一次方程组 得到   8    【x代表进制】

79、java中提供了哪两种用于多态的机制

通过子类对父类方法的覆盖实现多态

利用重载来实现多态.即在同一个类中定义多个同名的不同方法来实现多态。

80、关于JSP生命周期的叙述,为真的是?

JSP会先解释成Servlet源文件,然后编译成Servlet类文件

每当用户端运行JSP时,jsp service()方法都会运行一次

81、哪些方法是针对循环优化进行的

强度削弱

删除归纳变量

代码外提

82、关于Java的一些概念,描述是正确的

通过try … catch … finally语句,finally中的语句部分无论发生什么异常都会得到执行

Java通过synchronized进行访问的同步,synchronized作用非静态成员方法和静态成员方法上同步的目标是不同的

83、说法正确的是

对于局部内部类,只有在方法的局部变量被标记为final或局部变量是effctively final的,内部类才能使用它们

成员内部类位于外部类内部,可以直接调用外部类的所有方法(静态方法和非静态方法)

84、关于java中的数组,下面的一些描述,哪些描述是准确的

数组是一个对象,不同类型的数组具有不同的类

数组是一个连续的存储结构

java中不存在 int *a这样的东西做数组的形参

85、哪几种方式可用来实现线程间通知和唤醒

Object.wait/notify/notifyAll

Condition.await/signal/signalAll

86、判断一块内存空间是否符合垃圾收集器收集的标准有哪些

给对象赋予了空值null,以下再没有调用过

对象重新分配了内存空间

给对象赋予了新值

87、哪个命令能够获取JVM的内存映像

jmap

88、instanceof运算符能够用来判断一个对象是否为:

一个类的实例

一个实现指定接口的类的实例

一个子类的实例

89、下列哪个选项是Java调试器?如果编译器返回程序代码的错误,可以用它对程序进行调试

jdb.exe

90、说法正确的是

EJB容器发生错误,persistent方式下JMS容器仍然会将消息发送

91、在创建派生类对象,构造函数的执行顺序

基类构造函数,派生类对象成员构造函数,派生类本身的构造函数

**92、不是 Java 关键字的是 **

false

sizeof

93、说法正确的是

一个线程调用yield方法,可以使具有相同优先级线程获得处理器

在Java中,高优先级的可运行的线程会抢占低优先级线程的资源

94、说法正确的是

JAVA程序的main方法必须写在类里面

JAVA程序中可以有多个名字为main方法

95、有关 JAVA 异常类的描述,说法正确的有

异常的继承结构:基类为 Throwable,Error 和 Exception 。实现 Throwable, RuntimeException 和 IOException 等继承 Exception

非 RuntimeException 一般是外部错误(不考虑Error的情况下),其可以在当前类被 try{}catch 语句块所捕获

Error 类体系描述了 Java 运行系统中的内部错误以及资源耗尽的情形,Error 不需要捕捉

96、Java程序的种类有

Applet

Application

Servlet

解析:
Java程序的种类有:

(a)内嵌于Web文件中,由浏览器来观看的_Applet

(b)可独立运行的 Application

(c)服务器端的 Servlets

97、关于Java中的数组,下面的一些描述,描述是准确的

数组是一个对象,不同类型的数组具有不同的类

数组是一个连续的存储结构

可以二维数组,且可以有多维数组,都是在Java中合法的

98、如果定义一种表达式结构:(+ 6 3)的值为9,(- 6 3)的值为3,( 6 3)的值为18,(/ 6 3)的值为2;那么对于表达式( (- 16 (* 3 2 2 **)) (+ 5 (/ 6 (- 5 3))))输出的结果为____。

32

99、子类A继承父类B, A a = new A(); 则父类B构造函数、父类B静态代码块、父类B非静态代码块、子类A构造函数、子类A静态代码块、子类A非静态代码块 执行的先后顺序是

父类B静态代码块->子类A静态代码块->父类B非静态代码块->父类B构造函数->子类A非静态代码块->子类A构造函数

100、枚举(enum)属于原始数据类型(primitive type)

错误

解析:
在Java中,变量有两种类型,一种是原始类型,一种是引用类型。

原始类型一共有8种,它们分别是char,boolean,byte,short,int,long,float,double。在Java API中,有它们对应的包装类,分别是(首字母大写)Character,Boolean,Byte,Short,Integer,Long,Float,Double(char,int的变化稍微大点)。

JAVA JVM对于不同的原始类型会分配不同的存储空间,具体分配如下:

byte  : 1个字节    8位
最大值: 127   (有符号)

short : 2个字节    16位                            32767

int :     4个字节    32位                            2147483647

long:   8个字节    64位                            9223372036854775807

float:   4个字节    32位                            3.4028235E38

double:8个字节   64位                            1.7976931348623157E308

枚举(enum)类型是Java 5新增的特性,它是一种新的类型,允许用常量来表示特定的数据片断,而且全部都以类型安全的形式来表示,是特殊的类,可以拥有成员变量和方法。

101、从内存实现或者反射的角度来看,关于继承的说法正确的是()。注:此处的继承不代表能调用

子类将继承父类的所有的数据域和方法

102、关于java集合说法正确的有哪些

Collection接口是List接口和Set接口的父接口,通常情况下不被直接使用

103、在java中,标识符合法的有

$Usdollars

104、对于构造方法,叙述正确的是

构造方法的优先级一般比代码块低。

构造方法的主要作用是完成对类的对象的初始化工作。

一般在创建新对象时,系统会自动调用构造方法。

105、正确的有

call by value不会改变实际参数的数值

call by reference不能改变实际参数的参考地址

call by reference能改变实际参数的内容

106、关于面向对象的一些理解哪些是正确的

面向对象的最重要的特性是支持继承、封装和多态

系统设计应该遵循开闭原则,系统应该稳定不不可修改,但应支持通过继承、组合等方式进行扩展

面向对象设计时,每个类的职责应该单一,不要再一个类中引入过多的接口

过程式语言和面向对象的语言各有其优势,过程式语言更加灵活,面向对象语言更加强调抽象和封装

Java和C++都是静态类型的面向对象编程语言

107、说法正确的是

对于局部内部类,只有在方法的局部变量被标记为final或局部变量是effctively final的,内部类才能使用它们

成员内部类位于外部类内部,可以直接调用外部类的所有方法(静态方法和非静态方法)

108、判断一块内存空间是否符合垃圾收集器收集的标准有哪些

给对象赋予了空值null,以下再没有调用过

对象重新分配了内存空间

给对象赋予了新值

109、JDK提供的用于并发编程的同步器有哪些

Semaphore

CyclicBarrier

CountDownLatch

110、character流和byte流的区别包括

前者是字符读入,后者是字节读入。