1、装箱、拆箱操作发生在: ()
类与对象之间
对象与对象之间
引用类型与值类型之间
引用类型与引用类型之间
温馨提示 通过 装箱 和 拆箱 操作,能够在值类型和引用类型中架起一做桥梁。换言之,可以轻松的实现值类型与引用类型的互相转换,装箱和拆箱能够统一考察系统,任何类型的值最终都可以按照对象进行处理。 装箱——值类型转换为引用类型;拆箱——引用类型转换为值类型。
通俗的讲,就是基本数据类型和包装类之间的转换。如: int 类型和 Integer 类的转换 基本数据类型转化成包装类是装箱 (如: int --> Integer)。 包装类转化成基本数据类型就是拆箱 (如:Integer --> int)。 包装类就是引用类型,基本数据类型就是值类型。所以选C
2、执行完以下代码 int [ ] x = new int[10] ;后,以下哪项说明是正确的( )
x[9]为0
x[9]未定义
x[10]为0
x[0]为空
温馨提示 数组引用类型的变量的默认值为 null。当数组变量的实例后,如果没有没有显示的为每个元素赋值,Java 就会把该数组的所有元素初始化为其相应类型的默认值。 int型的默认值为0
3、类A1和类A2在同一包中,类A2有个protected的方法testA2,类A1不是类A2的子类(或子类的子类),类A1可以访问类A2的方法testA2。( )
正确
错误
温馨提示
4、关于Java的抽象类、接口,以下描述错误的是?
抽象类不一定含有抽象方法,接口中的方法都是抽象方法
一个类只能继承一个抽象类,但可以实现多个接口;一个接口可以继承多个接口
抽象类和接口中的方法都没有方法体
抽象类可以含有私有成员变量,接口不含有私有成员变量
温馨提示 选择C。 A----------抽象类不一定含有抽象方法,接口中的方法都是抽象方法。 接口中的方法默认修饰符有public abstract。 B----------一个类只能继承一个一个抽象类,但可以实现多个接口;一个接口可以继承多个接口。 Java里类是单继承的,接口是可以多继承的,用关键字extends。 C----------抽象类和接口中的方法都没有方法体。 抽象类中的方法是可以有方法体的。JDK1.8之后,接口中的方法也可以有方法体,用default关键字修饰方法。 D----------抽象类可以含有私有成员变量,接口不含有私有成员变量。 接口中的成员变量都是public static final的,一般用作常量。
5、Java中的集合类包括ArrayList、LinkedList、HashMap等类,下列关于集合类描述正确的是()
ArrayList和LinkedList均实现了List接口
ArrayList的访问速度比LinkedList快
添加和删除元素时,ArrayList的表现更佳
HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值
温馨提示 可以直接背,具体原因看这篇文章: 立即前往
6、HashSet子类依靠()方法区分重复元素。
toString(),equals()
clone(),equals()
hashCode(),equals()
getClass(),clone()
温馨提示 HashSet的底层还是用HashMap来实现的。将Entry<K,V>的V都变成了同一个Object对象,public static final PRESENT = new Object()。 而HashMap的数据结构是数组+链表+红黑树。
调用K的hashCode方法,然后高低16位进行&运算。得到的hash值,与数组tab[](桶)的长度-1进行&运算,确定插入对象在哪一个桶上。然后调用对象的equals方法,形成链表。当链表长度大于8时,链表转红黑树。
7、下面有关JSP内置对象的描述,说法错误的是?
session对象:session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止
request对象:客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应
application对象:多个application对象实现了用户间数据的共享,可存放全局变量
response对象:response对象包含了响应客户请求的有关信息
温馨提示 application对象是共享的,多个用户共享一个,以此实现数据共享和通信 JSP内置对象和属性列举如下: 1.request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。 2.response对象 response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。 3.session对象 session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例. 4.out对象 out对象是JspWriter类的实例,是向客户端输出内容常用的对象 5.page对象 page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例 6.application对象 application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。 7.exception对象 exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象 8.pageContext对象 pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext。 9.config对象 config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)
8、关于Float,下列说法错误的是()
Float是一个类
Float在java.lang包中
Float a=1.0是正确的赋值方法
Float a= new Float(1.0)是正确的赋值方法
温馨提示 1.Float是类,float不是类. 2.查看JDK源码就可以发现Byte,Character,Short,Integer,Long,Float,Double,Boolean都在java.lang包中. 3.Float正确复制方式是Float f=1.0f,若不加f会被识别成double型,double无法向float隐式转换. 4.Float a= new Float(1.0)是正确的赋值方法,但是在1.5及以上版本引入自动装箱拆箱后,会提示这是不必要的装箱的警告,通常直接使用Float f=1.0f.
9、ArrayList list = new ArrayList(20);中的list扩充几次
0
1
2
3
温馨提示 Arraylist默认数组大小是10,扩容后的大小是扩容前的1.5倍,最大值小于Integer 的最大值减8,如果新创建的集合有带初始值,默认就是传入的大小,也就不会扩容
10、给定以下JAVA代码,这段代码运行后输出的结果是() public class Test
{
public static int aMethod(int i)throws Exception
{
try{
return i/10;
}
catch (Exception ex)
{
throw new Exception("exception in a aMethod");
}finally{
System.out.printf("finally");
}
}
public static void main(String[] args){
try
{
aMethod(0);
}
catch (Exception ex)
{
System.out.printf("exception in main");
}
System.out.printf("finished");
}
}
exception in main finished
finally finished
exception in main finally
finally exception in main finally
温馨提示 本题考的不仅仅是审题,而且是try......catch......finally块的关系,以及return与finally的执行关系。 具体执行过程: 1、先进入main函数,进入try块调用aMethod(0)方法; 2、执行aMethod()方法的try块,i/10可以正确执行,故并未抛出异常,catch块不执行,而需要执行finally(该块任何时候都要执行),故打印finally; 3、回到main函数,由于aMethod()调用成功,因此main函数的catch块同样不执行,顺序执行finally块,打印finished 因此,最终的输出结果就是:finally finished
哈哈,其实最主要的还是0是分子其实是不报错的,千万要注意看了,不要以为这个是常用的抛异常操作,直接秒选!!!
11、下面有关forward和redirect的描述,正确的是() ?
forward是服务器将控制权转交给另外一个内部服务器对象,由新的对象来全权负责响应用户的请求
执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址
执行redirect时,服务器端告诉浏览器重新去请求地址
forward是内部重定向,redirect是外部重定向
redirect默认将产生301 Permanently moved的HTTP响应
温馨提示 1.从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址. redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
2.从数据共享来说 forward:转发页面和转发到的页面可以共享request里面的数据. redirect:不能共享数据.
3.从运用地方来说 forward:一般用于用户登陆的时候,根据角色转发到相应的模块. redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
4.从效率来说 forward:高. redirect:低.
12、在Java中下面Class的声明哪些是错误的?
public abstract final class Test { abstract void method(); }
public abstract class Test { abstract final void method(); }
public abstract class Test { abstract void method() { } }
public class Test {
final void method() {
} }
温馨提示 A、final修饰的类为终态类,不能被继承,而 抽象类是必须被继承的才有其意义的,因此,final是不能用来修饰抽象类的。 B、 final修饰的方法为终态方法,不能被重写。而继承抽象类,必须重写其方法。 C、抽象方法是仅声明,并不做实现的方法。
我相信这里只有C选项会有点模糊,其实就是C选项多了大括号,似乎有方法的意思,你可以这样理解!
13、在Java语言中,下列关于字符集编码(Character set encoding)和国际化(i18n)的问题,哪些是正确的?
每个中文字符占用2个字节,每个英文字符占用1个字节
假设数据库中的字符是以GBK编码的,那么显示数据库数据的网页也必须是GBK编码的。
Java的char类型,通常以UTF-16 Big Endian的方式保存一个字符。
实现国际化应用常用的手段是利用ResourceBundle类
温馨提示 A 显然是错误的,Java一律采用Unicode编码方式,每个字符无论中文还是英文字符都占用2个字节。 B 也是不正确的,不同的编码之间是可以转换的,通常流程如下: 将字符串S以其自身编码方式分解为字节数组,再将字节数组以你想要输出的编码方式重新编码为字符串。 例:String newUTF8Str = new String(oldGBKStr.getBytes("GBK"), "UTF8"); C 是正确的。Java虚拟机中通常使用UTF-16的方式保存一个字符 D 也是正确的。ResourceBundle能够依据Local的不同,选择性的读取与Local对应后缀的properties文件,以达到国际化的目的。
14、关于ThreadLocal类 以下说法正确的是
ThreadLocal继承自Thread
ThreadLocal实现了Runnable接口
ThreadLocal重要作用在于多线程间的数据共享
ThreadLocal是采用哈希表的方式来为每个线程都提供一个变量的副本
ThreadLocal保证各个线程间数据安全,每个线程的数据不会被另外线程访问和破坏
解析 1、ThreadLocal的类声明: public class ThreadLocal 可以看出ThreadLocal并没有继承自Thread,也没有实现Runnable接口。所以AB都不对。 2、ThreadLocal类为每一个线程都维护了自己独有的变量拷贝。每个线程都拥有了自己独立的一个变量。 所以ThreadLocal重要作用并不在于多线程间的数据共享,而是数据的独立,C选项错。 由于每个线程在访问该变量时,读取和修改的,都是自己独有的那一份变量拷贝,不会被其他线程访问, 变量被彻底封闭在每个访问的线程中。所以E对。 3、ThreadLocal中定义了一个哈希表用于为每个线程都提供一个变量的副本:
static class ThreadLocalMap {
static class Entry extends WeakReference<ThreadLocal> {
/** The value associated with this ThreadLocal. */
Object value;
Entry(ThreadLocal k, Object v) {
super(k);
value = v;
}
}
/**
* The table, resized as necessary.
* table.length MUST always be a power of two.
*/
private Entry[] table;
} 15、下面关于hibernate核心接口说明错误的是?
Configuration 接口:配置Hibernate,根据其启动hibernate,创建SessionFactory 对象
SessionFactory 接口:负责保存、更新、删除、加载和查询对象,是线程不安全的,避免多个线程共享同一个session,是轻量级、一级缓存
Query 和Criteria 接口:执行数据库的查询
Transaction 接口:管理事务
温馨提示 B选项中应该是Session接口而不是SessionFactory接口\
1,Configuration接口:配置Hibernate,根据其启动Hibernate,创建SessionFactory对象;
2,SessionFactory接口:初始化Hibernate,充当数据存储源的***,创建session对象,SessionFactory是 线程安全的,意味着它的同一个实例可以被应用的多个线程共享,是重量级二级缓存;
3,session接口:负责保存、更新、删除、加载和查询对象,是一个非线程安全的,避免多个线程共享一个session,是轻量级,一级缓存。
4,Transaction接口:管理事务。可以对事务进行提交和回滚;
5,Query和Criteria接口:执行数据库的查询。
16、判断对错。在java的多态调用中,new的是哪一个类就是调用的哪个类的方法。
对
错
温馨提示 java多态有两种情况:重载和覆写 在覆写中,运用的是动态单分配,是根据new的类型确定对象,从而确定调用的方法; 在重载中,运用的是静态多分派,即根据静态类型确定对象,因此不是根据new的类型确定调用的方法
17、下面有关JAVA异常类的描述,说法错误的是?
异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception
非RuntimeException一般是外部错误(非Error),其一般被 try{}catch语句块所捕获
Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉
RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须被 try{}catch语句块所捕获
温馨提示 运行时异常故名思议就是程序在运行的时候出现异常,隐含的一个前提就是程序在编译时是检测不到异常的存在,作者本人也并不知道是否自己的代码中含有运行时异常,所以根本也不可能提前使用try{}catch{}捕获.
18、以下代码执行的结果显示是多少( )? [aru_42] 这题很有意思,看不明白可以仔细看解析!
public static void main(String[] args) {
Integer i1 = 128;
Integer i2 = 128;
System.out.print((i1 == i2) + ",");
String i3 = "100";
String i4 = "1" + new String("00");
System.out.print((i3 == i4) + ",");
Integer i5 = 100;
Integer i6 = 100;
System.out.print((i5 == i6));
}
true,false,true
false,true,false
true,true,false
false,false,true
解析 代码片段
public class Test03 {
public static void main(String[] args) {
Integer f1 = 100, f2 = 100, f3 = 150, f4 = 150;
System. out.println( f1 == f2); //true
System. out.println( f3 == f4); //false
}
} 当我们给一个Integer赋予一个int类型的时候会调用Integer的静态方法valueOf 。 Integer f1 = Integer.valueOf(100); Integer f2 = Integer.valueOf(100); Integer f3 = Integer.valueOf(150); Integer f4 = Integer.valueOf(150); 思考:那么Integer.valueOf()返回的Integer是不是是重新new Integer(num);来创建的呢?如果是这样的话,那么== 比较返回都是false,因为他们引用的堆地址不一样。
具体来看看Integer.valueOf的源码
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.***[i + (-IntegerCache.low)];
return new Integer(i);
} 在IntegerCache中***数组初始化如下,存入了-128 - 127 的值
*** = new Integer[(high - low) + 1];
int j = low;
for( int k = 0; k < ***.length ; k ++)
***[k] =
***[k] = new Integer(j ++); 从上面我们可以知道给Interger 赋予的int数值在-128 - 127的时候,直接从***中获取,这些***引用对Integer对象地址是不变的,但是不在这个范围内的数字,则new Integer(i) 这个地址是新的地址,不可能一样的 .
结论:所以,Integer I = 128, 因为128超过了-128~127,i不会引用内存中的对象,会new一个新的对象。
19、下面哪些接口直接继承自Collection接口()
List
Map
Set
Iterator
温馨提示
20、下面哪几个语句正确的声明一个整型的二维数组()
int a[][]=new int[][]
int b[10][10]=new int[][]
int c[][]=new int[10][10]
int []d[]=new int[10][10]
温馨提示
21、下面关于面向对象的一些理解哪些是错误的( )(多补一题[aru_41])
面向对象的最重要的特性是支持继承、封装和多态
系统设计应该遵循开闭原则,系统应该稳定不不可修改,但应支持通过继承、组合等方式进行扩展
函数式的语言必然是面向对象的语言
面向对象设计时,每个类的职责应该单一,不要再一个类中引入过多的接口
过程式语言和面向对象的语言各有其优势,过程式语言更加灵活,面向对象语言更加强调抽象和封装
Java和C++都是静态类型的面向对象编程语言
温馨提示 动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。