8月21日.

● 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()方法

 

 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值