• 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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    的输出是?
    正确答案: 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> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    如果运行以上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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    正确答案: 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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    正确答案: 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);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    正确答案: 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"));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    正确答案: 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.
    The type Listis assignable to List.
    The type Listis assignable to any List reference.
    The type Listis assignable to List.

    1. 只看尖括号里边的!!明确点和范围两个概念
    2. 如果尖括号里的是一个类,那么尖括号里的就是一个点,比如List,List,List
    3. 如果尖括号里面带有问号,那么代表一个范围, 代表小于等于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");
         }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    下面结果输出是?

    正确答案: 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");  
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    正确答案: 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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    正确答案: 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的情况

  • 相关阅读:
    强强联合:OpenFeign 整合 Sentinel
    day49 ARM
    [学习记录] SpringBoot 4. 开发技巧
    【C++程序员必修第一课】C++基础课程-15:struct 数据结构
    (三)行为模式:10、策略模式(Strategy Pattern)(C++示例)
    Dubbo的注解配置和XML配置
    机器学习-保存模型并根据模型进行预测 python demo
    (九)turtle
    Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单。
    Dockerfile(2) - LABEL 指令详解
  • 原文地址:https://blog.csdn.net/wangyuwe/article/details/126244734