最近在图书馆看书,偶然发现书架子上一本Java的书《Head First Java》。以前看过《Head First 设计模式》,感觉很不错,令人印象深刻。于是就把这本《Head First Java》借了回来。明天就是五一节了,导师的项目感觉进展比较顺利,早上就偷偷看看这本《Head First Java》,并把一些感觉重要的记录下来,算是拾遗了。
1,接口一定是public的,这一点毋庸置疑。接口的成员变量一定是public static final型的,不管你写不写这些关键字。就算你在接口中这样定义变量: int num=0;(注意,IDE一定会提示你对其进行初始化)。实际上编译器会自动加上public static final。接口的成员方法一定是public abstract的。哪怕你这样定义方法: void show(); (注意一定要加;)。实际上编译器会自动加上public abstract。
2,每个构造函数可以选择调用super()或this(),但是不能同时调用。super()和this()不能兼得。要显示调用super()或this()的话必须在构造函数的第一行。不显示调用也可以,编译器会自动给加上没有参数的那个super()的。但是要是父类没有没有参数的构造函数,而子类又没有显示调用父类的带参数的构造函数,那就坏事了。
3,大家都知道Object是所有类的父类。在子类调用new在堆中创建实例化对象的时候。实际上是先调用其父类的构造函数创建一个父类的实例化对象。这样一来堆中的子类对象就像是洋葱结构,父类对象在里面,子类多余父类的部分在外边。一层包一层。
4,如果一个类中有另一个类的实例化对象的引用,这样的话在堆中另一个类的实例化对象并不存在于这个类的实例化对象中,并不是洋葱结构的。而是在本类中保持一个引用变量的空间,另一个类独立的在堆中开辟一块区域存储实例化对象,这个引用指向那个新开辟的即可。
5,如果类已经是final的,再标记final的方法就很多余了。如果一个类不能被继承,那么他的所有方法都不能被覆盖。final方法就没有必要标记了。
6,如果类只有静态的方法,你可以将构造函数标记为private的以避免被初始化。
7,String.format()可以格式化字符串:
public class Format {
public static void main(String args[]){
String str=String.format("%,d",23456);
System.err.println(str);
}
}
//结果:
23,456
public class Format {
public static void main(String args[]){
String str=String.format("%,.2f",23456.6633);
System.err.println(str);
}
}
//结果:
23,456.66
8,String.format还可以格式化日期。
public class Format {
public static void main(String args[]){
Date today=new Date();
System.err.println(String.format("%tc", today));
System.err.println(String.format("%tr", today));
System.err.println(String.format("%tA ,%tB %td",today,today,today ));
}
}
//结果:
星期三 四月 30 09:40:00 CST 2014
09:40:00 上午
星期三 ,四月 30
9,使用断言:断言机制允许在测试期间向代码中插入一些检查语句。当代码发布时,这些插入的检测语句将会被自动移走。就是说在Debug阶段断言语句是有效的,但是在Release阶段是无效的。断言机制缺省情况下是关闭的,在Eclipse中启用断言的方法:Run——Run Configurations——Arguments——VM Arguments中加上-ea即可。
assert的使用有两种形式:
1,assert 条件;
int x=0;
assert x>0;
//运行结果:
Exception in thread "main" java.lang.AssertionError
at com.wjy.connect.TestLog.main(TestLog.java:42)
2,assert 条件:表达式;
int x=0;
assert x>0:"你想传给AssertionError的信息。";
//运行结果:
Exception in thread "main" java.lang.AssertionError: 你想传给AssertionError的信息。
at com.wjy.connect.TestLog.main(TestLog.java:42)