前面10个发表过了...
10.接口中的成员变量默认都是public static final类型的,必须被显式初始化
接口中的成员方法默认都是public abstract类型的
11.struts2中,actionerror与fielderror的区别
(1).actionerror里面加入的为错误信息,为一个集合
fielderror里面加入的为一个键值对,为一个map
this.addFieldError("birthday","birthday should be before gradution");
this.addActionError("birthday should be before gradution");
(2).在struts标签中,能自动显示fielderror中的错误,根据map里面的key找到错误信息
actionerror显示不出来,需在jsp页面上加上<s:actionerror/>
(3).如果不想显示struts自带的类型转换错误,可以将form的表单的theme设置为simple,这时
struts表单就完成了一个html表单
<s:form action="register" theme="simple">
12.面试:==和equals()的区别?
==:
可以比较基本类型,也可以比较引用类型
比较基本类型,比较的是值是否相同
比较引用类型,比较的是地址值是否相同
equals:
只能比较引用类型
默认情况下,比较的是地址值是否相同
如果想比较内容,请自己重写Object类的equals()方法
13.面试:
(1).字符串一旦被赋值就不能被改动。 注意:这里的改动指的是字符串内容
(2).String s = new String("hello")和String s = "hello"有区别吗?是什么?
有
前者创建了两个对象
后者创建了一个对象
14.关键字instanceof
instanceof关键字用于判断一个引用类型变量所指向的对象是否是一个类(或接口、抽象类、父类)的实例。
15.浅谈字符与字符串
'A'~'z'都是字符,而''为字符串(中间什么都没有),而' '为字符(因为中间有一个空格,也算字符)
16.面试:
String和StringBuffer的区别?
String的长度固定
StringBuffer的长度可变
StringBuffer和StringBuilder的区别?
StringBuffer的线程安全,效率低
StringBuilder的线程不安全,效率高
17.抽象类和接口中有构造方法吗?
抽象类有,接口没有
几个接口中不能定义构造器的理由:
1.构造器用于初始化成员变量,接口没有成员变量
2.类可以实现多个接口,若多个接口都有自己的构造器,则不好决定构造器链的调用次序
3.构造器是属于类自己的,不能继承,因为是纯虚的,接口不需要构造器
18.java中的String为什么可以使用==比较字符串内容?
一句话概括:
java中的String是final类,final类是共享数据的,而java中==比较的是内存地址,而final类的String相同字符串,指向的是同一个地址!
详细:
“==”在任何时候都是比较地址,这种比较永远不会被覆盖。
java中的String类是final类,final修饰类,被final修饰的类将不能被继承。final类中的方法也都是final的。
对象一旦创建属性就不会改变,不变模式可以实现对象的共享(可以用一个对象实例赋值给多个对象变量)。
池化的思想,把需要共享的数据放在池中(节省空间,共享数据)只有String类可以用“”中的字面值创建对象。在String类中,以字面值创建时,会到Java方法空间的串池空间中去查找,如果有就返回串池中字符串的地址,并把这个地址付给对象变量。如果没有则会在串池里创建一个字符串对象,并返回其地址付购对象变量,当另一个以字面值创建对象时则会重复上述过程。
如果是new在堆空间中创建String类的对象,则不会有上述的过程(String做字符串连接效率低原因)。
所以相同字符串在内存是同一个对象,一个永不变的对象!
19.document.getElementsByName()与 document.getElementById()、document.getElementsByTagName()的区别
document.getElementsByName() 是根据控件名称获取这个控件对象,因为控件名称可以相同,返回的是一个对象数组。
document.getElementById() 是根据控件ID获取这个控件对象,因为控件ID唯一,返回的是一个对象。
document.getElementsByTagName() 是根据控件TAG获取这个控件对象,返回的是一个对象数组。
例如:
HTML中有控件如下:
<input type="radio" id="radio1" checked="checked" name="radiogroup1" value="1"/>
<input type="radio" id="radio2" name="radiogroup1" value="2"/>
<input type="radio" id="radio3" name="radiogroup1" value="3"/>
则:
document.getElementsByName('radiogroup1') 取得的是这三个控件,可以用 document.getElementsByName('radiogroup1')[0] 取得的是第一个控件。
document.getElementById('radio1')取得的是第一个控件,
document.getElementsByTagName('input') 取得的是这三个控件,
可以用document.getElementsByTagName('input')[0] 取得的是第一个控件。
getElementsByName('delID')返回的是所有名称为'delID'的控件组成的数组,数组就是一种集合。
20.
null值不能被打印,如果String s;syso(s),会报错,s未被初始化,但是如果String s=null;syso(s) 则不会报错,会打印null值
21.
所谓“懒汉式”与“饿汉式”的区别,是在与建立单例对象的时间的不同。
“懒汉式”是在你真正用到的时候才去建这个单例对象:
比如:有个单例对象
public class Singleton{
private Singleton(){}
private static Singleton singleton = null; //不建立对象
public static synchronized Singleton getInstance(){
if(singleton == null) { //先判断是否为空
singleton = new Singleton (); //懒汉式做法
}
return singleton ;
}
}
“饿汉式”是在不管你用的用不上,一开始就建立这个单例对象:比如:有个单例对象
public class Singleton{
public Singleton(){}
private static Singleton singleton = new Singleton(); //建立对象
public static Singleton getInstance(){
return singleton ;//直接返回单例对象 }}
它有以下几个要素:
私有的构造方法
指向自己实例的私有静态引用
以自己实例为返回值的静态的公有的方法
22.EL表达式的4大域
属性范围 El中的名称
page pageScope
request requestScope
session sessionScope
application applicationScope
23.
char a = '\u1432';万国码
char c = 65535;
syso(c);
考点可以通过编译:16进制编码(ffff=65535)
23.servlet是单例,而Action不是单例,每个请求都会创建新的Action对象,以及ValueStack和OgnlContext
action一个请求就是一个线程,不会出现线程安全问题
24. 方法中的内部类能不能访问方法中的局部变量,为什么?
不能,方法中的内部类和局部变量的生命周期不一样,内部类也是一个类
,储存在堆中,也只有当对该类的引用消失时,内部类才会消失,而方法
的局部变量是储存在栈中的,当调用结束时会退栈,即在内存中消失,也就
是说,内部类的生命周期超过了方法中的局部变量的生命周期,内部类可能
会调用到已经消失的属性,因此内部类不能访问方法中的局部变量,解决方法
是在局部变量前加修饰final,此时局部变量就会存在堆中,生命周期跟工程
的生命周期是一样的,此时内部类就可以访问方法中的局部变量.
|
|