java笔试题易错总结

1、socket编程中,以下哪个socket的操作是不属于服务端操作的()
正确答案: C
accept
recieve
getInputStream
close

TCP客户端:
1.建立连接套接字,设置Ip和端口监听,socket()
2.建立连接 connect
3.write() 获取网络流对象 发送数据
4.read()获取网络流对象 接收数据
5.关闭套接字

TCP服务器端
1.建立端口监听 socket()
2.绑定指定端口 bind()
3.listen 进行端口监听
4.accept() 阻塞式 直到有客户端访问
5.read()获取客户端发送数据
6.write()发送返回数据
7.close关闭端口监听

2、CMS垃圾回收器在那些阶段是没用用户线程参与的
正确答案: A C
初始标记
并发标记
重新标记
并发清理

3、

class Foo {
    final int i;
    int j;
    public void doSomething() {
        System.out.println(++j + i);
    }
}

的输出是?
正确答案: D
0
1
2
不能执行,因为编译有错

类的final成员变量必须满足以下其中一个条件
1、在构造函数中赋值 2、初始化赋值

4、静态内部类不可以直接访问外围类的非静态数据,而非静态内部类可以直接访问外围类的数据,包括私有数据。( )

正确答案: A
正确
错误

  1. 静态内部类:
    静态内部类可以访问外围类的静态数据,包括私有数据,但不能访问非静态数据;
    非静态内部类可以直接访问外围类的数据,包括私有数据
    1. 静态内部类本身可以访问外部的静态资源,包括静态私有资源。但是不能访问非静态资源,可以不依赖外部类实例而实例化。
  2. 成员内部类:
    1. 成员内部类本身可以访问外部的所有资源,但是自身不能定义静态资源,因为其实例化本身就还依赖着外部类。
  3. 局部内部类:
    1. 局部内部类就像一个局部方法,不能被访问修饰符修饰,也不能被static修饰。
    2. 局部内部类只能访问所在代码块或者方法中被定义为final的局部变量。
  4. 匿名内部类:
    1. 没有类名的内部类,不能使用class,extends和implements,没有构造方法。
    2. 多用于GUI中的事件处理。
    3. 不能定义静态资源
    4. 只能创建一个匿名内部类实例。
    5. 一个匿名内部类一定是在new后面的,这个匿名类必须继承一个父类或者实现一个接口。
    6. 匿名内部类是局部内部类的特殊形式,所以局部内部类的所有限制对匿名内部类也有效。

5、关键字super的作用是?

正确答案: D
用来访问父类被隐藏的非私有成员变量
用来调用父类中被重写的方法
用来调用父类的构造函数
以上都是

答案:D super代表父类对应的对象,所以用super访问在子类中无法直接使用的父类成员和方法

6、非抽象类实现接口后,必须实现接口中的所有抽象方法,除了abstract外,方法头必须完全一致.
正确答案: B
正确
错误

方法头指:修饰符+返回类型 +方法名(形参列表)
接口的访问权限:public,abstract
两同两小一大原则
返回值和参数列表相同
返回值类型小于等于父类的返回值类型
异常小于等于父类抛出异常
访问权限大于等于父类

7、看以下代码:
文件名称:forward.jsp

<html>  
     <head><title> 跳转  </title> </head> 
     <body>  
         <jsp:forward page="index.htm"/>     
     </body>
 </html> 

如果运行以上jsp文件,地址栏的内容为
正确答案: A
http://127.0.0.1:8080/myjsp/forward.jsp
http://127.0.0.1:8080/myjsp/index.jsp
http://127.0.0.1:8080/myjsp/index.htm
http://127.0.0.1:8080/myjsp/forward.htm

forward和redirect是最常问的两个问题 forward,服务器获取跳转页面内容传给用户,用户地址栏不变
redirect,是服务器向用户发送转向的地址,redirect后地址栏变成新的地址 因此这个题是A

8、以下Java程序运行的结果是:

public class Tester{
public static void main(String[] args){
   Integer var1=new Integer(1);
   Integer var2=var1;
   doSomething(var2);
   System.out.print(var1.intValue());
   System.out.print(var1==var2);
}
public static void doSomething(Integer integer){
    integer=new Integer(2);
    }
}

