Java教程

牛客错题集

本文主要是介绍牛客错题集,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

开新坑~

不积硅步无以至千里,不积小流无以成江海。

祝君笔面成功!

下列代码的输出结果?

public class HelloB extends HelloA 
{
 public HelloB()
 {
 }
 {
     System.out.println("I’m B class");
 }
 static
 {
     System.out.println("static B");
 }
 public static void main(String[] args)
 {
     new HelloB();
 }
}
class HelloA
{
 public HelloA()
 {
 }
 {
     System.out.println("I’m A class");
 }
 static
 {
     System.out.println("static A");
 }
}

答案:

static A
static B
I’m A class
I’m B class

口诀:有静先静,先父后子。

已知 Child extends Parent,如果 Child 是class,且只有一个有参数的构造函数,那么必然会调用Parent中相同参数的构造函数。

答案:错。

解析:调用什么构造方法取决于父类。默认调用父类的无参构造,若父类重写了构造方法,隐式无参构造就会失效,需要人为在父类显式编写无参构造,否则要在子类显式调用重写后的构造方法。

Java是一门支持反射的语言,基于反射为Java提供了丰富的动态性支持,下面关于Java反射的描述,哪些是错误的?

A. Java反射主要涉及的类如Class, Method, Filed,等,他们都在java.lang.reflet包下
B. 通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法
C. 通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成员
D. Java反射机制提供了字节码修改的技术,可以动态的修剪一个类
E. Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多
F. Java反射机制一般会带来效率问题,效率问题主要发生在查找类的方法和字段对象,因此通过缓存需要反射类的字段和方法就能达到与之间调用类的方法和访问类的字段一样的效率

答案:A D F
解析:
反射指的是在运行时能够分析类的能力的程序。

反射机制可以用来:

  1. 在运行时分析类的能力–检查类的结构–所用到的就是java.lang.reflect包中的Field、Method、Constructor,分别用于描述类的与、方法和构造器。A中的Class类在java.lang中。
  2. 在运行时查看对象。
  3. 实现通用的数组操作代码。

反射机制的功能:

  1. 在运行时判断任意一个对象所属的类
  2. 在运行时构造任意一个类的对象
  3. 在运行时判断任意一个类所具有的成员变量和方法
  4. 在运行时调用任意一个对象的方法

反射机制常见作用:

  1. 动态加载类、动态获取类的信息(属性、方法、构造器)
  2. 动态构造对象
  3. 动态调用类和对象的任意方法、构造器
  4. 动态调用和处理属性;获取泛型信息(新增类型:ParameterizedType,GenericArrayType等)
  5. 处理注解(反射API:getAnnotationsdeng等)

反射机制性能问题:反射会降低效率。

void setAccessible(boolean flag):是否启用访问安全检查的开关,true屏蔽Java语言的访问检查,使得对象的私有属性也可以被查询和设置。禁止安全检查,可以提高反射的运行速度。

可以考虑使用:cglib/javaassist操作。

volatile只能用于修饰变量,synchronize可以用于修饰方法、代码块,它们可以避免程序在多线程竞争情况下读到不正确的值。

JavaWEB中有一个类,当会话种邦定了属性或者删除了属性时,他会得到通知,这个类是:HttpSessionAttributeListener。

有如下一段代码,其运行结果是?

public class StringDemo{
  private static final String MESSAGE="taobao";
  public static void main(String [] args) {
    String a ="tao"+"bao";
    String b="tao";
    String c="bao";
    System.out.println(a==MESSAGE);
    System.out.println((b+c)==MESSAGE);
  }
}  

答案:

true
false

解析:
(b+c)==MESSAGE 这相当于 new String(b+c)==MESSAGE 这里new了一个String对象,所以返回false。

以下代码将打印出

public static void main (String[] args) { 
    String classFile = "com.jd.". replaceAll(".", "/") + "MyClass.class";
    System.out.println(classFile);
}

答案:

///MyClass.class

解析:
由于replaceAll方法的第一个参数是一个正则表达式,而 “.” 在正则表达式中表示任何字符,所以会把前面字符串的所有字符都替换成 “/” 。如果想替换的只是 “.” ,那么久要写成 “\.” 。

JSP的9个内置对象:
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对象)。

Java.Thread的方法resume()负责重新开始被哪个方法中断的线程的执行?
答案:suspend()
解析:
suspend() 和 resume() 方法:两个方法配套使用,suspend()使得线程进入阻塞状态,并且不会自动恢复,必须其对应的 resume() 被调用,才能使得线程重新进入可执行状态。(这对方法已废弃)

这篇关于牛客错题集的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!