资料收集于互联网(如有不妥,请告之)、个人心得。
1.默认的浮点类型是双精度(double),要想要一个float必须在浮点数后面加F或者f。如:float pi = 3.14;是错误的
2.浮点型转化为整型时,不进行四舍五入,直接截断小数点后面的数.Java的类型检查很严格,从低精度转换到高精度是无须显式转换的,double d = 123;。但是反过来,进行窄化转换,由高精度向低精度,或者一种类型到另一种类型,则必须使用强制类型转化。
3.在数组声明中包含数组长度永远是不合法的!如:int[5] arr; 。因为,声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。
4.对象类型的数组虽然被默认初始化了,但是并没有调用其构造函数。也就是说:Car[] myCar = new Car[10];只创建了一个myCar数组对象!并没有创建Car对象的任何实例!这与单纯的new一个对象不同!单个的new对象时,就会调用相应的构造函数。
5.数组有length属性,字符串有length()方法
6.String中的每个字符都是一个16位的Unicode字符,用Unicode很容易表达丰富的国际化字符集,比如很好的中文支持。char中可以保存一个中文汉字,应为char也是一个16位的Unicode字符度为0。
8.String对象是不变的!可以变化的是String对象的引用。
9.String的不变性的机制显然会在String常量内有大量的冗余。如:"1" + "2" + "3" +......+ "n" 产生了n+(n+1)个String对象!因此Java为了更有效地使用内存,JVM留出一块特殊的内存区域,被称为“String常量池”。对 String多么照顾啊!当编译器遇见String常量的时候,它检查该池内是否已经存在相同的String常量。如果找到,就把新常量的引用指向现有的 String,不创建任何新的String常量对象。
10.java中的对象是在堆中被创建的(new),但常量类的String有点特别!像“haha”这样的字符串根据第9条是存放在String常量池的,而String s=new String("haha");确实在堆中被创建的。
11.throw和throws关键字。throw用在方法体中抛出异常,后面是一个具体的异常对象。throws用在方法参数列表括号的后面,用来声明此方法会抛出的异常种类,后面跟着一个异常类。
12.要把相应的System.out和System.err信息输入到文件中。代码:
try {
System.out.println("没上");
System.setOut(new PrintStream(new FileOutputStream(new File( "c:/test.txt "))));
System.out.println( "haha ");
System.out.println("error");
} catch (Exception e) {
e.printStackTrace();
}
err的吧setOut改为setErr就可以了。
13.为一个接口提供缺省实现,便于子类有选择从这个缺省实现进行扩展.而不必对原有接口所有方法进行实现,哪怕是空实现.
interface 窗口{
public void 关闭();
public void 移动();
public ovid 最大化();
}
//-----------------------------------------
Frame implements 窗口{//不用适配器
public void 关闭(){
System.out.println("关闭窗口");
}
public void 移动()[
}
public ovid 最大化(){
}
}
//运用适配器-------------------------------
public abstract Frame implements 窗口{
public void 关闭(){
}
public void 移动(){
}
public ovid 最大化(){
}
}
public CloseFrame extends Frame{
public void 关闭(){
System.out.println("关闭窗口");
}
}