java笔试练习题笔记(8)

下面哪个选项是main方法的返回类型?
A.int
B.void
C.Boolean
D.static

答案解析: public static void main(String args[])


下列关于Java中类的构造方法的描述,正确的是()

A.构造方法的返回类型为void
B.可以定义一个类而在代码中不写构造方法。
C.在同一个类中定义的重载构造方法不可以相互调用。
D.子类不允许调用父类的构造方法。

答案解析:

A、构造器没有返回值,这个没有返回值和返回值为void可部一样。

B、每个类在没有自己显式声明构造器的时候,都会有一个默认的无参构造。

C、构造器可以重载,而且可以使用super()、this()相互调用

D、每个构造器的默认第一行都是super(),但是一旦父类中没有无参构造,必须在子类的第一行显式的声明调用哪一个构造。


已知如下的命令执行 java MyTest a b c 请问哪个语句是正确的? ( )

A.args[0] = "MyTest a b c"
B.args[0] = "MyTest"
C.args[0] = "a"
D.args[1]= "b"

答案解析::对于java命令,类名后面跟着的就是main函数的参数,多个参数则用空格隔开。 main方法的形参是一个string数组所以对于java mytest a b c传入的参数算是一个string数组。 即args[0]=a args[1]=b args[2]=c


.
Java类Demo中存在方法func1、func2、func3和func4,请问该方法中,哪些是不合法的定义?( )
public class Demo{
 
  float func1()
  {
    int i=1;
    return;
  }
  float func2()
  {
    short i=2;
    return i;
  }
  float func3()
  {
    long i=3;
    return i;
  }
  float func4()
  {
    double i=4;
    return i;
  }
}
A.func1
B.func2
C.func3
D.func4

答案解析:

考的是数据类型转换问题。由大到小需要强制转换,由小到大不需要。

A:return;   没有返回值,错误

B:short → float 无须强制转换,正确

C:long → float  无须强制转换(这个最选项容易出错),正确。

float占4个字节为什么比long占8个字节大呢,因为底层的实现方式不同。

浮点数的32位并不是简单直接表示大小,而是按照一定标准分配的

第1位,符号位,即S

接下来8位,指数域,即E。

剩下23位,小数域,即M,取值范围为[1 ,2 ) 或[0 , 1)

然后按照公式: V=(-1)^s * M * 2^E

也就是说浮点数在内存中的32位不是简单地转换为十进制,而是通过公式来计算而来,通过这个公式虽然,只有4个字节,但浮点数最大值要比长整型的范围要大

D:double → float 没有强制转换,错误



一个以”.java”为后缀的源文件
A.只能包含一个类,类名必须与文件名相同
B.只能包含与文件名相同的类以及其中的内部类
C.只能有一个与文件名相同的类,可以包含其他类
D.可以包含任意类

答案解析:.java文件只能有一个类是与文件名相同,而包含的其他类不能与之相同,还需注意的是一个.java文件最多有一个public修饰的类。这里要与.class文件分开,一个.class文件有且只有一个类编译后.class


abstract和final可以同时作为一个类的修饰符。(  )

A.正确
B.错误

答案解析:abstract修饰一个类,这个类肯定可以被继承,但是final类是不能继承的,所以有矛盾,肯定不能同时用


以下 _____ 不是 Object 类的方法

A.clone()
B.finalize()
C.toString()
D.hasNext()

答案解析:又考这种题了,所以还是需要记一下的。

fe996ca07a9e489281a644b780112bdc.png


下列哪种情况可以终止当前线程的运行?

A.当一个优先级高的线程进入就绪状态时
B.当该线程调用sleep()方法时
C.当创建一个新线程时
D.抛出一个异常时

 答案解析:当一个优先级高的线程进入就绪状态时 (并不会立即执行,等待时间片轮到的时候才会执行)当该线程调用sleep()方法时 (阻塞当前线程,直到阻塞时间达到,重新进入就绪队列。阻塞不是终止包括wait()也一样)当创建一个新线程时 (同A选项一样,进入就绪队列,等待时间片轮到)。


有关hashMap跟hashtable的区别,说法正确的是?
A.HashMap和Hashtable都实现了Map接口
B.HashMap是非synchronized,而Hashtable是synchronized
C.HashTable使用Enumeration,HashMap使用Iterator
D.HashMap允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。

答案解析:这俩经常一起考要记住区别。

6af8b35c13d34b7e9c3f26e164c643d7.png


关于下面代码 int[] x=new int[25]; 描述正确的是()

A.x[25]存放了数据“\0”。
B.x[24] 存放了数据“\0”。
C.若访问x[25],程序将抛出异常。
D.x[1]访问此数组的第一个元素。

答案解析:java没有“/0”。下标从0到max-1。


以下哪个不是Collection的子接口?
A.List
B.Set
C.SortedSet
D.Map

答案解析:map自己是顶级接口。

