一、类之间的关系
-
依赖:如果一个类的方法操作另一个类,就说一个类依赖另一个类
-
聚合:意味着类A的对象包含类B的对象
-
继承:用于表示一种特殊与一般关系的。
二、GregorianCalendar类是用来表示大家熟悉的日历表示法,GregorianCalendar类扩展了一个更加通用的Calendar类。Date类只提供了少量的方法来比较两个时间点,比如before和after方法来分别表示一个时间点是否早于另一个时间点,或者晚于另一个时间点。GregorianCalendar类包含了更多的方法,特别是几个很有用的构造器:
-
new GregorianCalendar()
-
new GregorianCalendar(1991,11,31)
-
new GregorianCalendar(1999,Calendar,DECEMBER,31)
-
new GregorianCalendar(1999,Calendar.DECEMBER,31,23,59,59)
日历的作用是提供某个时间点的年月日,要想查询这些设置信息,应该用GregorianCalendar的get方法。另外还有一个便于设置年月日的方法set(),还可以为给定的日期对象增加天数,星期数,月份数add()。在GregorianCalendar类有gettime和settime方法,用来获得和设置日历对象所表示的时间点。这些方法在GregorianClandar和Date之间转换时非常有用。
GregorianCalendar calendar = new GregorianCalendar();
Date Day=calendar.gettime();
d.set(Calendar.DAY_OF_MONTH,1);//将d设置为这个月的第一天
int weekday=d.get(Calendar.DAY_OF_WEEK)
如果这个月的第一天是星期日,变量weekday就设置为Calendar.SUNDAY;getFirstDayOfWeek方法获得当前地区星期的起始日。
API(java.util.GregorianCalendar)
GregorianCalendar();
GregorianCalendar(int year,int month.int day);
GregorianCalendar(int year,int month,int day,int hour,int minutes,int seconds);
int get(int field);
//field:Calendar.ERA,Calendar.YEAR,Calendar.MONTH,Calendar.WEEK_OF_YEAR......
void set(int field,int value);
void set(int year,int month,int day);
void set(int year,int month,int day,int hour,int minutes,int seconds);
void add(int field,int amount);
int getFirstDayOfWeek();
void setTime(Date time);
Date getTime()
API(java.text.DateFormatSymbols)
String[] getShortWeekdays();
String[] getShortMonths();
String[] getWeekdays();
String[] getMonths()
四、不要在构造器中定义与实例域重名的局部变量,用this.变量名就好。注意不要编写返回引用可变对象的访问器方法,会破坏封装性。如果需要返回一个可变对象的引用,应该先对他进行克隆,对象克隆是指存放在另一个位置上的对象副本。
五、如果将域定义为
static,每个类只有一个这样的域,而每一个对象对于所有的实例域却都有一份自己的拷贝。
System.out也是一个静态常量,
public class System{
...
public static final PrintStream out=...;
...
}
而System类中有一个setOut方法,可以将System.out设置为不同的流。之所以可以修改final变量的值,是因为setOut是一个本地方法,不是用java实现的,可以绕过Java的存联控制机制。
静态方法是一种不能向对象实施操作的方法,没有隐式参数,因为静态方法不能操作对象,所以不能在静态方法中访问实例域,但是可以访问自身的静态域。
在下面两种情况下使用静态方法:
-
一个方法不需要访问对象状态,其所需要都是通过显示参数提供
-
一个方法只需要访问类的静态域
六、NumberFormat类使用factory方法产生不同风格的格式对象,例如:NumberFormat.getCurrencyInstance();NumberFormat.getPercentInstance()。
-
七、java程序设计语言总是采用值调用。方法得到的是所有参数值的一个拷贝,特别是方法不能修改传递给它的任何参数变量的内容。方法得到的是对象引用的拷贝,对象引用及其他的拷贝同时引用同一个对象。而Java对对象采用的不是引用调用,实际上,对象引用进行的是值传递,
-
一个方法不能修改一个基本数据类型的参数
-
一个方法可以改变一个对象参数的状态
-
一个方法不能实现让对象参数引用一个新的对象。
七、如果类中至少一个构造器,但是没有提供默认的构造器,则在构造对象时如果没有提供构造参数就会被视为不合法。如果构造器的第一个语句形如this(),这个构造器将调用同i个类的另一个构造器。Java初始化数据域的方法:1.在构造器中设置值;2.在声明中赋值;3.使用初始化快。
API(java.util.Random)
Random()
int nextInt(int n)
八、可以为任何一个类添加finalize方法,finalize方法将在垃圾回收器清楚对象之前调用。实际应用中,不要依赖于使用finalize方法回收任何短缺的资源,因为很难知道这个方法什么时候调用。有个名为System.runFinalizersOnExit(true)的方法能确保finalizer方法在java关闭前被调用。不过,这个方法并不安全,也不鼓励使用。有一个代替方法Runtime.addShutdownHook添加”关闭钩“。
九、如果没有指定public和private,这个部分就可以被一个包中的所有方法访问。
十、类文件也可以存储在JAR文件中,在一个JAR文件中,可以包含多个压缩形式的类文件,既可以省空间又可以改善性能。在程序中用到第三方的库文件时,通常会给出一个或多个需要包含的JAR文件。为了能使类被多个程序共享:1。把类放到一个目录中;2.将JAR文件放在一个目录中;3.设置类路径。类路径包括:基目录,当前目录,JAR文件。类路径所包含的目录和归档文件是搜寻类的起始点。设置类路径时,最好采用-classpath选项指定类路径。
十一、JDK包含一个很有用的工具,叫做javadoc,可以由源文件生成一个HTML文档。要想产生包注释,就要在没一个包目录中添加一个单独的文件,1.提供一个以package.html命名的HTML文件,在标记<BODY>...<BODY>之间的所有文本都会被抽取出来。2.提供一个以package-info.java命名的Java文件。这个文件必须包含一个初始的/**和*/界定的javadoc注释,跟随一个包语句之后。不应该包含更多的代码和注释。
十二、
1.切换到包含想要生成文档的源文件目录,如果有嵌套的包要生成文档,必须切换到包含子目录com的目录。
2.如果是一个包,运行命令javadoc -d docDirectory nameOfPackage
对于多个包生成文档,javadoc -d docDirectory nameOfPackage1,nameOfPackage2...
如果文件在默认包中,javadoc -d docDirectory *.java