● Javac依靠JAVA_HOME 识别java安装目录。所以必须在系统变量里面设置该变量。
新建JAVA_HOME 值C:/Java/jdk1.5.0_01
注意:系统变量设置后,必须新开控制台才能生效。
● Object中的clone()方法可以克隆对象。子类必须覆盖。
● 在一个类的方法中获取本类的对象,其对象指针与this指针有相同的权限。
例:
public class Student
{
private String name;
private int age;
protected Object clone() throws CloneNotSupportedException
{
Student another = new Student();
another.name = this.name;
another.name = this.age;
return another;
}
}
● 使用apache-ant-1.6.5
概述:ant用于重新编译修改过的文件,ant每次只能执行一个任务。
帮助文档在 C:/apache-ant-1.6.5/docs/manual
解压ant-current-bin.zip
在path中设置ant.bat的路径C:/apache-ant-1.6.5/bin
在工程中建立build.xml
然后可以写脚本了
<project name="firstAnt">
<target name="init">
<mkdir dir="dest" />
</target>
<target name="compile" depends="init">
<javac srcdir="project1" destdir="dest" />
</target>
</project>
注:
△ 每个任务如javac都是一个类。
△ 若标签之间无内容,这可以用 / 封起来
△ * 表示子目录下的文件,**表示子子孙孙的目录。
△ ${变量} 用于引用变量。
△ 默认情况下,包含目录下的所有文件和子孙目录,excludes可以排除某个文件或目录。
若使用includes,则只包括includes指定的文件或目录。
△includes是相对于srcdir的路径。
8.22
● 模板方法设计模式:父类制定的模板方法规定了底层方法的执行流程,子类负责实现底层方法,这样子类就可以使用父类的所有模板方法了。
● 策略模式:类的某种策略算法可以委托给外部,这样可以增加灵活性。
尽量使用组合(扩展性很好),避免使用继承。
如:TreeSet(Comparator<? super E> c)
● 开闭原则:对扩展开放,对修改封闭。
● 大脑重构
● Object对象的equals()方法是直接比较2个对象的指针,因此必须被覆盖。
● 源文件与class文件最好放在同一目录层次。只是目录系统不同。
● Java编译器对静态字符串的处理:JVM启动时,会在数据区开辟一个字符串池,当遇到一个静态字符串”xxxx”时,先将其打包成一个对象,放到该字符串池中,下次又遇到一个静态字符串,首先在字符串池中查找,若找到,就用这个字符串,若找不到则新创建一个放到字符串池中。
● Hash集合
加入Hash集合的对象必须覆盖public int hashCode()和public boolean equals(Object obj)方法,这样,从Hash集合中获取对象时,先根据Hash编码值找到相同Hash编码值的元素集,再调用equals()方法找到相同内容的对象。
例:
package org.itcast;
import java.util.*;
class Student
{
private String name = null;
private int age = 0;
public Student(String name,int age)
{
this.name = name;
this.age = age;
}
public int hashCode()
{
return age + name.hashCode();
}
@Override //方法覆盖的指令,便于编译器检查
public boolean equals(Object obj)
{
if(!(obj instanceof Student)) return false;
Student objStu = (Student)obj;
return (age == objStu.age) && ( name.equals(objStu.name) );
}
public String toString()
{
return name + ":" + age;
}
}
public class TestCollection
{
public static void main(String [] args)
{
HashSet<Student> hs = new HashSet<Student>();
hs.add(new Student("zxx",19));
hs.add(new Student("zxx",18));
System.out.println( hs.size() );
Iterator<Student> itr = hs.iterator();
while(itr.hasNext())
{
Student obj = itr.next();
System.out.println(obj);
}
}
}
注意:打印对象指针System.out.println(obj); 实际上是 System.out.println( obj.toString() ); 而Object类的toString()方法是将指针转化成字符串。因此,打印对象指针时必须覆盖toString()方法