Map 接口有以下几个实现:

  1. HashMap:基于哈希表的 Map 接口实现,它允许空键和空值。HashMap 不保证映射的顺序,但在大多数实现中,其迭代顺序是无序的。

  2. LinkedHashMap:类似于 HashMap,但它维护了一个双向链表,可以按照插入顺序或访问顺序来遍历键值对。

  3. TreeMap:基于红黑树的 Map 接口实现,可以按照键的自然顺序或自定义顺序对键进行排序。

  4. Hashtable:与 HashMap 类似,但它是线程安全的,不允许空键和空值。

  5. ConcurrentHashMap:提供了更好的并发性能的 HashMap 实现,适用于需要高并发处理的场景。

7fbd50b38de24e9e9160ea5124990ed5.png


@SuppressWarnings(“deprecation”)的功能是什么?
A.屏蔽不赞同使用的类和方法的警告
B.屏蔽在强制类型转换的时候编译器给出的警告
C.关闭所有警告信息
D.当在可序列化的类上缺少serialVersionUID定义的警告

答案解析:

1.Java三大注解分别是@Override @Deprecated @Suppresswarnings

2.@Override 注解表名子类中覆盖了超类中的某个方法,如果写错了覆盖形式,编译器会报错

3.@Deprecated 表明不希望别人在以后使用这个类,方法,变量等等

4.@Suppresswarnings 达到抑制编译器产生警告的目的,但是不建议使用,因为后期编码人员看不懂编译器提示的警告,不能更好的选择更好的类去完成任务。


关于 Socket 通信编程,以下描述正确的是:( )

A.客户端通过new ServerSocket()创建TCP连接对象
B.客户端通过TCP连接对象调用accept()方法创建通信的Socket对象
C.客户端通过new Socket()方法创建通信的Socket对象
D.服务器端通过new ServerSocket()创建通信的Socket对象

答案解析:

客户端: new Socket (主机名,端口号);

服务端:new ServerSocket(端口号);

服务端调用accet()之后才创建Socket对象;


以下哪个类型是基本数据类型()
A.int
B.String
C.Byte
D.Float

答案解析:除了8个基本类型,其他都是引用类,注意java是强区分大小写。


在程序代码中写的注释太多,会使编译后的程序尺寸变大。
A.正确
B.错误

答案解析:

javadoc 用来识别注释
javac 用来识别代码
二者互不影响 


关于Java中参数传递的说法,哪个是错误的?
A.在方法中,修改一个基础类型的参数不会影响原始参数值
B.在方法中,改变一个对象参数的引用不会影响到原始引用
C.在方法中,修改一个对象的属性会影响原始对象参数
D.在方法中,修改集合和Maps的元素不会影响原始集合参数

答案解析:首先java只有值传递。然后除了基本数据类型是传值,其他都是传引用,所以修改会影响数据。修改引用当然不会影响原数据。


在创建派生类对象,构造函数的执行顺序()
A.基类构造函数,派生类对象成员构造函数,派生类本身的构造函数
B.派生类本身的构造函数,基类构造函数,对象成员构造函数
C.基类构造函数,派生类本身的构造函数,派生类对象成员构造函数
D.对象成员构造函数,基类构造函数,派生类本身的构造函数

答案解析:1.基类:就是父类,派生类:就是子类。 2.首先:父类优先子类,静态优先非静态。对象成员构造函数就是非静态的代码块。

记忆:先造出了你爸(基类构造函数)才生出了你,你的手、脚(派生类对象成员构造函数)先构造了才组成你(派生类本身的构造函数)


下面几个关于Java里queue的说法哪些是正确的()?
A.LinkedBlockingQueue是一个可选有界队列,不允许null值
B.PriorityQueue,LinkedBlockingQueue都是线程不安全的
C.PriorityQueue是一个无界队列,不允许null值,入队和出队的时间复杂度是O(log(n))
D.PriorityQueue,ConcurrentLinkedQueue都遵循FIFO原则

答案解析:

  • LinkedBlockingQueue:可选有界的线程安全阻塞队列,允许 null 值,实现 FIFO。
  • PriorityQueue:无界(或有界)的线程不安全优先队列,不允许 null 值,基于优先级堆实现。
  • ConcurrentLinkedQueue:无界的线程安全非阻塞队列,遵循 FIFO 原则。
    如果希望某个变量只可以被类本身访问和调用,则应该使用下列哪一种访问控制修饰?
    
    A.public
    B.private
    C.private protected
    D.protected

    答案解析:

  • 6dc68e97bf454f6195dfbfcc50b0a811.png



以下选项中循环结构合法的是:
A.while(int i<7){i++;System.out.println("i is "+i);}
B.int j=3;while(j){ System.out.println("j is "+j);}
C.int j=0;for(int k=0;j+k!=10;j++,k++){System.out.println("j is "+j+"k is" +k);}
D.int j=0; do{System.out.println("j is "+j++);if(j==3){continue loop;}}while(j<10);

 答案解析:ava中的while()括号种为boolean类型,应该如j==3,j>1之类才行。


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");
     }
}
下面结果输出是?