正确答案: A
1true
2true
1false
2false

9、对文件名为Test.java的java代码描述正确的是()

class Person {
    String name = "No name";
    public Person(String nm) {
        name = nm;
    }
}
class Employee extends Person {
    String empID = "0000";
    public Employee(String id) {
        empID = id;
    }
}
public class Test {
    public static void main(String args[]) {
        Employee e = new Employee("123");
        System.out.println(e.empID);
    }
}

正确答案: C
输出:0000
输出:123
编译报错
输出:No name

子类的构造方法总是先调用父类的构造方法,如果子类的构造方法没有明显地指明使用父类的哪个构造方法,子类就调用父类不带参数的构造方法。
而父类没有无参的构造函数,所以子类需要在自己的构造函数中显示的调用父类的构造函数。

10、
运行代码,输出的结果是()

public class P {
    public static int abc = 123;
    static{
        System.out.println("P is init");
    }
}
public class S extends P {
    static{
        System.out.println("S is init");
    }
}
public class Test {
    public static void main(String[] args) {
        System.out.println(S.abc);
    }
}

正确答案: A
P is init
123
S is init
P is init
123
P is init
S is init
123
S is init
123

不会初始化子类的几种

  1. 调用的是父类的static方法或者字段
    2.调用的是父类的final方法或者字段
  2. 通过数组来引用

11、关于ThreadLocal类 以下说法正确的是
正确答案: D E
ThreadLocal继承自Thread
ThreadLocal实现了Runnable接口
ThreadLocal重要作用在于多线程间的数据共享
ThreadLocal是采用哈希表的方式来为每个线程都提供一个变量的副本
ThreadLocal保证各个线程间数据安全,每个线程的数据不会被另外线程访问和破坏

选DE. 1、ThreadLocal的类声明: public class ThreadLocal
可以看出ThreadLocal并没有继承自Thread,也没有实现Runnable接口。所以AB都不对。
2、ThreadLocal类为每一个线程都维护了自己独有的变量拷贝。每个线程都拥有了自己独立的一个变量。
所以ThreadLocal重要作用并不在于多线程间的数据共享,而是数据的独立,C选项错。
由于每个线程在访问该变量时,读取和修改的,都是自己独有的那一份变量拷贝,不会被其他线程访问, 变量被彻底封闭在每个访问的线程中。所以E对。
3、ThreadLocal中定义了一个哈希表用于为每个线程都提供一个变量的副本:

12、如果要导入一个java.scut.computer的包,叙述正确的是? ( )

正确答案: A
只需在代码中加入“import java.scut.computer;”一个语句,并且必须放在代码非注释的第一行
只需在代码中加入“import java.scut;”一个语句
必须在代码中加入“import java.scut;”和“package java.scut.computer;”两个语句
在代码中,不一定是第一句,只要是类定义前,加入package语句即可

13、ArrayList list = new ArrayList(20);中的list扩充几次
正确答案: A
0
1
2
3

Arraylist默认数组大小是10,扩容后的大小是扩容前的1.5倍,最大值小于Integer
的最大值减8,如果新创建的集合有带初始值,默认就是传入的大小,也就不会扩容

14、下面代码将输出什么内容:()

public class SystemUtil{
    public static boolean isAdmin(String userId){
        return userId.toLowerCase()=="admin";
    }
    public static void main(String[] args){
        System.out.println(isAdmin("Admin"));
    }
}

正确答案: B
true
false
1
编译错误

equals和==的区别
==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。,在源码中 toLowerCase 是重新 new String()

15、
java运行时内存分为“线程共享”和“线程私有”两部分,以下哪些属于“线程共享”部分
正确答案: B D
程序计算器
方法区
java虚拟机栈
java堆

私有:java虚拟机栈,程序计数器,本地方法栈 共享:java堆,方法区

