1. 对抽象类的描述正确的是()
A 抽象类的方法都是抽象方法
B 一个类可以继承多个抽象类
C 抽象类不能有构造方法
D 抽象类不能被实例化
正确答案:D
解析:
A.抽象类可以有非抽象的方法,而接口中的方法都是抽象方法
B.java中类只能单继承,接口可以'继承'多个接口
C.抽象类必须有构造方法,接口一定没有构造方法
D.实例化一般指new一个对象,所以抽象类不能实例化
2. 以下程序的执行结果是:
java
static boolean foo(char c){
System.out.print(c);
return true;
}
public static void main(String[] args) {
int i =0;
for(foo('A');foo('B')&&(i<2);foo('C')){
i++;
foo('D');
}
}
A ABDCBDCB
B ABCDABCD
C 编译时出错
D 运行时抛出异常
正确答案:A
解析:
循环开始条件只执行一次
for(循环开始条件;判断条件;循环后条件)
按照执行顺序依次执行
3. 下面代码的输出结果是什么?
java
public class ZeroTest {
public static void main(String[] args) {
try{
int i = 100 / 0;
System.out.print(i);
}catch(Exception e){
System.out.print(1);
throw new RuntimeException();
}finally{
System.out.print(2);
}
System.out.print(3);
}
}
A 3
B 123
C 1
D 12
正确答案:D
解析:
首先执行try,遇到算术异常,抛出,执行catch,打印1,然后抛出RuntimeException,缓存异常,执行finally,打印2,然后抛出RuntimeException。
如果catch中没有抛出RuntimeException,则执行结果为123。
4. 如果希望监听TCP端口9000,服务器端应该怎样创建socket?
A new Socket("localhost",9000);
B new ServerSocket(9000);
C new Socket(9000);
D new ServerSocket("localhost",9000);
正确答案:B
解析:
ServerSocket(int port) 是服务端绑定port端口,调accept()监听等待客户端连接,它返回一个连接队列中的一个socket。
Socket(InetAddress address , int port)是创建客户端连接主机的socket流,其中InetAddress是用来记录主机的类,port指定端口。
socket和servletSocket的交互如下图所示:
详细了解,大家可以看此博客:http://www.cnblogs.com/rond/p/3565113.html
5. 以下代码的运行结果是什么( )
java
class Supper{
public int get()
{
System.out.println("Supper");
return 5;
}
}
public class Sub{
public int get()
{
System.out.println("Sub");
return new Integer("5"); }
public static void main(String args[]) {
new Supper().get();
new Sub().get(); }
}
A Supper Sub
B Supper 5 Sub
C Supper 5 5 Sub
D Supper Sub 5 5
正确答案:A
解析:
newSupper().get()和newSub().get()只调用了get()方法,又没有打印输出get()返回的数值,所以肯定没有5
6. 以下关于 abstract 关键字的说法,正确的是()
A abstract 可以与final 并列修饰同一个类。
B abstract 类中不可以有private的成员。
C abstract 类中必须全部是abstract方法。
D abstract 方法必须在abstract类或接口中。
正确答案:D
解析:
1abstract类不能与final,static使用。final修饰方法,子类可以调用,但不能覆盖。
2最好不要有private因为私有和抽象放在一起,子类如果想重写父类的私有方法根本继承不过来,也就无法重写
3抽象类中可以有非抽象方法
4抽象类中可以都是非抽象的,但是抽象方法一定要在类和接口中。
7. 如下代码的输出结果是什么?
java
public class Test {
public int aMethod(){
static int i = 0;
i++;
return i;
}
public static void main(String args[]){
Test test = new Test();
test.aMethod();
int j = test.aMethod();
System.out.println(j);
}
}
A 0
B 1
C 2
D 编译失败
正确答案:D
解析:
静态变量只能定义在类中,不能定义在方法中。因为被static修饰的变量在类加载时候就已经被加载了,它属于整个类,被这个类的所有对象共享。而成员方法属于对象(类的实例),每个对象都有自己的一份拷贝。
8. 下面代码输出结果是?
java
class C {
C() {
System.out.print("C");
}
}
class A {
C c = new C();
A() {
this("A");
System.out.print("A");
}
A(String s) {
System.out.print(s);
}
}
class Test extends A {
Test() {
super("B");
System.out.print("B");
}
public static void main(String[] args) {
new Test();
}
}
A BB
B CBB
C BAB
D None of the above
正确答案:B
解析:
考察类的加载顺序:
父类静态成员变量、静态块>子类静态成员变量、 静态块>父类普通成员变量、非静态块>父类构造函数>子类 普通成员变量、非静态块>子类构造函数
这题最大的坑在于,会不会调用父类(A)的无参构造。
因为Test已经显式调用了super("B"),所以会直接调用A的有参构造。
如果删除super("B"),系统才会默认调用父类无参构造,此时答案为:CAAB。
9. 实现或继承了Collection接口的是()
A Map
B List
C Vector
D Iterator
E Set
正确答案:BCE
解析:
10. 关于下面代码 int[] x=new int[25]; 描述正确的是()
A x[25]存放了数据"\0"。
B x[24] 存放了数据"\0"。
C 若访问x[25],程序将抛出异常。
D x[1]访问此数组的第一个元素。
正确答案:C
解析:
A、x不存在第25个下标,不存放数据"\0";
B、x[24]不存放数据"\0",初始值为0;
C、若访问x[25],程序将抛出异常------数组越界。
D、x[0]访问此数组的第一个元素。
11. 关于ASCII码和ANSI码,以下说法不正确的是()
A 标准ASCII只使用7个bit
B 在简体中文的Windows系统中,ANSI就是GB2312
C ASCII码是ANSI码的子集
D ASCII码都是可打印字符
正确答案:D
解析:
A、标准ASCII只使用7个bit,扩展的ASCII使用8个bit。
B、ANSI通常使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符。超出此范围的使用0x80~0xFFFF来编码,即扩展的ASCII编码。不同 ANSI 编码之间互不兼容。在简体中文Windows操作系统中,ANSI 编码代表 GBK 编码;在繁体中文Windows操作系统中,ANSI编码代表Big5;在日文Windows操作系统中,ANSI 编码代表 Shift_JIS 编码。
C、ANSI通常使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符,即ASCII码
D、ASCII码包含一些特殊空字符
12. 检查程序,是否存在问题,如果存在指出问题所在,如果不存在,说明输出结果。
java
package algorithms.com.guan.javajicu;
public class Inc {
public static void main(String[] args) {
Inc inc = new Inc();
int i = 0;
inc.fermin(i);
i= i ++;
System.out.println(i);
}
void fermin(int i){
i++;
}
}
A 0
B 1
C 2
D 3
正确答案:A
解析:
本人的讲解比较简单明了(初学者也可以看懂),如有不对的地方请各路大神指点。
i++ 先赋值在计算结果;
++i 先计算结果再赋值。
int i = 0;
i = i ++; // 左边这个i其实是障眼法,就是一个中间变量,可以和下行的i合并;
System.out.println(i); 这里等价于:
int i = 0;
System.out.println(i++); 这下再看,先赋值(先将i传给println函数打印出来,在计算表达式结果)
所以打印出来的是0,实际上整个表达式的结果已经是1了,只是没有打印出整个表达式的结果。
所以我们知道如下结论:
1、无论怎么变,i++和++i的整个表达式的结果都是1.
2、有时我们打印的是表达式的结果(System.out.println(++i)),
有时我们打印的只是一个中间变量(System.out.println(i++))。
Ps:
java
int i = 0;
i++;
System.out.println(i); //值为1 打印的是表达式的结果
int i = 0;
++i;
System.out.println(i); //值为1 打印的是表达式的结果
int i = 0;
i = i++;
System.out.println(i); //值为0 打印的是中间变量(JVM中间缓存变量机制)
int i = 0;
i = ++i;
System.out.println(i); //值为1 打印的是表达式的结果