1. 有以下程序片段,下列哪个选项不能插入到第一行 。(A )。
1.
2.public class A{
3.//do sth
4. }
A.public class MainClass{ }
B. package mine;
C. class ANotherClass{ }
D. import java.util.*;
解析:
Java一个源程序只能有一个public类存在,且类名与文件名相同。Java程序是从main方法开始执行的,public为类加载器提供入口,然后找到public类中的main方法开始执行。如果存在多个public类,程序将不知道该从哪里执行。
注意,内部类可以是public的,因为内部类是作为外部类的成员存在的。
2. jvm堆分为:新生代(一般是一个Eden区,两个Survivor区),老年代(old区)。
常量池属于 PermGen(方法区)
3. 已知有下列Test类的说明,则下列哪个语句是正确的?(A)
public class Test
{
private float f = 1.0f;
int m = 12;
static int n = 1;
public static void main (String args[])
{
Test t = new Test();
}
}
A.t.f;
B. this.n;
C. Test.m
D. Test.f
解析:
B项错误:this不能在static的方法中使用,this是指向对象的的引用,而静态方法在类加载的时候创建加载,此时没有创建对象。
C,D项错误:m 和 f 都是普通成员属性,而 “类名.” 方式只能调用 静态成员属性。
4. 关于如下程序的描述哪个是正确的?(C )
public class Person{
static int arr[] = new int[5];
public static void main(String a[]){
System.out.println(arr[0]);
}
}
A.编译将产生错误
B.编译时正确,但运行时将产生错误
C.正确,输出0
D.正确,输出 null
解析:
类的成员变量会被默认初始化.
char[] ch = new char[3];//默认空格
int [] Int = new int[2];//默认0
String[] strings = new String[2];//默认null
5. 下列代码执行结果为()
public static void main(String args[])throws InterruptedException{
Thread t=new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
System.out.print("2");
}
});
t.start();
t.join();
System.out.print("1");
}
A. 21
B.12
C. 可能为12,也可能为21
D. 以上答案都不对
解析:
因为子线程的休眠时间太长,因此主线程很有可能在子线程之前结束也就是输出结果是12,但是子线程用了join函数,因此主线程必须等待子线程执行完毕才结束因此输出结果只能是21
6. 给出以下代码,请给出结果.(B)
class Two{
Byte x;
}
class PassO{
public static void main(String[] args){
PassO p=new PassO();
p.start();
}
void start(){
Two t=new Two();
System.out.print(t.x+””);
Two t2=fix(t);
System.out.print(t.x+” ” +t2.x);
}
Two fix(Two tt){
tt.x=42;
return tt;
}
}
A. null null 42
B. null 42 42
C. 0 0 42
D. 0 42 42
E. An exception is thrown at runtime
F. Compilation
解析:基本类型初始化是0,包装类型初始化是null
7. java 1.8开始支持接口中定义静态方法
9. 以下程序段的输出结果为:
public class EqualsMethod
{
public static void main(String[] args)
{
Integer n1 = new Integer(47);
Integer n2 = new Integer(47);
System.out.print(n1 == n2);
System.out.print(",");
System.out.println(n1 != n2);
}
}
A. false,false
B. false,true
C. true,false
D. true,true
解析:
使用Integer a = 1;或Integer a = Integer.valueOf(1); 在值介于-128至127直接时,作为基本类型。
使用Integer a = new Integer(1); 时,无论值是多少,都作为对象。
-
有如下一段程序:请问最后打印出来的是什么?(B)
public class Test{
private static int i=1;
public int getNext(){
return i++;
}
public static void main(String [] args){
Test test=new Test();
Test testObject=new Test();
test.getNext();
testObject.getNext();
System.out.println(testObject.getNext());
}
}
A.2
B.3
C.4
D.5
解析:
本题考察两个知识点static属性和i++操作
点1:因为i是static的,是类属性,所以不管有多少对象,都共用的一个变量,这里getNext()方法被调用了三次,所以进行了三次i++操作
点2:i++是先用后加的,即return i++;最后返回3,i的值实际为4.
11. Swing 是在AWT的基础上构建的一套新的图形界面系统,它提供了AWT 所能够提供的所有功能,并且用纯粹的Java代码对AWT 的功能进行了大幅度的扩充。AWT 是基于本地方法的C/C++程序,其运行速度比较快;Swing是基于AWT 的Java程序,其运行速度比较慢。
12. 以下哪个式子有可能在某个进制下成立(A)?
A. 13
14=204
B. 12
34=568
C. 14*14=140
D. 1+1=3
解析:
设x表示x进制。
13
14=204
=>(1
x
1+3*x
0)
(1
x
1+4*x
0) = 2*x
2+4*x
0
=>(x+3)(x+4)=2x^2+4
=>x^2-7x-8=0
=>(x-8)(x+1)=0
=> x=8或者x=-1
1、抽象类可以有构造,只不过不能new。
2、接口中可以有变量,但是无论你怎么写,最后都是public static final的。
3、抽象类中可以有静态方法,接口中也可以有。
扩展:
1、接口中可以有非抽象的方法,比如default方法(Java 1.8)。
2、接口中可以有带方法体的方法。(Java 1.8)
3、接口中的方法默认是public的。
1、abstract类不能用来创建abstract类的对象;
2、final类不能用来派生子类,因为用final修饰的类不能被继承;
3、final不能与abstract同时修饰一个类,abstract类就是被用来继承的;
4、类中有abstract方法必须用abstract修饰,但abstract类中可以没有抽象方法,接口中也可以有abstract方法。
15. Spring依赖注入(DI)的三种方式,分别为:
1. 接口注入
2. Setter 方法注入
3. 构造方法注入
16. 下面程序的输出是:()
String x=“fmn”;
x.toUpperCase();
String y=x.replace(‘f’,‘F’);
y=y+“wxy”;
System.out.println(y);
A. FmNwxy
B. fmnwxy
C. wxyfmn
D. Fmnwxy
解析:
本题主要考察String对象的不可变性
String x=“fmn”; “fmn”是在常量池里的不可变对象。
x.toUpperCase(); 在堆中new一个”FMN”对象,但无任何引用指向它。
String y=x.replace(‘f’,‘F’); 在堆中 new一个”Fmn”对象,y指向它。
y=y+“wxy”; 在堆中 重新new一个”Fmnwxy”对象, 修改y指向,现在y指向它。
-
static不可以修饰非static的属性,因为类加载的时候,static属性比非static先初始化,那么一个存在的总不能访问一个没有存在的.
-
如何放掉一个指定占据的内存空间?(D)
A. 调用free()方法
B. 代用system.gc()方法
C. 赋值给该项对象的引用为null
D. 程序员无法明确强制垃圾回收器运行
解析:
释放掉占据的内存空间是由gc完成,但是程序员无法明确强制其运行,该空间在不被引用的时候不一定会立即被释放,这取决于GC本身,无法由程序员通过代码控制。
19. 以下哪项不属于java类加载过程?()
A. 生成java.lang.Class对象
B. int类型对象成员变量赋予默认值
C. 执行static块代码
D. 类方法解析
解析:
不应该选D,而应该选B
类的加载包括:加载,验证,准备,解析,初始化。
选项A:生成java.lang.Class对象是在加载时进行的。生成Class对象作为方法区这个类的各种数据的访问入口。
选项B:既然是对象成员,那么肯定在实例化对象后才有。在类加载的时候会赋予初值的是类变量,而非对象成员。
选项C:这个会调用。可以用反射试验。
选项D:类方法解析发生在解析过程。
20. Java反射机制主要提供了以下功能:
1.在运行时判断任意一个对象所属的类;
2.在运行时构造任意一个类的对象;
3.在运行时判断任意一个类所具有的成员变量和方法;
4.在运行时调用任意一个对象的方法;
5.生成动态代理。
21. 常用的servlet包的名称是?javax.servlet, javax.servlet.http
22. 下面几个关于Java里queue的说法哪些是正确的(AC)?
A. LinkedBlockingQueue是一个可选有界队列,不允许null值
B. PriorityQueue,LinkedBlockingQueue都是线程不安全的
C. PriorityQueue是一个无界队列,不允许null值,入队和出队的时间复杂度是O(log(n))
D. PriorityQueue,ConcurrentLinkedQueue都遵循FIFO原则
解析:
A、LinkedBlockingQueue是一个基于节点链接的可选是否有界的阻塞队列,不允许null值。
B、LinkedBlockingQueue是一个线程安全的阻塞队列,实现了先进先出等特性。
C、PriorityQueue是一个无界队列,不允许null值,入队和出队的时间复杂度是O(log(n))。
D、PriorityQueue是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,该队列的元素遵循FIFO原则。