牛客刷题错题本 5/14

关于Java语言的内存回收机制,下列选项中最正确的一项是:(C)
		 A. Java程序要求用户必须手工创建一个线程来释放内存 	
		 B. Java程序允许用户使用指针来释放内存 	
		 C. 内存回收线程负责释放无用内存
		 D. 内存回收线程不能释放内存对象

解析:java虚拟机中的垃圾回收机制是一个类,当该对象没有更多的应用指向它时,就会被垃圾回收器给回收,从而释放资源。该机制不可以程序员手动调用去回收某个对象,系统自动回去调用,当然程序员可以建议垃圾回收器回收某个对象。所以java中无需程序员手动释放内存,系统自动释放无用内存。

表达式(short)10/10.2*2运算后结果是什么类型?(C)
A.short
B.int
C.double
D.float

解析:首先,要注意是(short)10/10.22,而不是(short) (10/10.22),前者只是把10强转为short,又由于式子中存在浮点数,所以会对结果值进行一个自动类型的提升,浮点数默认为double,所以答案是double;后者是把计算完之后值强转short。

下面哪个行为被打断不会导致InterruptedException:( )?
正确答案: E   你的答案: B (错误)
Thread.join
Thread.sleep
Object.wait
CyclicBarrier.await
Thread.suspend

解析:API里面写的:当线程在活动之前或活动期间处于正在等待、休眠或占用状态且该线程被中断时,抛出该异常。

下面有关JSP内置对象的描述,说法错误的是?
正确答案: C   你的答案: B (错误)
session对象:session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止
request对象:客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应
application对象:多个application对象实现了用户间数据的共享,可存放全局变量
response对象:response对象包含了响应客户请求的有关信息

解析:application对象是共享的,多个用户共享一个,以此实现数据共享和通信
JSP内置对象和属性列举如下:
1.request对象
客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
2.response对象
response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。
3.session对象
session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例.
4.out对象
out对象是JspWriter类的实例,是向客户端输出内容常用的对象
5.page对象
page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例
6.application对象
application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。
7.exception对象
exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象
8.pageContext对象
pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext。
9.config对象
config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)

尝试编译以下程序会产生怎么样的结果?()

public class MyClass {
    long var;
    public void MyClass(long param) { var = param; }//(1)
    public static void main(String[] args) {
        MyClass a, b;
        a =new MyClass();//(2)
        b =new MyClass(5);//(3)
    }
}

正确答案: C   你的答案: A (错误)
编译错误将发生在(1),因为构造函数不能指定返回值
编译错误将发生在(2),因为该类没有默认构造函数
编译错误将在(3)处发生,因为该类没有构造函数,该构造函数接受一个int类型的参数
该程序将正确编译和执行

解析:这道题一定要看仔细了,MyClass方法并不是构造参数,而是返回类型为void的普通方法,普通方法自然需要实例化对象然后去调用它,所以124不对,第三个是正确的,因为没有带参数的构造器,所以自然不能传一个int进去。

如果Child extends Parent,那么正确的有()?
正确答案: B C D   你的答案: A D (错误)
如果Child是class,且只有一个有参数的构造函数,那么必然会调用Parent中相同参数的构造函数
如果Child是interface,那么Parent必然是interface
如果Child是interface,那么Child可以同时extends Parent1,Parent2等多个interface
如果Child是class,并且没有显示声明任何构造函数,那么此时仍然会调用Parent的构造函数

解析:A、子类的构造器第一行默认都是super(),默认调用直接父类的无参构造,一旦直接父类没有无参构造,那么子类必须显式的声明要调用父类或者自己的哪一个构造器。
BC、接口只能继承接口,但是可以多继承。类都是单继承,但是继承有传递性。
D、一个类一旦没有显式的定义任何构造,那么JVM会默认给你一个无参构造。无参构造的第一行依然默认是super()。

一般用()创建InputStream对象,表示从标准输入中获取数据,用()创建OutputStream对象,表示输出到标准输出设备中。
正确答案: A   你的答案: C (错误)
System.in System.out
System.out System.in
System.io.in System.io.out
System.io.out System.io.in

解析:System.in 和 System.out 是java中的标准输入输出流,一般情况下代表从控制台输入和输出到控制台

以下哪个I / O类可以附加或更新文件
正确答案: A   你的答案: C (错误)
RandomAccessFile()
OutputStream()
DataOutputStream()
None of the above

解析:RandomAccessFile 可以通过 seek(long pos) 方法去移动文件指针进行追加更新写入.
OutputStream() 是一个抽象类 不能直接实例化去写入
DataOutputStream() 也无法追加写入

有一个源代码,只包含import java.util.* ; 这一个import语句,下面叙述正确的是?   ( )

正确答案: C   你的答案: B (错误)
只能写在源代码的第一句
可以访问java/util目录下及其子目录下的所有类
能访问java/util目录下的所有类,不能访问java/util子目录下的所有类
编译错误

解析:导入java.util.*不能读取其子目录的类,因为如果java.util里面有个a类,java.util.regex里面也有个a类,我们若是要调用a类的方法或属性时,应该使用哪个a类呢。所以也应该选C

Java创建对象的说法正确的有()
正确答案: A B C D   你的答案: A B D (错误)
用new语句创建对象,是最常见的创建对象的方法。
运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。
调用对象的clone()方法。
运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。

解析:Java有5种方式来创建对象:

  1. 使用 new 关键字(最常用): ObjectName obj = new ObjectName();
  2. 使用反射的Class类的newInstance()方法: ObjectName obj =
    ObjectName.class.newInstance();
  3. 使用反射的Constructor类的newInstance()方法:
    ObjectName obj = ObjectName.class.getConstructor.newInstance();
  4. 使用对象克隆clone()方法: ObjectName obj = obj.clone();
  5. 使用反序列化(ObjectInputStream)的readObject()方法: try (ObjectInputStream ois
    = new ObjectInputStream(new FileInputStream(FILE_NAME))) { ObjectName obj = ois.readObject(); }

你可能感兴趣的:(Java,ee)