16、class A {}
class B extends A {}
class C extends A {}
class D extends B {}
下面的哪4个语句是正确的?
正确答案: A C D G
The type Listis assignable to List.
The type Listis assignable to List.
The type Listis assignable to List<?>.
The type Listis assignable to List<?extends B>.
The type List<?extends A>is assignable to List.
The type Listis assignable to any List reference.
The type List<?extends B>is assignable to List<?extends A>.

  1. 只看尖括号里边的!!明确点和范围两个概念
  2. 如果尖括号里的是一个类,那么尖括号里的就是一个点,比如List,List,List
  3. 如果尖括号里面带有问号,那么代表一个范围,<? extends A> 代表小于等于A的范围,<? super A>代表大于等于A的范围,<?>代表全部范围
  4. 尖括号里的所有点之间互相赋值都是错,除非是俩相同的点
  5. 尖括号小范围赋值给大范围,对,大范围赋值给小范围,错。如果某点包含在某个范围里,那么可以赋值,否则,不能赋值
  6. List<?>和List 是相等的,都代表最大范围

7.补充:List既是点也是范围,当表示范围时,表示最大范围

17、

public class IfTest{
    public static void main(String[]args){
        int x=3;
        int y=1;
        if(x=y)
            System.out.println("Not equal");
        else
            System.out.println("Equal");
     }
}

下面结果输出是?

正确答案: C
The output is “Equal”
The output in “Not Equal”
An error at line 5 causes compilation to fall.
The program executes but does not print a message.

if()语句括号中为比较表达式,返回值要么是true,要么是false,if(x=y)是将y赋值给x,但是数据类型是int类型的,编译不能通过,如果把代码改为这样:
boolean x = false; boolean y = ture; if(x=y){…}这样就就不会报错了,编译正常通过。

18、AccessViolationException异常触发后,下列程序的输出结果为( )

static void Main(string[] args)  
{  
    try  
    {  
        throw new AccessViolationException();  
        Console.WriteLine("error1");  
    }  
    catch (Exception e)  
    {  
        Console.WriteLine("error2");  
    }  
    Console.WriteLine("error3");  
} 

正确答案: A
A、error2
error3

B、error3

C、error2

D、error1

try…catch,catch捕获到异常,如果没有抛出异常语句(throw),不影响后续程序,本题答案选A。

19、关于异常的编程,以下描述错误的是:( )

正确答案: A
在有除法存在的代码处,为了防止分母为零,必须抛出并捕获异常
int i=Integer.parseInt(”123a”);将产生NumberFormatException
int a[]=null; a[0]=1; 将产生NullPointerException
输入输出流编程中,读和写时都要抛出IOException

Java的异常分为两种,一种是运行时异常(RuntimeException),一种是非运行异常也叫检查式异常(CheckedException)。
1、运行时异常不需要程序员去处理,当异常出现时,JVM会帮助处理。常见的运行时异常有: ClassCastException(类转换异常)
ClassNotFoundException IndexOutOfBoundsException(数组越界异常)
NullPointerException(空指针异常) ArrayStoreException(数组存储异常,即数组存储类型不一致)
还有IO操作的BufferOverflowException异常
2、非运行异常需要程序员手动去捕获或者抛出异常进行显示的处理,因为Java认为Checked异常都是可以被修复的异常。常见的异常有:
IOException SqlException

20、以下代码执行的结果显示是多少()?
在这里插入图片描述

正确答案: B
num * count = 505000
num * count = 0
运行时错误
num * count = 5050

21、下面代码输出结果是?

int i = 5;
int j = 10;
System.out.println(i + ~j);

正确答案: C
Compilation error because”~”doesn’t operate on integers
-5
-6
15

-n=~n+1

22、假设 a 是一个由线程 1 和线程 2 共享的初始值为 0 的全局变量,则线程 1 和线程 2 同时执行下面的代码,最终 a 的结果不可能是()

boolean isOdd = false;
for(int i=1;i<=2;++i){
    if(i%2==1)isOdd = true;
    else isOdd = false;
    a+=i*(isOdd?1:-1);
}

正确答案: D
-1
-2
0
1

不管怎样线程对a的操作就是+1后-2
1.线程1执行完再线程2执行,1-2+1-2=-2
2.线程1和2同时+1,再-2不同时,1-2-2=-3
3.线程1和2不同时+1,同时-2,1+1-2=0
4.线程1和2既同时+1又同时-2,1-2=-1 没有结果为1的情况

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值