A.The output is “Equal”
B.The output in “Not Equal”
C.An error at line 5 causes compilation to fall.
D.The program executes but does not print a message.

答案解析:考验眼神吧(=和==得看清),java的if()里必须是布尔类型。


将下列(A、B、C、D)哪个代码替换下列程序中的【代码】不会导致编译错误?
interface Com{
    int M=200;
    int f();
}
class ImpCom implements Com{
    【代码】
}


A.public int f(){return 100+M;}
B.int f(){return 100;}
C.public double f(){return 2.6;}
D.public abstract int f();

答案解析:

1、必须实现接口中所有的方法。

在实现类中实现接口时,方法的名字、返回值类型、参数的个数及类型必须与接口中的完全一致,并且必须实现接口中的所有方法。

2、接口实现类相当于子类,子类的访问权限是不能比父类小的。

接口中所有方法默认都是public,至于为什么要是public,原因在于如果不是public,那么只能在同个包下被实现,可访问权限就降低很多了,那么在实现类中,实现的类相当于子类,子类的访问权限是不能比父类小的,而在java中一个类如果没有权限的修饰符,默认是friendly(同一个包内的其它类才可访问),所以在实现类中一定要写public


关于中间件特点的描述.不正确的是()
A.中间件运行于客户机/服务器的操作系统内核中,提高内核运行效率
B.中间件应支持标准的协议和接口
C.中间件可运行于多种硬件和操作系统平台上
D.跨越网络,硬件,操作系统平台的应用或服务可通过中间件透明交互

答案解析:中间件位于操作系统之上,应用软件之下,而不是操作系统内核中


下列对接口的说法,正确的是( )

A.接口与抽象类是相同的概念
B.若要实现一个接口为普通类则必须实现接口的所有抽象方法
C.接口之间不能有继承关系
D.一个类只能实现一个接口

答案解析:java8中接口可以有默认和静态方法,实现接口的类不一定要实现他们,但选项是说抽象方法,抽象方法还是必须实现的。


下面有关servlet中init,service,destroy方法描述错误的是?
A.init()方法是servlet生命的起点。一旦加载了某个servlet,服务器将立即调用它的init()方法
B.service()方法处理客户机发出的所有请求
C.destroy()方法标志servlet生命周期的结束
D.servlet在多线程下使用了同步机制,因此,在并发编程下servlet是线程安全的

答案解析:servlet 对象在 tomcat 服务器是单实例多线程的。 因为 servlet 是多线程的,所以当多个 servlet 的线程同时访问了 servlet 的共享数据,如成员变量,可能会引发线程安全问题。

Servlet 生命周期:Servlet 加载--->实例化--->服务--->销毁。

init():在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。

service():它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。

destroy(): 仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。


下面哪个不属于HttpServletResponse接口完成的功能?
A.设置HTTP头标
B.设置cookie
C.读取路径信息
D.输出返回数据

答案解析:

A:设置HTTP头标  

response.setHeader("Refresh","3"); //三秒刷新页面一次

B:设置cookie

Cookie c1 = new Cookie("username","only");
response.addCookie(c1);

C(错误):读取路径信息,request读取路径信息

从request获取各种路径总结 
request.getRealPath("url"); // 虚拟目录映射为实际目录
request.getRealPath("./");    // 网页所在的目录
request.getRealPath("../"); // 网页所在目录的上一层目录
request.getContextPath();    // 应用的web目录的名称

D:输出返回数据

HttpServleteResponse.getOutputStream().write();

下面说法正确的是?()
A.调用Thread的sleep()方法会释放锁,调用wait()方法不释放锁
B.一个线程调用yield方法,可以使具有相同优先级线程获得处理器
C.在Java中,高优先级的可运行的线程会抢占低优先级线程的资源
D.java中,线程可以调用yield方法使比自己低优先级的线程运行

答案解析:这四个方法的区别经常考。

sleep()会抱着锁睡觉,wait会把锁释放

yield()让有相同优先级的线程之间能够适当的轮换执行

1aa7eccbaac6482b8b0debd0e2cfb391.png


下列说法错误的有( )
A.在类方法中可用this来调用本类的类方法
B.在类方法中调用本类的类方法时可直接调用
C.在类方法中只能调用本类中的类方法
D.在类方法中绝对不能调用实例方法

 答案解析:类方法:使用static修饰,属于整个类的,不是属于某个实例的,只能处理static域或调用static方法;  实例方法:属于对象的方法,由对象来调用。 一个类中的方法可以互相调用。但要注意:实例方法可以调用该类中的其他方法。 类方法只能调用其他类方法,不能调用实例方法。 当类文件加载到内存时,实例方法不会被分配内存空间,只有在对象创建之后才会分配。而类方法在该类被加载到内存时就分配了相应的内存空间。 实例方法既能对类变量操作也能对实例变量操作。类方法只能访问其他static方法。类方法只能访问其他static数据,例如,类变量。


题目问是的基本都是单选,问有的基本都是多选,一直忘了标单多选了我的错。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值