• java笔试题含答案总结


    1、下面代码输出是?

    enum AccountType
    {
        SAVING, FIXED, CURRENT;
        private AccountType()
        {
            System.out.println("It is a account type");
        }
    }
    class EnumOne
    {
        public static void main(String[]args)
        {
            System.out.println(AccountType.FIXED);
        }
    }
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    正确答案: C
    编译正确,输出”It is a account type”once followed by”FIXED”
    编译正确,输出”It is a account type”twice followed by”FIXED”
    编译正确,输出”It is a account type”thrice followed by”FIXED”
    编译正确,输出”It is a account type”four times followed by”FIXED”
    编译错误

    答案:C 枚举类有三个实例,故调用三次构造方法,打印三次It is a account type

    2、下列关于Java语言中String和char的说法,正确的是()

    正确答案: C
    String是Java定义的一种基本数据类型。
    String是以“\0”结尾的char类型的数组char[]。
    使用equals()方法比较两个String是否内容一样(即字符串中的各个字符都一样)。
    Char类型在Java语言里面存储的是ASCII码。

    A选项:Java基本数据类型共有八大类,这八大数据类型又可分为四小类,分别是整数类型(byte/short/int/long)、浮点类型(float、double)、字符类型(char)和布尔类型(boolean),其中并不包括String。

    B选项中是C语言当中的String,Java的String虽然也是char类型的数组char[]实现的,但并不以“\0”结尾。

    C选项正确,String类重写了Object类的equals()方法,使用equals()方法可以用于比较两个String是否内容一样。

    D选项, char 类型的编码是Unicode 编码。

    3、以下说法错误的是()

    正确答案: D
    虚拟机中没有泛型,只有普通类和普通方法
    所有泛型类的类型参数在编译时都会被擦除
    创建泛型对象时请指明类型,让编译器尽早的做参数检查
    泛型的类型擦除机制意味着不能在运行时动态获取List中T的实际类型

    4、说明输出结果。

    import java.util.Date; 
    public class SuperTest extends Date{ 
        private static final long serialVersionUID = 1L; 
        private void test(){ 
           System.out.println(super.getClass().getName()); 
        } 
          
        public static void main(String[]args){ 
           new SuperTest().test(); 
        } 
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    正确答案: C
    SuperTest
    SuperTest.class
    test.SuperTest
    test.SuperTest.class

    C.
    TestSuper和Date的getClass都没有重写,他们都是调用Object的getClass,而Object的getClass作用是返回的是运行时的类的名字。这个运行时的类就是当前类,所以
    super.getClass().getName() 返回的是test.SuperTest,与Date类无关
    要返回Date类的名字需要写super.getClass().getSuperclass()

    5、
    java中关于继承的描述正确的是()
    正确答案: A C D
    一个子类只能继承一个父类
    子类可以继承父类的构造方法
    继承具有传递性
    父类一般具有通用性,子类更具体

    子类不可以继承父类的构造方法,只可以调用父类的构造方法

    6、下面有关forward和redirect的描述,正确的是() ?
    正确答案: B C D
    forward是服务器将控制权转交给另外一个内部服务器对象,由新的对象来全权负责响应用户的请求
    执行forward时,浏览器不知道服务器发送的内容是从何处来,浏览器地址栏中还是原来的地址
    执行redirect时,服务器端告诉浏览器重新去请求地址
    forward是内部重定向,redirect是外部重定向
    redirect默认将产生301 Permanently moved的HTTP响应

    7、
    下列哪些方法是针对循环优化进行的
    正确答案: A B D
    强度削弱
    删除归纳变量
    删除多余运算
    代码外提

    8、在 main() 方法中给出的整型数组,如果将其写到一个文件中,需要( )。

    正确答案: B
    A 、System.out.print (buffer[i]);
    B、 DataOutputStream dout = new DataOutputStream(new FileOutputStream(this.filename));
    C 、DataInputStream din = new DataInputStream(new FileInputStream(this.filename));。
    D 、System.in.read(buffer)。

    input和output指的是对于程序而言。input是从文件读取进来,output是输出到文件。

    9、关于访问权限说法正确 的是 ? ( )

    正确答案: B
    外部类前面可以修饰public,protected和private
    成员内部类前面可以修饰public,protected和private
    局部内部类前面可以修饰public,protected和private
    以上说法都不正确

    ( 1 )对于外部类而言,它也可以使用访问控制符修饰,但外部类只能有两种访问控制级别: public和默认。因为外部类没有处于任何类的内部,也就没有其所在类的内部、所在类的子类两个范围,因此 private 和 protected
    访问控制符对外部类没有意义。

    ( 2 )内部类的上一级程序单元是外部类,它具有 4 个作用域:同一个类( private )、同一个包( protected)和任何位置( public )。

    ( 3 )因为局部成员的作用域是所在方法,其他程序单元永远不可能访问另一个方法中的局部变量,所以所有的局部成员都不能使用访问控制修饰符修饰。

    10、下列有关Servlet的生命周期,说法不正确的是?
    正确答案: A
    在创建自己的Servlet时候,应该在初始化方法init()方法中创建Servlet实例

    在Servlet生命周期的服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法

    在销毁阶段,执行destroy()方法后会释放Servlet 占用的资源

    destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法

    答案:A 创建Servlet的实例是由Servlet容器来完成的,且创建Servlet实例是在初始化方法init()之前

    11、关于Java的一些概念,下面哪些描述是正确的:( )
    正确答案: B F
    所有的Java异常和错误的基类都是java.lang.Exception, 包括java.lang.RuntimeException

    通过try … catch … finally语句,finally中的语句部分无论发生什么异常都会得到执行

    java中所有的数据都是对象

    Java通过垃圾回收回收不再引用的变量,垃圾回收时对象的finallize方法一定会得到执行

    Java是跨平台的语言,无论通过哪个版本的Java编写的程序都能在所有的Java运行平台中运行

    Java通过synchronized进行访问的同步,synchronized作用非静态成员方法和静态成员方法上同步的目标是不同的

    A.错误(Error)的基类是Throwable
    C.基本类型不是对象
    D.垃圾回收器并不总是工作,只有当内存资源告急时,垃圾回收器才会工作;即使垃圾回收器工作,finalize方法也不一定得到执行,这是由于程序中的其他线程的优先级远远高于执行finalize()函数线程的优先级。
    E.低版本JRE无法运行高版本JRE

    12、正确答案: A D
    Statement sta=con.createStatement();
    ResultSet rst=sta.executeQuery(“select * from book”);

    Statement sta=con.createStatement(“select * from book”);
    ResultSet rst=sta.executeQuery();

    PreparedStatement pst=con.prepareStatement();
    ResultSet rst=pst.executeQuery(“select * from book”);

    PreparedStatement pst=con.prepareStatement(“select * from book”);
    ResultSet rst=pst.executeQuery();

    A,D是正确的;创建Statement是不传参的,PreparedStatement是需要传入sql语句

    13、在开发中使用泛型取代非泛型的数据类型(比如用ArrayList取代ArrayList),程序的运行时性能会变得更好。()
    正确答案: B
    正确
    错误

    使用泛型的好处 1,类型安全。 泛型的主要目标是提高 Java
    程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。

    2,消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。

    3,潜在的性能收益。
    泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的
    JVM 的优化带来可能。由于泛型的实现方式,支持泛型(几乎)不需要 JVM
    或类文件更改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是更能确保类型安全而已。

    所以泛型只是提高了数据传输安全性,并没有改变程序运行的性能

    14、下列正确的 Java 语言标识符是( )

    正确答案: C
    Sky
    $Computer
    for
    NULL

    15、当我们需要所有线程都执行到某一处,才进行后面的的代码执行我们可以使用?
    正确答案: B
    CountDownLatch
    CyclicBarrier
    Semaphore
    Future

    CountDownLatch:一个或者多个线程,等待其他多个线程完成某件事情之后才能执行;
    CyclicBarrier:多个线程互相等待,直到到达同一个同步点,再继续一起执行。
    对于CountDownLatch来说,重点是“一个线程(多个线程)等待”,而其他的N个线程在完成“某件事情”之后,可以终止,也可以等待。
    而对于CyclicBarrier,重点是多个线程,在任意一个线程没有完成,所有的线程都必须互相等待,然后继续一起执行。
    CountDownLatch是计数器,线程完成一个记录一个,只不过计数不是递增而是递减,而CyclicBarrier更像是一个阀门,需要所有线程都到达,阀门才能打开,然后继续执行。
    按照这个题目的描述等所有线程都到达了这一个阀门处,再一起执行,此题强调的是,一起继续执行,我认为 选B 比较合理!

    16、代码片段:

    byte b1=1,b2=2,b3,b6; 
    final byte b4=4,b5=6; 
    b6=b4+b5; 
    b3=(b1+b2); 
    System.out.println(b3+b6);
    
    • 1
    • 2
    • 3
    • 4
    • 5

    关于上面代码片段叙述正确的是()
    正确答案: C
    输出结果:13
    语句:b6=b4+b5编译出错
    语句:b3=b1+b2编译出错
    运行期抛出异常

    C. 被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了
    而b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。
    Java中的byte,short,char进行计算时都会提升为int类型。

    17、关于下面一段代码,以下说法正确的是: ()

    public class Test {
        private synchronized void a() {
        }
        private void b() {
            synchronized (this) {
            }
        }
        private synchronized static void c() {
        }
        private void d() {
            synchronized (Test.class) {
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    正确答案: A C
    同一个对象,分别调用方法a和b,锁住的是同一个对象
    同一个对象,分别调用方法a和c,锁住的是同一个对象
    同一个对象,分别调用方法b和c,锁住的不是同一个对象
    同一个对象,分别调用方法a、b、c,锁住的不是同一个对象

    方法a为同步方法,方法b里面的是同步块,同步方法使用的锁是固有对象this,同步块使用的锁可以是任意对象,但是方法b里面的同步块使用的锁是对象this,所以方法a和方法b锁住的是同一个对象。方法
    c为静态同步方法,使用的锁是该类的字节码文件,也就是Test.class。方法d里面的也是同步块,只不过使用的锁是Test.class,所以方法c和方法d锁住的是同一个对象。

    18、JDK提供的用于并发编程的同步器有哪些?
    正确答案: A B C
    Semaphore
    CyclicBarrier
    CountDownLatch
    Counter

    A,Java 并发库 的Semaphore 可以很轻松完成信号量控制,Semaphore可以控制某个资源可被同时访问的个数,通过
    acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。
    B,CyclicBarrier
    主要的方法就是一个:await()。await() 方法没被调用一次,计数便会减少1,并阻塞住当前线程。当计数减至0时,阻塞解除,所有在此
    CyclicBarrier 上面阻塞的线程开始运行。
    C,直译过来就是倒计数(CountDown)门闩(Latch)。倒计数不用说,门闩的意思顾名思义就是阻止前进。在这里就是指
    CountDownLatch.await() 方法在倒计数为0之前会阻塞当前线程。 D,Counter不是并发编程的同步器

    19、下面的switch语句中,x可以是哪些类型的数据:()

    switch(x)
    {
    default:
    System.out.println("Hello");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    正确答案: B D F
    long
    char
    float
    byte
    double
    String

    以java8为准,switch支持10种类型 基本类型:byte char short int 对于包装类
    :Byte,Short,Character,Integer String enum

  • 相关阅读:
    Type android.support.v4.app.INotificationSideChannel is defined multiple times
    PostgreSQL 分组聚合查询中 filter 子句替换 case when
    Go语言开源13周年啦,看看负责人说了啥
    字符编码个人理解
    linux-划分分区&挂载磁盘
    python中字符串的应用详解
    禾匠编译错误记录
    动力节点最新Redis7笔记-Redis概述
    Vue基础3
    一行小错为何产生巨大破坏-Facebook史诗级故障大反思
  • 原文地址:https://blog.csdn.net/wangyuwe/article/details/126235814