1.java类中Static块的相关问题
. Java在使用到类时才加载类到程序中。如果在加载类时,希望先进行一些类的初始化动作,可以使用static定义一个静态区块,并在当中编写类载入时的初始化动作。例如:
Java代码
public class SomeClass{static{System.out.println(“The class is loaded!”);}}public class StaticBlockDemo{public static void main(String[] args){SomeClass someClass = new SomeClass();}}在使用new来建立SomeClass的实例时,SomeClass类会被加载,加载之后预设会执行静态区块的内容,所以程序的执行结果如下所示:
The class is loaded!”.
————————————————————————————————————————————————————————————
2. 方法重载的相关问题:
Java代码public class SomeClass{public int SomeMethod(int i){//…return 0;}public float SomeMethod(int i){//…return 0.0;}}在J2SE 5.0后当使用方法重载时,要注意到autoboxing和unboxing的问题,如下列代码的输出您认为该是什么呢?
Java代码public class OverLoadTest{public static void main(String[] args){someMethod(1);}public static void someMethod(int i){System.out.println(“int 版本被调用”);}public static void someMethod(Integer i){System.out.println(“Integer 版本被调用”);}}
程序的运行结果是:int版本被调用。不能期待装箱动作会发生。如果想要调用参数行为Integer版本的方法,要明确指定。如: someMethod(new Integer(1));
编译器在处理重载方法、装箱问题和不定长度参数时,会依下面的顺序来找符合的方法:(1) 寻找在还没有装箱动作前可以符合参数个数与类型的方法;
(2) 尝试装箱动作后可以符合参数个数与类型的方法;
(3) 尝试设有不定长度参数并可以符合的方法;
(4) 编译器找不到合适的方法,报告编译错误。
————————————————————————————————————————————————————————————
3.一块来看看StringBuilder这个类
如果程序对附加字符串的需求很频繁,不建议使用+来进行字符串的串联。可以考虑使用java.lang.StringBuilder类,使用这个类所产生的对象默认会有16个字符的长度,您也可以自行指定初始长度。如果附加的字符超出可容纳的长度,则StringBuilder对象会自动增加长度以容纳被附加的字符。如果有频繁作字符串附加的需求,使用StringBuilder类能使效率大大提高。如下代码:
public class AppendStringTest
{
public static void main(String[] args)
{
String text = “”;
long beginTime = System.currentTimeMillis();
for(int i=0;i<10000;i++)
text = text + i;
long endTime = System.currentTimeMillis();
System.out.println(“执行时间:”+(endTime-beginTime));
StringBuilder sb = new StringBuilder(“”);
beginTime = System.currentTimeMillis();
for(int i=0;i<10000;i++)
sb.append(String.valueOf(i));
endTime = System.currentTimeMillis();
System.out.println(“执行时间:”+(endTime-beginTime));
}
}
StringBuilder是j2se1.5.0才新增的类,在此之前的版本若有相同的需求,则使用java.util.StringBuffer。事实上StringBuilder被设计为与StringBuffer具有相同的操作接口。在单机非线程(MultiThread)的情况下使用StringBuilder会有较好的效率,因为StringBuilder没有处理同步的问题。StringBuffer则会处理同步问题,如果StringBuilder会有多线程下被操作,则要改用StringBuffer,让对象自行管理同步问题。
补加上的:
String类型的变量在进行字符串操作的时候,地址是会变的,所以我们可以得出这样的结论:String和stringBuilder的区别在于String类型的变量改变值的时候是有可能改变地址的,而后者的对象无论如何改变其值,所占用的内存地址不发生变化 。
当然要比较两个string的值,一定要用equals()方法。- -!用两个等号必然悲剧。
————————————————————————————————————————————————————————————
4.(2011.11.30)Ajax提交数据时中文乱码问题:
解决乱码问题的两种方法:
第一种方法:页面端发出的数据做一次encodeURI,服务器使用 new String(old.getBytes(“iso8859-1″),”UTF-8″);
第二种方法:页面端发出的数据做两次encodeURI; 服务器端用URLDecode.decode(old,”UTF-8”);



