开新坑~
不积硅步无以至千里,不积小流无以成江海。
祝君笔面成功!
下列代码的输出结果?
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
解析:
反射指的是在运行时能够分析类的能力的程序。
反射机制可以用来:
反射机制的功能:
反射机制常见作用:
反射机制性能问题:反射会降低效率。
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() 被调用,才能使得线程重新进入可执行状态。(这对方法已废弃)