1.下面哪个选项是main方法的返回类型?
正确答案: B 你的答案: B (正确)
int void Boolean static
主方法是没有返回值的,所以用void修饰;
2. 有程序片段如下,以下表达式结果为 true 的是( )
Float s=new Float(0.1f);
Float t=new Float(0.1f);
Double u=new Double(0.1);
正确答案: B 你的答案: A (错误)
s==t s.equals(t) u.equals(s) t.equals(u)
float的==比较的是地址,而equals方法重写了Object的,比较的是它的类型和值;Double的equals方法也是一样;
3.如下语句通过算术运算和逻辑运算之后i和 j的结果是( )
int i=0;
int j=0;
if((++i>0)||(++j>0)) {
//打印出i和j的值。
}
正确答案: D 你的答案: D (正确)
i=0;j=0 i=1;j=1 i=0;j=1 i=1;j=0
if语句中++i>0 与++j就行逻辑或,所以当前一个条件为真时,后一个条件就跳过了,因为if的判断已经是true,所以++i,i = 1;j = 0;
4.下面哪个不是标准Statement类?
正确答案: D 你的答案: D (正确)
Statement PreparedStatement CallableStatement BatchedStatement
statement用于将SQL语句发送到数据库,因为它是通过字符拼接SQL语句,所以存在SQL注入,所以出现了PreParedStatement,对SQL语句进行预编译,可以防止SQL注入;它是statement的子类,CallableStatement是PreParedStatement的子类,是用来调用存储过程的。 BatchedStatement用于批量操作数据库,BatchedStatement不是标准的Statement类
5.以下代码的输出的正确结果是
public class Test {
public static void main(String args[]) {
String s = “祝你考出好成绩!”;
System.out.println(s.length());
}
}
正确答案: D 你的答案: D (正确)
24 16 15 8
七个文字一个感叹号;
6. 在 main() 方法中给出的整型数组,如果将其写到一个文件中,需要( )。
正确答案: B 你的答案: B (正确)
System.out.print (buffer[i]);
DataOutputStream dout = new DataOutputStream(new FileOutputStream(this.filename));
DataInputStream din = new DataInputStream(new FileInputStream(this.filename));。
System.in.read(buffer)。
outputstream 是输出流,相对于电脑来说,也就是将数组写进电脑的文件中;
inputstream是输入流,用于读取;
7.关于Float,下列说法错误的是()
正确答案: C 你的答案: C (正确)
Float是一个类
Float在java.lang包中
Float a=1.0是正确的赋值方法
Float a= new Float(1.0)是正确的赋值方法
小数默认是double型,double类型值无法赋值给比它字节还小的float,会造成精度损失,所以c选型应该改为Float a = 1.0f;
8.Which lines of the following will produce an error?
byte a1 = 2, a2 = 4, a3;
short s = 16;
a2 = s;
a3 = a1 * a2;
正确答案: A 你的答案: A (正确)
Line 3 and Line 4
Line 1 only
Line 3 only
Line 4 only
题目找哪行有错,因为s = 16;也就是a2 = 16;16是int型,a2是byte型,所以会报错,a3 = 8;也是一样,高级类型向下转型需要强转;
9. 以下JAVA程序的运行结果是什么( )
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);
}
正确答案: D 你的答案: A (错误)
1 1
1.0 1.0
1 1.0
1.0 1
查看评论发现, 三元运算符会对两个结果的数据类型,进行自动的类型提升。
因此,可以把
Object o1 = true ? new Integer(1) : new Double(2.0);
看作
Object o1 = true ? new Double(1.0) : new Double(2.0);
所以o1 = 1.0
三元操作符类型的转换规则:
1.若两个操作数不可转换,则不做转换,返回值为Object类型
2.若两个操作数是明确类型的表达式(比如变量),则按照正常的二进制数字来转换,int类型转换为long类型,long类型转换为float类型等。
3.若两个操作数中有一个是数字S,另外一个是表达式,且其类型标示为T,那么,若数字S在T的范围内,则转换为T类型;若S超出了T类型的范围,则T转换为S类型。
4.若两个操作数都是直接量数字,则返回值类型为范围较大者
10. 在Java中下面Class的声明哪些是错误的?
正确答案: A B C 你的答案: A C (错误)
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() {
}
}
这个题属实是当时没注意看,只要记住final 和 abstract不能同时用,final是不让继承,而abstract抽象类就是让子类继承的;
1.下面有关java classloader说法错误的是?
正确答案: C 你的答案: C (正确)
Java默认提供的三个ClassLoader是BootStrap ClassLoader,Extension ClassLoader,App ClassLoader
ClassLoader使用的是双亲委托模型来搜索类的
JVM在判定两个class是否相同时,只用判断类名相同即可,和类加载器无关
ClassLoader就是用来动态加载class文件到内存当中用的
19
20
21
22
输出 a = 10; a = a+1 =11; a = a-1 = 10; 所以输出为 10 + 11 = 21;
3.以下哪个I / O类可以附加或更新文件
正确答案: A 你的答案: C (错误)
RandomAccessFile()
OutputStream()
DataOutputStream()
None of the above
4.下面哪个流类不属于面向字符的流()
正确答案: B C 你的答案: B D (错误)
BufferedWriter
FileInputStream
ObjectInputStream
InputStreamReader
1.try括号里有return语句, finally执行顺序
正确答案: B 你的答案: C (错误)
不执行finally代码
return前执行
return后执行
return 语句从 try 语句块中退出。在方法返回前,finally子句的内容将被执行。如果 finally 子句中也有一个 return 语句,这个返回值将会覆盖原始的返回值
2.class Value{
public int i=15;
}
public class Test{
public static void main(String argv[]){
Test t=new Test( );
t.first( );
}
public void first( ){
int i=5;
Value v=new Value( );
v.i=25;
second(v,i);
System.out.println(v.i);
}
public void second(Value v,int i){
i = 0;
v.i = 20;
Value val = new Value( );
v = val;
System.out.println(v.i+" "+i);
}
}
正确答案: A 你的答案: B (错误)
15 0 20
15 0 15
20 0 20
0 15 20
我的理解是 :由 v = val知道,传入的v 指向val,val是实例化对象,所以v.i = val.i = 15;i = 0;
由于second方法中v.i = 20;所以此时v.i被赋值为20;
3.有关线程的哪些叙述是对的()
正确答案: B C D 你的答案: B D (错误)
一旦一个线程被创建,它就立即开始运行。
使用start()方法可以使一个线程成为可运行的,但是它不一定立即开始运行。
当一个线程因为抢先机制而停止运行,它可能被放在可运行队列的前面。
一个线程可能因为不同的原因停止并进入就绪状态。
若多个线程都处于就绪状态,则具有高优先级的线程会在低优先级之前得到执行;
2.在当前线程的运行过程中,如果有较高级别的线程准备就绪,则正在运行的较低级别的线程将被挂起,转到较高级别的线程运行,直到结束后又会转到原来被挂起的线程。
一个新创建的线程并不会立即执行,需要调用start方法将其放置于可运行状态,然后让jvm进行调度。不同优先级的是抢占式,而同级别是轮转式;
4.Java的集合框架中重要的接口java.util.Collection定义了许多方法。选项中哪个方法是Collection接口所定义的( )
正确答案: A B D 你的答案: A C D (错误)
int size()
boolean containsAll(Collection c)
compareTo(Object obj)
boolean remove(Object obj)
compareTo是String类的方法,按字典顺序比较两个字符串大小,返回值是int,时常出现在一些类构造器中,如TreeMap
5.下面关于垃圾收集的说法正确的是
正确答案: D 你的答案: B (错误)
一旦一个对象成为垃圾,就立刻被收集掉。
对象空间被收集掉之后,会执行该对象的finalize方法
finalize方法和C++的析构函数是完全一回事情
一个对象成为垃圾是因为不再有引用指着它,但是线程并非如此
finalize方法是在对象空间被收集之前调用的;
一个对象成为垃圾是因为不再有引用指着它,就可能被垃圾回收器回收,主线程开启一个线程,当主线程运行完成,没有引用指向运行的线程,但是开启的线程还在运行,直到run方法运行结束退出,这一点和对象的垃圾回收是不一样的。
6.下面有关servlet service描述错误的是?
正确答案: B 你的答案: B (正确)
不管是post还是get方法提交过来的连接,都会在service中处理
doGet/doPost 则是在 javax.servlet.GenericServlet 中实现的
service()是在javax.servlet.Servlet接口中定义的
service判断请求类型,决定是调用doGet还是doPost方法
doGet/doPost 是在javax.servlet.http.HttpServlet中实现的
7.以下各类中哪几个是线程安全的?( )
正确答案: B C D 你的答案: B C (错误)
ArrayList
Vector
Hashtable
Stack
线程安全的类:Hashtable,Vector,Stack,enumeration;
8.关于java集合下列说法不正确的有哪些()
正确答案: A B D 你的答案: A D (错误)
HashSet 它是线程安全的,不允许存储相同的对象
ConcurrentHashMap 它是线程安全的,其中存储的键对象可以重复,值对象不能重复
Collection接口是List接口和Set接口的父接口,通常情况下不被直接使用
ArrayList线程安全的,允许存放重复对象
HashSet 不是线程安全的;ConcurrentHashMap 线程安全,它的键对象是不能重复的,值对象是可以重复的;ArrayList线程不安全,允许重复对象;
1.关于下面这段Java程序,哪些描述是正确的:( )
public class ThreadTest extends Thread {
public void run() {
System.out.println(“In run”);
yield();
System.out.println(“Leaving run”);
}
public static void main(String []argv) {
(new ThreadTest()).start();
}
}
正确答案: C 你的答案: A C (错误)
程序运行输出只有In run
程序运行输出只有Leaving run
程序运行输出先有In run后有Leaving run
程序运行输出先有Leaving run后有In run
程序没有任何输出就退出了
程序将被挂起,只能强制退出
这道题脑子抽了,选了c肯定不选A啊;yield()方法是暂停当前的线程对象,执行其他线程;并且,暂停的线程和将要执行的线程是同一优先级别的;使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的的,因为让步的线程还有可能被线程调度程序再次选中。
2.
下面的Java赋值语句哪些是有错误的 ()
正确答案: B C F 你的答案: B C (错误)
int i =1000;
float f = 45.0;
char s = ‘\u0639’
Object o = ‘f’;
String s = “hello,world\0”;
Double d = 100;
没有考虑到d 类型是包装类,我们的Integer,Double自动装箱要求是对应的数据类型;100是int型,所以无法自动装箱为Double类型;
3.以下说法哪个是正确的()
正确答案: A B C D 你的答案: A B (错误)
IOException在编译时会被发现
NullPointerEception在编译时不被发现
SQLException在编译时会被发现
FileNotFoundException在编译时会被发现
所有的Error、RuntimeException及其子类都属于 unchecked exception 非检查异常;其他异常属于 checked exception 必检异常,也就是必须try,catch;
常见的RuntimeException有:
1.空指针异常 NullPointerException
2.数组下标越界异常 ArrayIndexOutOfBoundsException
3.数学运算中除以0的情况 ArithmeticException
4.传递给方法的参数非法或不合适 IllegalArgumentException 等等;
非运行时异常:SQLException,IOException,用户自定义异常;
4.以下说法错误的是()
正确答案: D 你的答案: D (正确)
虚拟机中没有泛型,只有普通类和普通方法
所有泛型类的类型参数在编译时都会被擦除
创建泛型对象时请指明类型,让编译器尽早的做参数检查
泛型的类型擦除机制意味着不能在运行时动态获取List中T的实际类型
Java的泛型是伪泛型。为什么说Java的泛型是伪泛型呢?因为,在编译期间,所有的泛型信息都会被擦除掉。正确理解泛型概念的首要前提是理解类型擦出(type erasure)。
Java中的泛型基本上都是在编译器这个层次来实现的。在生成的Java字节码中是不包含泛型中的类型信息的。使用泛型的时候加上的类型参数,会在编译器在编译的时候去掉。这个过程就称为类型擦除。
4行与9行不能通过编译,因为缺少方法名和返回类型
编译通过,执行结果是:x=5
编译通过,执行结果是:x=3
9行不能通过编译,因为只能有一个静态初始化器
执行顺序应该是:父类静态代码块》子类静态代码块》父类普通代码块》父类构造代码块》子类普通代码块》子类构造代码块;
1.设有下面两个类的定义:
class Person {}
class Student extends Person {
public int id; //学号
public int score; //总分
public String name; // 姓名
public int getScore(){return score;}
}
类Person和类Student的关系是()。
正确答案: B 你的答案: B (正确)
包含关系
继承关系
关联关系
无关系,上述类定义有语法错误
分析与补充:
Java中类之间有六种关系:
1.继承关系,例如:子类继承父类,子接口继承父接口。
2.实现关系,例如:类实现接口。
3.依赖关系,例如:一个类作为另一个类中方法的参数存在,这种关系具有偶然性和临时性。
4.关联关系,例如:一个类作为另一个类中的成员变量存在,它是一种强依赖关系。
5.聚合关系,例如:整体和部分之间,他们是可以分离的拥有各自的生命周期,并且部分是相同的。
6.组合关系,它是一种强聚合,并且整体和部分之间不可分离,具有相同的生命周期,整体包含该部分。
2.与InputStream流相对应的Java系统的“标准输入对象”是()
正确答案: A 你的答案: A (正确)
System.in
System.out
System.err
System.exit()
3.构造方法用于创建类的实例对象,构造方法名应与类名相同,返回类型为void。
正确答案: B 你的答案: B (正确)
正确
错误
分析:构造方法名称与类名相同,没有返回值;
4.在Web应用程序的文件与目录结构中,web.xml是放置在( )中。
正确答案: A 你的答案: A (正确)
WEB-INF目录
conf目录
lib目录
classes目录
分析:(1)/WEB-INF/web.xml 是部署描述文件
(2)/WEB-INF/classes 用来放置应用程序用到的自定义类(.class),必须包括包(package)结构。
(3)/WEB-INF/lib 用来放置应用程序用到的JAR文件。
5.关于类的叙述正确的是()。
正确答案: B 你的答案: B (正确)
在类中定义的变量称为类的成员变量,在别的类中可以直接使用
局部变量的作用范围仅仅在定义它的方法内,或者是在定义它的控制流块中
使用别的类的方法仅仅需要引用方法的名字即可
只要没有定义不带参数的构造函数,JVM都会为类生成一个默认构造函数
分析:类中的成员变量在其他类中是通过对象名.属性调用的。在别的类中使用另一个类中的方法也需要创建对象进行调用;只要没有定义构造函数,jvm都会为类生成一个默认的构造函数。
6.在java中,下列说法正确的是()
正确答案: D 你的答案: D (正确)
一个类可以继承多个父类
修饰符可维protected的属性不能被其子类访问
抽象类可以实例化对象
无public修饰的类,不能被非同一文件夹中的类和非同一包中的类访问
分析:在JAVA中类是单继承的,protected修饰的属性,同包下及不同包下的子类都可以访问。抽象类就是用来定义功能,让子类具体实现的,所以它不能实例化。
7. 面向对象的程序设计语言具有()等共同特性。
正确答案: A B E 你的答案: A B E (正确)
封装性 多态性 简单性 复杂性 继承性
面向对象的三大特征:封装、继承、多态。
8.C D 你的答案: B C (错误)
可以获得对任何对象的互斥锁定
通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定
线程通过使用synchronized关键字可获得对象的互斥锁定
线程调度算法是平台独立的
1.能使程序块显示字符串 “good” 的 x 值的范围 是 。
if (x>0)
System.out.println(“excellent”);
else if (x>-3)
System.out.println(“good”);
else
System.out.println(“normal”);
正确答案: D 你的答案: D (正确)
x > 0
x > -3
x <= -3
-3 < x <= 0
考察if else;
2.要在session对象中保存属性,可以使用以下哪个语句( )
正确答案: B 你的答案: C (错误)
session.getAttribute(“key”,”value”)
session.setAttribute(“key”,”value”)
session.setAttribute(“key”)
session.getAttribute(“key”)
session.setAttribute(“key”,“value”);将值存在一次会话当中,通过session.getAttribute(“key”);获取到值;
3.假设一个 list初始化为{2,9,5,4,8,1}。 在第一轮冒泡排序后,list变成了()?
正确答案: D 你的答案: D (正确)
2, 9, 5, 4, 8, 1
2, 9, 5, 4, 1, 8
2, 5, 9, 4, 8, 1
2, 5, 4, 8, 1, 9
所谓冒泡排序就是,相邻两个数进行比较,将较小的值放在前面,也就是将最大的值放在尾部,然后逐步缩小范围,重复进行,直到结束;
4.关于String、StringBuffer、StringBuilder以下说法错误的是
正确答案: C 你的答案: C (正确)
StringBuilder运行速度最快
StringBuffer是线程安全的
String的值是可变的
StringBuffer运行速度比String快
分析:运行速度大小:StringBuilder>StringBuffer>String,
StringBuffer的方法是有synchronized 修饰,是线程安全的;String的值是不可变的,它的底层是数组而且使用final修饰的。
5. 有以下代码:
class A{
public A(String str){
}
}
public class Test{
public static void main(String[] args) {
A classa=new A(“he”);
A classb=new A(“he”);
System.out.println(classa==classb);
}
}
请问输出的结果是:
正确答案: A 你的答案: A (正确)
false
true
报错
以上选项都不正确
所有的类都有一个共同的父类Object,它的equals方法是判断两个对象的地址;==判断的也是对象的地址;因为子类没有重写equals和hashcode方法,所以调用Object的equals方法,所以无论是 == 还是equals方法判断,都是返回false;
6.以下集合对象中哪几个是线程安全的()
正确答案: C D 你的答案: C D (正确)
LinkedList
ArrayList
Vector
Hashtable
Java集合中线程安全的有Hashtable,Vector,stack,enumeration;
7. 下面哪些选项是正确的()
正确答案: A D
" >>是算术右移操作符"
“>>是逻辑右移操作符”
“>>>是算术右移操作符”
“>>>是逻辑右移操作符”
运算符“>>”执行算术右移,它使用最高位填充移位后左侧的空位。 右移的结果为:每移一位,第一个操作数被2除一次,移动的次数由第二个操作数确定。
逻辑右移或叫无符号右移运算符“>>>“只对位进行操作,没有算术含义,它用0填充左侧的空位。
算术右移不改变原数的符号,而逻辑右移不能保证这点。
移位运算符约简其右侧的操作数,当左侧操作数是int类型时,右侧以32取模;当左侧是long类型时,右侧以64取模。
8.
以下关于final关键字说法错误的是()
正确答案: A C 你的答案: A C (正确)
final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性
final修饰的类肯定不能被继承
final修饰的方法不能被重载
final修饰的变量不允许被再次赋值
分析,抽象类和接口不能被final修饰,final修饰的方法不能被重写和继承,变量不允许再次赋值;