《Java从入门到精通》src9-25

时间:2021-09-23 16:26:16
find . -name *.java |xargs  -i sh -c "echo {};cat {}" > ../all.java[op@TIM src]$ cat all.java
./ch09/���渚�9-1/浠g��9-1.java
    class Person
    {
        String name ;
        int age ;
        void talk()
        {
            System.out.println("我是:"+name+",今年:"+age+"岁");
        }
    }
./ch09/���渚�9-10/浠g��9-10.java
    class Person
    {
        private String name ;
        private int age ;
        public Person(String n,int a)
        {
            name = n ;
            age = a ;
            System.out.println("public Person(String n,int a)") ;
        }
        public String talk()
        {
            return "我是:"+name+",今年:"+age+"岁" ;
        }
    }

    public class TestConstruct1
    {
        public static void main(String[] args)
        {
            Person p = new Person("张三",25) ;
            System.out.println(p.talk()) ;
        }
    }
./ch09/���渚�9-11/浠g��9-11.java
    class Person
    {
        private String name ;
        private int age ;
        public Person(String n,int a)
        {
            name = n ;
            age = a ;
            System.out.println("public Person(String n,int a)") ;
        }
        public String talk()
        {
            return "我是:"+name+",今年:"+age+"岁" ;
        }
    }

    public class TestConstruct2
    {
        public static void main(String[] args)
        {
            Person p = new Person() ;
            System.out.println(p.talk()) ;
        }
    }
./ch09/���渚�9-12/浠g��9-12.java
    class Person
    {
        private String name ;
        private int age ;
        public Person()
        {}
        public Person(String n,int a)
        {
            name = n ;
            age = a ;
            System.out.println("public Person(String n,int a)") ;
        }
        public String talk()
        {
            return "我是:"+name+",今年:"+age+"岁" ;
        }
    }

    public class TestConstruct2
    {
        public static void main(String[] args)
        {
            Person p = new Person() ;
            System.out.println(p.talk()) ;
        }
    }
./ch09/���渚�9-13/浠g��9-13.java
    public class TestSingleDemo1
    {
        private TestSingleDemo1()
        {
            System.out.println("private TestSingleDemo1 .") ;
        }
        public static void main(String[] args)
        {
            new TestSingleDemo1() ;
        }
    }
./ch09/���渚�9-14/浠g��9-14.java
    class Person
    {
        String name ;
    // 在本类声明一Person对象p,注意此对象用final标记,表示不能再重新实例化
        private static final Person p = new Person() ;
        private Person()
        {
            name = "张三" ;
        }
        public static Person getP()
        {
            return p ;
        }
    }

    public class TestSingleDemo2
    {
        public static void main(String[] args)
        {
            // 声明一Person类的对象
            Person p = null ;
            p = Person.getP() ;
            System.out.println(p.name) ;
        }
    }
./ch09/���渚�9-15/浠g��9-15.java
    class Person
    {
        private String name ;
        private int age ;
        private void talk()
        {
            System.out.println("我是:"+name+",今年:"+age+"岁");
        }
        public void say()
        {
            talk();
        }
        public void setName(String str)
        {
            name = str ;
        }
        public void setAge(int a)
        {
            if(a>0)
                age = a ;
        }
        public String getName()
        {
            return name ;
        }
        public int getAge()
        {
            return age ;
        }
    }

    public class TestPersonDemo5
    {
        public static void main(String[] args)
        {
            // 声明并实例化一Person对象p
            Person p = new Person() ;
            // 给p中的属性赋值
            p.setName("张三") ;
            // 在这里将p对象中的年龄属性赋值为-25岁
            p.setAge(30) ;
            // 调用Person类中的say()方法
            p.say() ;
        }
    }
./ch09/���渚�9-2/浠g��9-2.java
class colordefine
{
String color = "黑色";
void getMes()
   {
      System.out.println("定义类");
   }
   public static void main(String args[]) {
      {
         colordefine b = new colordefine();
         System.out.println(b.color);
         b.getMes();
      }
}
}
./ch09/���渚�9-3/浠g��9-3.java
    // 下面这个范例说明了使用Person类的对象调用类中的属性与方法的过程
    class TestPersonDemo
    {
        public static void main(String[] args)
        {
            Person p = new Person() ;
            p.name = "张三" ;
    p.age = 25 ;
    p.talk();
        }
    }
./ch09/���渚�9-4/浠g��9-4.java
    public class TestEquals
    {
        public static void main(String[] args)
        {
            String str1 = new String("java") ;
            String str2 = new String("java") ;
            String str3 = str2 ;
            if(str1==str2)
            {
                System.out.println("str1 == str2");
            }
            else
            {
                System.out.println("str1 != str2") ;
            }
            if(str2==str3)
            {
                System.out.println("str2 == str3");
            }
            else
            {
                System.out.println("str2 != str3") ;
            }
        }
    }
./ch09/���渚�9-5/浠g��9-5.java
    public class TestEquals1
    {
        public static void main(String[] args)
        {
            String str1 = new String("java") ;
            String str2 = new String("java") ;
            String str3 = str2 ;
            if(str1.equals(str2))
            {
                System.out.println("str1 equals str2");
            }
            else
            {
                System.out.println("str1 not equals str2") ;
            }
            if(str2.equals(str3))
            {
                System.out.println("str2 equals str3");
            }
            else
            {
                System.out.println("str2 note equals str3") ;
            }
        }
    }
./ch09/���渚�9-6/浠g��9-6.java
    class Person
    {
        String name ;
        int age ;
        public Person()
        {
        }
        public Person(String name,int age)
        {
            this.name = name ;
            this.age = age ;
        }
        public String talk()
        {
            return "我是:"+this.name+",今年:"+this.age+"岁" ;
        }
    }
    public class TestObjectArray
    {
        public static void main(String[] args)
        {
    Person p[] = {
    new Person("张三",25),new Person("李四",30),new Person("王五",35)
                     } ;
            for(int i=0;i<p.length;i++)
            {
                System.out.println(p[i].talk()) ;
            }
        }
    }
./ch09/���渚�9-7/浠g��9-7.java
public class Test {

   static String a = "string-a";
   static String b;

   String c = "stirng-c";
   String d;

   static {
      printStatic("before static");
      b = "string-b";
      printStatic("after static");
   }

   public static void printStatic(String title) {
      System.out.println("---------" + title + "---------");
      System.out.println("a = \"" + a + "\"");
      System.out.println("b = \"" + b + "\"");
   }

   public Test() {
      print("before constructor");
      d = "string-d";
      print("after constructor");
   }

   public void print(String title) {
      System.out.println("---------" + title + "---------");
      System.out.println("a = \"" + a + "\"");
      System.out.println("b = \"" + b + "\"");
      System.out.println("c = \"" + c + "\"");
      System.out.println("d = \"" + d + "\"");
   }

   public static void main(String[] args) {
      new Test();
   }

}./ch09/���渚�9-8/浠g��9-8.java
public class methoddemo {
   int a = 12345679 , b =81;
   public void times(int i, int j)
   {
      System.out.println(i*j);
   }
   public static void main(String args[])
   {
      methoddemo m = new methoddemo();
      m.times(m.a, m.b);
   }
}
./ch09/���渚�9-9/浠g��9-9.java
    class Person
    {
        public Person()        // Person类的构造方法
        {
            System.out.println("public Person()") ;
        }
    }

    public class TestConstruct
    {
        public static void main(String[] args)
        {
            Person p = new Person() ;
        }
    }
./ch09/璺����涓����/Xiti_9/src/Person.java
class Person
{
    String name ;
    int age ;
    String like;
    void talk()
    {
        System.out.println("我是:"+name+",今年:"+age+"岁,"+ "喜欢:"+ like);
    }
}
./ch09/璺����涓����/Xiti_9/src/Xiti_9.java
// 下面这个范例说明了使用Person类的对象调用类中的属性与方法的过程
class Xiti_9
{
    public static void main(String[] args)
    {
        Person p = new Person() ;
        p.name = "张三" ;
        p.age = 25 ;
        p.like= "音乐和诗歌";
        p.talk();
    }
}
./ch10/���渚�10-1/浠g��10-1.java
    class Person
    {
        String name ;
        int age ;
        void talk()
        {
            System.out.println("我是:"+name+",今年:"+age+"岁");
        }
    }

    public class TestPersonDemo2
    {
        public static void main(String[] args)
        {
            // 声明并实例化一Person对象p
            Person p = new Person() ;
            // 给p中的属性赋值
            p.name = "张三" ;
            // 在这里将对象p的年龄属性赋值为-25岁
            p.age = -25 ;
            // 调用Person类中的talk()方法
            p.talk() ;
        }
    }
./ch10/���渚�10-10/浠g��10-10.java
class Person
{
   String name ;
   int age ;
   public String talk()
   {
      return "我是:"+this.name+",今年:"+this.age+"岁";
   }
}

class Student extends Person
{
   String school ;
   public Student(String name,int age,String school)
   {
      // 分别为属性赋值
      this.name = name ;
      this.age = age ;
      this.school = school ;
   }
   // 此处覆写Person中的talk()方法
   public String talk()
   {
      return "我在"+this.school+"上学" ;
   }
}

class TestOverDemo1
{
   public static void main(String[] args)
   {
      Student s = new Student("张三",25,"北京") ;
      // 此时调用的是子类中的talk()方法
      System.out.println(s.talk()) ;
   }
}
./ch10/���渚�10-11/浠g��10-11.java
class Person
{
   String name ;
   int age ;
   public String talk()
   {
      return "我是:"+this.name+",今年:"+this.age+"岁";
   }
}

class Student extends Person
{
   String school ;
   public Student(String name,int age,String school)
   {
      // 分别为属性赋值
      this.name = name ;
      this.age = age ;
      this.school = school ;
   }
   // 此处覆写Person类中的talk()方法
   public String talk()
   {
      return super.talk()+",我在"+this.school+"上学" ;
   }
}

class TestOverDemo2
{
   public static void main(String[] args)
   {
      Student s = new Student("张三",25,"北京") ;
      //此时调用的是子类中的talk()方法
      System.out.println(s.talk()) ;
   }
}
./ch10/���渚�10-12/浠g��10-12.java
class Person
{
   public void fun1()
   {
      System.out.println("1.Person{fun1()}") ;
   }
   public void fun2()
   {
      System.out.println("2.Person{fun2()}") ;
   }
}

// Student类扩展自Person类,也就继承了Person类中的fun1()、fun2()方法
class Student extends Person
{
   // 在这里覆写了Person类中的fun1()方法
   public void fun1()
   {
      System.out.println("3.Student{fun1()}") ;
   }
   public void fun3()
   {
      System.out.println("4.Studen{fun3()}") ;
   }
}

class TestJavaDemo1
{
   public static void main(String[] args)
   {
      // 此处,父类对象由子类实例化
      Person p = new Student() ;
      // 调用fun1()方法,观察此处调用的是哪个类里的fun1()方法
      p.fun1() ;
      p.fun2() ;
   }
}
./ch10/���渚�10-13/浠g��10-13.java
class Person
{
   public void fun1()
   {
      System.out.println("1.Person{fun1()}") ;
   }
   public void fun2()
   {
      System.out.println("2.Person{fun2()}") ;
   }
}

// Student类继承Person类,也就继承了Person类的fun1()、fun2()方法
class Student extends Person
{
   // 在这里覆写了Person类中的fun1()方法
   public void fun1()
   {
      System.out.println("3.Student{fun1()}") ;
   }
   public void fun3()
   {
      System.out.println("4.Studen{fun3()}") ;
   }
}

class TestJavaDemo2
{
   public static void main(String[] args)
   {
      // 此处,父类对象由自身实例化
      Person p = new Person() ;
      // 将p对象向下转型
      Student s = (Student)p ;
      p.fun1() ;
      p.fun2() ;
   }
}
./ch10/���渚�10-2/浠g��10-2.java
    class Person
    {
        private String name ;
        private int age ;
        void talk()
        {
            System.out.println("我是:"+name+",今年:"+age+"岁");
        }
    }

    public class TestPersonDemo3_1
    {
        public static void main(String[] args)
        {
            // 声明并实例化一Person对象p
            Person p = new Person() ;
            // 给p中的属性赋值
            p.name = "张三" ;
            // 在这里将p对象中的年龄赋值为-25岁
            p.age = -25 ;
            // 调用Person类中的talk()方法
            p.talk() ;
        }
    }
./ch10/���渚�10-3/浠g��10-3.java
    class Person
    {
        private String name ;
        private int age ;
        void talk()
        {
            System.out.println("我是:"+name+",今年:"+age+"岁");
        }
        public void setName(String str)
        {
            name = str ;
        }
        public void setAge(int a)
        {
            if(a>0)
                age = a ;
        }
        public String getName()
        {
            return name ;
        }
        public int getAge()
        {
            return age ;
        }
    }

    public class TestPersonDemo3-2
    {
        public static void main(String[] args)
        {
            // 声明并实例化一Person对象p
            Person p = new Person() ;
            // 给p中的属性赋值
            p.setName("张三") ;
            // 在这里将p对象中的年龄赋值为-25岁
            p.setAge(-25) ;
            // 调用Person类中的talk()方法
            p.talk() ;
        }
    }
./ch10/���渚�10-4/浠g��10-4.java
    class Person
    {
        private String name ;
        private int age ;
        private void talk()
        {
            System.out.println("我是:"+name+",今年:"+age+"岁");
        }
        public void setName(String str)
        {
            name = str ;
        }
        public void setAge(int a)
        {
            if(a>0)
                age = a ;
        }
        public String getName()
        {
            return name ;
        }
        public int getAge()
        {
            return age ;
        }
    }

    public class TestPersonDemo4
    {
        public static void main(String[] args)
        {
            // 声明并实例化一Person对象p
            Person p = new Person() ;
            // 给p中的属性赋值
            p.setName("张三") ;
            // 在这里将p对象中的年龄赋值为-25岁
            p.setAge(-25) ;
            // 调用Person类中的talk()方法
            p.talk() ;
        }
    }

./ch10/���渚�10-5/浠g��10-5.java
class Person
{
   String name ;
   int age ;
}
class Student extends Person
{
   String school ;
}

public class TestPersonStudentDemo
{
   public static void main(String[] args)
   {
      Student s = new Student() ;
      // 访问Person类中的name属性
      s.name = "张三" ;
      // 访问Person类中的age属性
      s.age = 25 ;
      // 访问Student类中的school属性
      s.school = "北京" ;
      System.out.println("姓名:"+s.name+",年龄:"+s.age+",学校:"+s.school) ;
   }
}
./ch10/���渚�10-6/浠g��10-6.java
class Person
{
   String name ;
   int age ;
   // 父类的构造方法
   public Person()
   {
      System.out.println("1.public Person(){}") ;
   }
}
class Student extends Person
{
   String school ;
   // 子类的构造方法
   public Student()
   {
      System.out.println("2.public Student(){}");
   }
}

public class TestPersonStudentDemo1
{
   public static void main(String[] args)
   {
      Student s = new Student() ;
   }
}
./ch10/���渚�10-7/浠g��10-7.java
class Person
{
   String name ;
   int age ;
   // 父类的构造方法
   public Person(String name,int age)
   {
      this.name = name ;
      this.age = age ;
   }
}
class Student extends Person
{
   String school ;
   // 子类的构造方法
   public Student()
   {
      // 在这里用super调用父类中的构造方法
      super("张三",25);
   }
}

public class TestPersonStudentDemo2
{
   public static void main(String[] args)
   {
      Student s = new Student() ;
      // 为Student类中的school赋值
      s.school = "北京" ;
      System.out.println("姓名:"+s.name+",年龄:"+s.age+",学校:"+s.school) ;
   }
}
./ch10/���渚�10-8/浠g��10-8.java
class Person
{
   String name ;
   int age ;
   // 父类的构造方法
   public Person()
   {
   }
   public String talk()
   {
      return "我是:"+this.name+",今年:"+this.age+"岁" ;
   }
}
class Student extends Person
{
   String school ;
   // 子类的构造方法
   public Student(String name,int age,String school)
   {
      // 在这里用super调用父类中的属性
      super.name = name ;
      super.age = age ;

      // 调用父类中的talk()方法
      System.out.print(super.talk());

      // 调用本类中的school属性
      this.school = school ;
   }
}

public class TestPersonStudentDemo3
{
   public static void main(String[] args)
   {
      Student s = new Student("张三",25,"北京") ;
      System.out.println(",学校:"+s.school) ;
   }
}姓名:张三,年龄:25,学校:北京
./ch10/���渚�10-9/浠g��10-9.java
class Person
{
   // 在这里将属性封装
   private String name ;
   private int age ;
}
class Student extends Person
{
   // 在这里访问父类中被封装的属性
   public void setVar()
   {
      name = "张三" ;
      age = 25 ;
   }
}

class TestPersonStudentDemo4
{
   public static void main(String[] args)
   {
      new Student().setVar() ;
   }
}
./ch10/璺����涓����/Xiti_10.java
class Person
{
    String name ;
    int age ;
    String like;
    public String talk()
    {
        return "我是:"+this.name+",今年:"+this.age+"岁";
    }
}

class Student extends Person
{
    String school ;
    public Student(String name,int age,String like)
    {
        // 分别为属性赋值
        this.name = name ;
        this.age = age ;
        this.like = like ;
    }
    // 此处覆写Person中的talk()方法
    public String talk()
    {
        return "我喜欢"+this.like ;
    }
}

class Xiti_10
{
    public static void main(String[] args)
    {
        Student s = new Student("张三",25,"音乐") ;
        // 此时调用的是子类中的talk()方法
        System.out.println(s.talk()) ;
    }
}
./ch11/���渚�11-1/浠g��11-1.java
abstract class Person
{
   String name ;
   int age ;
   String occupation ;
   // 声明一抽象方法talk()
   public abstract String talk() ;
}
// Student类继承自Person类
class Student extends Person
{
   public Student(String name,int age,String occupation)
   {
      this.name = name ;
      this.age = age ;
      this.occupation = occupation ;
   }
   // 覆写talk()方法
   public String talk()
   {
return "学生――>姓名:"+this.name+",年龄:"+this.age+",职业:"+this.occupation+"!" ;
   }
}
// Worker类继承自Person类
class Worker extends Person
{
   public Worker(String name,int age,String occupation)
   {
         this.name = name ;
      this.age = age ;
      this.occupation = occupation ;
   }
   // 覆写talk()方法
   public String talk()
   {
return "工人――>姓名:"+this.name+",年龄:"+this.age+",职业:"+this.occupation+"!" ;
   }
}
class TestAbstractDemo1
{
      public static void main(String[] args)
      {
      Student s = new Student("张三",20,"学生") ;
      Worker w = new Worker("李四",30,"工人") ;
      System.out.println(s.talk()) ;
      System.out.println(w.talk()) ;
   }
}
./ch11/���渚�11-2/浠g��11-2.java
abstract class Person
{
String name ;
int age ;
String occupation ;
public Person(String name,int age,String occupation)
{
   this.name = name ;
   this.age = age ;
   this.occupation = occupation ;
}
public abstract String talk() ;
}
class Student extends Person
{
public Student(String name,int age,String occupation)
{
   // 在这里必须明确调用抽象类中的构造方法
   super(name,age,occupation);
}
public String talk() {
   return "学生――>姓名:"+this.name+",年龄:"+this.age+",职业:"+this.occupation+"!" ;
}
}
class TestAbstractDemo2
{
public static void main(String[] args)
{
   Student s = new Student("张三",20,"学生") ;
   System.out.println(s.talk()) ;
}
}
./ch11/���渚�11-3/浠g��11-3.java
interface Person
{
   String name = "张三";
   int age = 25 ;
   String occupation = "学生" ;
   // 声明一抽象方法talk()
   public abstract String talk() ;
}
//  Student类实现自Person类
class Student implements Person
{
   // 覆写talk()方法
   public String talk()
   {
return "学生――>姓名:"+this.name+",年龄:"+this.age+",职业:"+this.occupation+"!" ;
}
}
class TestInterfaceDemo1
{
 public static void main(String[] args)
 {
     Student s = new Student() ;
     System.out.println(s.talk()) ;
 }
}
./ch11/���渚�11-4/浠g��11-4.java
interface A
{
   int i = 10 ;
   public void sayI() ;
}
interface E
{
   int x = 40 ;
   public void sayE() ;
}
// B同时继承了A、E两个接口
interface B extends A,E
{
   int j = 20 ;
   public void sayJ() ;
}

// C继承实现B接口,也就意味着要实现A、B、E三个接口的抽象方法
class C implements B
{
   public void sayI()
   {
      System.out.println("i = "+i);
   }
   public void sayJ()
   {
      System.out.println("j = "+j) ;
   }
   public void sayE()
   {
      System.out.println("e = "+x);
   }
}
class TestInterfaceDemo2
{
   public static void main(String[] args)
   {
      C c = new C() ;
      c.sayI() ;
      c.sayJ() ;
   }
}
./ch11/璺����涓����/Xiti_11.java
abstract class Person
{
    String name ;
    int age ;
    String occupation ;
    // 声明一抽象方法talk()
    public abstract String talk() ;
}
// Official类继承自Person类
class Official extends Person
{
    public Official(String name,int age,String occupation)
    {
        this.name = name ;
        this.age = age ;
        this.occupation = occupation ;
    }
    // 覆写talk()方法
    public String talk()
    {
return "*――>姓名:"+this.name+",年龄:"+this.age+",职业:"+this.occupation+"!" ;
    }
}
// Worker类继承自Person类
class Worker extends Person
{
    public Worker(String name,int age,String occupation)
    {
            this.name = name ;
        this.age = age ;
        this.occupation = occupation ;
    }
    // 覆写talk()方法
    public String talk()
    {
return "工人――>姓名:"+this.name+",年龄:"+this.age+",职业:"+this.occupation+"!" ;
    }
}
class Xiti_11
{
        public static void main(String[] args)
        {
        Official s = new Official("李乐乐",20,"*") ;
        Worker w = new Worker("工作",30,"工人") ;
        System.out.println(s.talk()) ;
        System.out.println(w.talk()) ;
    }
}
./ch12/���渚�12-14/浠g��12-14.java
    // 以下程序是关于方法的返回类型是整型的范例
    public class TestJavafanhuizhengxing
    {
       public static void main(String args[])
          {
             int num;
             num=star(7);        // 输入7给star(),并以num接收返回的数值�
             System.out.println(num+" stars printed");
          }

          public static int star(int n)          // star() method
          {
             for(int i=1;i<=2*n;i++)
                System.out.print("*");       // 输出2*n个星号
            System.out.print("\n");            // 换行
             return 2*n;                      // 返回整数2*n
          }
    }
./ch12/���渚�12-1/浠g��12-1.java
class Person extends Object
{
   String name = "张三";
   int age = 25 ;
}
class TestToStringDemo1
{
   public static void main(String[] args)
   {
      Person p = new Person() ;
      System.out.println(p);
   }
}
./ch12/���渚�12-10/浠g��12-10.java
interface A
{
   public void fun1() ;
}
class B
{
   int i = 10 ;
   class C implements A
   {
      public void fun1()
      {
         System.out.println(i) ;
      }
   }
   public void get(A a)
   {
      a.fun1() ;
   }
   public void test()
   {
      this.get(new C()) ;
   }
}
class TestNonameInner1
{
   public static void main(String[] args)
   {
      B b = new B() ;
      b.test() ;
   }
}
./ch12/���渚�12-11/浠g��12-11.java
interface A
{
   public void fun1() ;
}
class B
{
   int i = 10 ;
   public void get(A a)
   {
      a.fun1() ;
   }
   public void test()
   {
      this.get(new A()
         {
            public void fun1()
            {
               System.out.println(i) ;
            }
         }
      ) ;
   }
}
class TestNonameInner2
{
   public static void main(String[] args)
   {
      B b = new B() ;
      b.test() ;
   }
}
./ch12/���渚�12-12/浠g��12-12.java
    class Person
    {
        private String name = "张三" ;
        private int age = 25 ;
        public String talk()
        {
            return "我是:"+name+",今年:"+age+"岁" ;
        }
    }

    public class TestNoName
    {
        public static void main(String[] args)
        {
            System.out.println(new Person().talk());
        }
    }
./ch12/���渚�12-13/浠g��12-13.java
    // 以下程序主要说明如何去声明并使用一个方法
    public class TestJavashengming
    {
          public static void main(String args[])
          {
             star();                          // 调用star() 方法
             System.out.println("I Like Java !");
             star();                          // 调用star() 方法
          }

          public static void star()             // star() 方法
          {
             for(int i=0;i<19;i++)
                System.out.print("*");          // 输出19个星号
             System.out.print("\n");            // 换行
          }
    }
./ch12/���渚�12-15/浠g��12-15.java
    // 以下的程序说明了方法的使用
    public class TestJavafangfa
    {
      public static void main(String args[])
         {
            double num;
            num=show_length(22,19);      // 输入22与19两个参数到show_length()里
            System.out.println("对角线长度 = "+num);
         }

         public static double show_length(int m, int n)
         {
            return Math.sqrt(m*m+n*n);      // 返回对角线长度�
         }
    }
./ch12/���渚�12-16/浠g��12-16.java
    // 以下程序说明了方法的重载操作
    public class TestJavareload
    {
          public static void main(String[] args)
          {
            int int_sum ;
            double double_sum ;
            int_sum = add(3,5) ;        // 调用有两个参数的add方法
            System.out.println("int_sum = add(3,5)的值是:"+int_sum);
            int_sum = add(3,5,6) ;        // 调用有三个参数的add方法
            System.out.println("int_sum = add(3,5,6)的值是:"+int_sum);
            double_sum = add(3.2,6.5);     // 传入的数值为doule类型
            System.out.println("double_sum = add(3.2,6.5)的值是:"+double_sum);
          }
          public static int add(int x,int y)
          {
            return x+y ;
          }
          public static int add(int x,int y,int z)
          {
            return x+y+z ;
          }
          public static double add(double x,double y)
          {
            return x+y ;
          }
    }
./ch12/���渚�12-17/浠g��12-17.java
    // 一维数组作为参数来传递,这里的一维数组采用静态方式赋值
    public class TestJavachuanshuzu
    {
       public static void main(String args[])
          {
             int score[]={7,3,8,19,6,22};      // 声明一个一维数组score
             largest(score);               // 将一维数组score传入largest() 方法中
          }
          public static void largest(int arr[])
          {
             int tmp=arr[0];
             for(int i=0;i<arr.length;i++)
               if(tmp<arr[i])
                  tmp=arr[i];
             System.out.println("最大的数 = "+tmp);
          }
    }
./ch12/���渚�12-18/浠g��12-18.java
    // 以下程序说明了如何将一个二维数组作为参数传递到方法中
    public class TestJavachuanerwei
    {
      public static void main(String args[])
         {
            int A[][] = {{51,38,22,12,34},{72,64,19,31}} ;        // 定义一个二维数组A

            print_mat(A);
         }

         public static void print_mat(int arr[][])     // 接收整数类型的二维数组
         {
            for(int i=0;i<arr.length;i++)
            {
               for(int j=0;j<arr[i].length;j++)
                  System.out.print(arr[i][j]+" ");           // 输出数组值�
               System.out.print("\n");   // 换行
            }
         }
    }
./ch12/���渚�12-19/浠g��12-19.java
    // 以下的程序说明了方法中返回一个二维数组的实现过程
    public class TestJavafanerwei
    {
       public static void main(String args[])
          {
             int A[][]={{51,38,82,12,34},{72,64,19,31}};  // 定义二维数组
             int B[][]=new int[2][5];
             B=add10(A);               // 调用add10(),并把返回的值设给数组B
             for(int i=0;i<B.length;i++)          // 输出数组的内容
             {
                for(int j=0;j<B[i].length;j++)
                  System.out.print(B[i][j]+" ");
                System.out.print("\n");
            }
          }

          public static int[][] add10(int arr[][])
          {
             for(int i=0;i<arr.length;i++)
                for(int j=0;j<arr[i].length;j++)
                   arr[i][j]+=10;                   // 将数组元素加10
             return arr;                      // 返回二维数组
          }
    }
./ch12/���渚�12-2/浠g��12-2.java
class Person extends Object
{
   String name = "张三";
   int age = 25 ;
   // 覆写Object类中的toString()方法
   public String toString()
   {
      return "我是:"+this.name+",今年:"+this.age+"岁";
   }
}
class TestToStringDemo2
{
   public static void main(String[] args)
   {
      Person p = new Person() ;
      System.out.println(p);
   }
}
./ch12/���渚�12-20/浠g��12-20.java
    class Person
    {
        String name ;
        int age ;
    }
    public class TestRefDemo1
    {
        public static void main(String[] args)
        {
            // 声明一对象p1,此对象的值为null,表示未实例化
            Person p1 = null ;
            // 声明一对象p2,此对象的值为null,表示未实例
            Person p2 = null ;
            // 实例化p1对象
            p1 = new Person() ;
            // 为p1对象中的属性赋值
            p1.name = "张三" ;
            p1.age = 25 ;
            // 将p1的引用赋给p2
            p2 = p1 ;
            // 输出p2对象中的属性
            System.out.println("姓名:"+p2.name);
            System.out.println("年龄:"+p2.age);
            p1 = null ;
        }
    }
./ch12/���渚�12-21/浠g��12-21.java
    class Change
    {
        int x = 0 ;
    }

    public class TestRefDemo2
    {
        public static void main(String[] args)
        {
            Change c = new Change() ;
            c.x = 20 ;
            fun(c) ;
            System.out.println("x = "+c.x);
        }
        public static void fun(Change c1)
        {
            c1.x = 25 ;
        }
    }
./ch12/���渚�12-22/浠g��12-22.java
class Person
{
   private String name ;
   private int age ;
   public Person(String name,int age)
   {
      this.name = name ;
      this.age = age ;
   }
}
class TestOverEquals1
{
   public static void main(String[] args)
   {
      Person p1 = new Person("张三",25);
      Person p2 = new Person("张三",25);
       // 判断p1和p2的内容是否相等
      System.out.println(p1.equals(p2)?"是同一个人!":"不是同一个人");
   }
}
./ch12/���渚�12-23/浠g��12-23.java
class Person
{
   private String name ;
   private int age ;
   public Person(String name,int age)
   {
      this.name = name ;
      this.age = age ;
   }
   // 覆写父类(Object类)中的equals方法
   public boolean equals(Object o)
   {
      boolean temp = true ;
      // 声明一p1对象,此对象实际上就是当前调用equals方法的对象
      Person p1 = this ;
      // 判断Object类对象是否是Person的实例
      if(o instanceof Person)
      {
         // 如果是Person类实例,则进行向下转型
         Person p2 = (Person)o ;
         // 调用String类中的equals方法
         if(!(p1.name.equals(p2.name)&&p1.age==p2.age))
         {
            temp = false ;
         }
      }
      else
      {
         // 如果不是Person类实例,则直接返回false
         temp = false ;
      }
      return temp ;
   }
}
class TestOverEquals2
{
   public static void main(String[] args)
   {
      Person t_p1 = new Person("张三",25);
      Person t_p2 = new Person("张三",25);
      // 判断p1和p2的内容是否相等
      System.out.println(t_p1.equals(t_p2)?"是同一个人!":"不是同一个人");
   }
}
./ch12/���渚�12-24/浠g��12-24.java
interface Person
{
   public void fun1() ;
}
class Student implements Person
{
   public void fun1()
   {
      System.out.println("Student fun1()");
   }
}
class TestInterfaceObject
{
   public static void main(String[] args)
   {
      Person p = new Student() ;
      p.fun1() ;
   }
}
./ch12/���渚�12-25/浠g��12-25.java
interface Usb
{
   public void start() ;
   public void stop() ;
}
class MoveDisk implements Usb
{
   public void start()
   {
      System.out.println("MoveDisk start...") ;
   }
   public void stop()
   {
      System.out.println("MoveDisk stop...") ;
   }
}
class Mp3 implements Usb
{
   public void start()
   {
      System.out.println("Mp3 start...") ;
   }
   public void stop()
   {
      System.out.println("Mp3 stop...") ;
   }
}

class Computer
{
   public void work(Usb u)
   {
      u.start() ;
      u.stop() ;
   }
}

class TestInterface
{
   public static void main(String[] args)
   {
      new Computer().work(new MoveDisk()) ;
      new Computer().work(new Mp3()) ;
   }
}
./ch12/���渚�12-26/浠g��12-26.java
    class Person
    {
        private String name ;
        private int age ;
        public Person(String name,int age)
        {
            name = name ;
            age = age ;
        }
    }
./ch12/���渚�12-27/浠g��12-27.java
    class Person-1
    {
        private String name ;
        private int age ;
        public Person(String name,int age)
        {
            this.name = name ;
            this.age = age ;
        }
    }
./ch12/���渚�12-28/浠g��12-28.java
    class Person
    {
        private String name ;
        private int age ;
        public Person(String name,int age)
        {
            this.name = name ;
            this.age = age ;
        }
        public String talk()
        {
            return "我是:"+name+",今年:"+age+"岁" ;
        }
    }
    public class TestJavaThis
    {
        public static void main(String[] args)
        {
            Person p = new Person("张三",25) ;
            System.out.println(p.talk()) ;
        }
    }
./ch12/���渚�12-29/浠g��12-29.java
    class Person
    {
        String name ;
        int age ;
        Person(String name,int age)
        {
            this.name = name ;
            this.age = age ;
        }
        boolean compare(Person p)
        {
            if(this.name.equals(p.name)&&this.age==p.age)
            {
                return true ;
            }
            else
            {
                return false ;
            }
        }
    }

    public class TestCompare
    {
        public static void main(String[] args)
     {
        Person p1 = new Person("张三",30);
        Person p2 = new Person("张三",30);
        System.out.println(p1.compare(p2)?"相等,是同一人!":"不相等,不是同一人!");
     }
    }
./ch12/���渚�12-3/浠g��12-3.java
    class Outer
    {
        int score = 95;
        void inst()
        {
            Inner in = new Inner();
            in.display();
        }
        class Inner
        {
            void display()
            {
                System.out.println("成绩: score = " + score);
            }
        }
    }
    public class InnerClassDemo
    {
        public static void main(String[] args)
        {
            Outer outer = new Outer();
            outer.inst();
        }
    }
./ch12/���渚�12-30/浠g��12-30.java
    class Person
    {
        String name ;
        int age ;
        public Person()
        {
            System.out.println("1. public Person()");
        }
        public Person(String name,int age)
        {
            // 调用本类中无参构造方法
            this() ;
            this.name = name ;
            this.age = age ;
            System.out.println("2. public Person(String name,int age)");
        }
    }
    public class TestJavaThis1
    {
        public static void main(String[] args)
        {
            new Person("张三",25) ;
        }
    }
./ch12/���渚�12-31/浠g��12-31.java
    class Person
    {
        String name ;
        String city ;
        int age ;
        public Person(String name, String city, int age)
        {
            this.name = name ;
            this.city = city ;
            this.age = age ;
        }
        public String talk()
        {
            return  "我是:"+this.name+",今年:"+this.age+"岁,来自:"+this.city;
        }
    }
    public class TestStaticDemo1
    {
        public static void main(String[] args)
        {
            Person p1 = new Person("张三","中国",25) ;
            Person p2 = new Person("李四","中国",30) ;
            Person p3 = new Person("王五","中国",35) ;
            System.out.println(p1.talk()) ;
            System.out.println(p2.talk()) ;
            System.out.println(p3.talk()) ;
        }
    }
./ch12/���渚�12-32/浠g��12-32.java
    class Person
    {
        String name ;
        static String city = "中国";
        int age ;
        public Person(String name,int age)
        {
            this.name = name ;
            this.age = age ;
        }
        public String talk()
        {
            return  "我是:"+this.name+",今年:"+this.age+"岁,来自:"+city;
        }
    }
    public class TestStaticDemo2
    {
        public static void main(String[] args)
        {
            Person p1 = new Person("张三",25) ;
            Person p2 = new Person("李四",30) ;
            Person p3 = new Person("王五",35) ;
            System.out.println("修改之前信息:"+p1.talk()) ;
            System.out.println("修改之前信息:"+p2.talk()) ;
            System.out.println("修改之前信息:"+p3.talk()) ;
            System.out.println("  ************* 修改之后信息 **************");
            // 修改后的信息
            p1.city = "美国" ;
            System.out.println("修改之后信息:"+p1.talk()) ;
            System.out.println("修改之后信息:"+p2.talk()) ;
            System.out.println("修改之后信息:"+p3.talk()) ;
        }
    }
./ch12/���渚�12-33/浠g��12-33.java
    class Person
    {
        String name ;
        private static String city = "中国";
        int age ;
        public Person(String name,int age)
        {
            this.name = name ;
            this.age = age ;
        }
        public String talk()
        {
            return  "我是:"+this.name+",今年:"+this.age+"岁,来自:"+city;
        }
        public static void setCity(String c)
        {
            city = c ;
        }
    }
    public class TestStaticDemo3
    {
        public static void main(String[] args)
        {
            Person p1 = new Person("张三",25) ;
            Person p2 = new Person("李四",30) ;
            Person p3 = new Person("王五",35) ;
            System.out.println("修改之前信息:"+p1.talk()) ;
            System.out.println("修改之前信息:"+p2.talk()) ;
            System.out.println("修改之前信息:"+p3.talk()) ;
            System.out.println("   **************修改之后信息**************");
            // 修改后的信息
            Person.setCity("美国") ;
            System.out.println("修改之后信息:"+p1.talk()) ;
            System.out.println("修改之后信息:"+p2.talk()) ;
            System.out.println("修改之后信息:"+p3.talk()) ;
        }
    }
./ch12/���渚�12-34/浠g��12-34.java
    public class TestMain
    {
        /*
            public:表示公共方法
            static:表示此方法为一静态方法,可以由类名直接调用
            void:表示此方法无返回值
            main:系统定义的方法名称
            String args[]:接收运行时参数
        */
        public static void main(String[] args)
        {
            // 取得输入参数的长度
            int j = args.length ;
            if(j!=2)
            {
                System.out.println("输入参数个数有错误!") ;
                // 退出程序
                System.exit(1) ;
            }
            for (int i=0;i<args.length ;i++ )
            {
                System.out.println(args[i]) ;
            }
        }
    }
./ch12/���渚�12-35/浠g��12-35.java
    class Person
    {
        public Person()
        {
            System.out.println("1.public Person()");
        }
        // 此段代码会首先被执行
          static
          {
          System.out.println("2.Person类的静态代码块被调用!");
         }
    }
    public class TestStaticDemo5 {
        // 运行本程序时,静态代码块会被自动执行
         static
         {
               System.out.println("3.TestStaticDemo5类的静态代码块被调用!");
          }
        public static void main(String[] args) {
            System.out.println("4.程序开始执行!");
            // 产生两个实例化对象
            new Person() ;
            new Person() ;
         }
    }
./ch12/���渚�12-36/浠g��12-36.java
class TestFinalDemo1
{
   public static void main(String[] args)
   {
      final int i = 10 ;
      // 修改用final修饰的变量i
      i++ ;
   }
}
./ch12/���渚�12-37/浠g��12-37.java
final class Person
{
}
class Student extends Person
{
}
./ch12/���渚�12-38/浠g��12-38.java
class Person
{
   // 此方法声明为final不能被子类覆写
   final public String talk()
   {
      return "Person:talk()" ;
   }
}

class Student extends Person
{
   public String talk()
   {
      return "Student:talk()" ;
   }
}
./ch12/���渚�12-39/浠g��12-39.java
class Person
{
   public void fun1()
   {
      System.out.println("1.Person{fun1()}") ;
   }
   public void fun2()
   {
      System.out.println("2.Person{fun2()}") ;
   }
}

// Student类继承自Person类,也就继承了Person类中的fun1()、fun2()方法
class Student extends Person
{
   // 在这里覆写了Person类中的fun1()方法
   public void fun1()
   {
      System.out.println("3.Student{fun1()}") ;
   }
   public void fun3()
   {
      System.out.println("4.Studen{fun3()}") ;
   }
}
class TestJavaDemo3
{
   public static void main(String[] args)
   {
      // 声明一父类对象并通过子类对象对其进行实例化
      Person p = new Student() ;
      // 判断对象p是否是Student类的实例
      if(p instanceof Student)
      {
         // 将Person类的对象p转型为Student类型
         Student s = (Student)p ;
         s.fun1() ;
      }
      else
      {
         p.fun2() ;
      }
   }
}
./ch12/���渚�12-4/浠g��12-4.java
    class Outer
    {
        int score = 95;
        void inst()
        {
            Inner in = new Inner();
            in.display();
        }
        public class Inner
        {
            void display()
            {
                // 在内部类中声明一name属性
                String name = "张三" ;
                System.out.println("成绩: score = " + score);
            }
        }
        public void print()
        {
            // 在此调用内部类的name属性
            System.out.println("姓名:"+name) ;
        }
    }
    public class InnerClassDemo1
    {
        public static void main(String[] args)
        {
            Outer outer = new Outer();
            outer.inst();
        }
    }
./ch12/���渚�12-5/浠g��12-5.java
    class Outer
    {
        int score = 95;
        void inst()
        {
            Inner in = new Inner();
            in.display();
        }
        // 这里用static声明内部类
        static class Inner
        {
            void display()
            {
                System.out.println("成绩: score = " + score);
            }
        }
    }
    public class InnerClassDemo2
    {
        public static void main(String[] args)
        {
            Outer outer = new Outer();
            outer.inst();
        }
    }
./ch12/���渚�12-6/浠g��12-6.java
    class Outer
    {
        int score = 95;
        void inst()
        {
            Inner in = new Inner();
            in.display();
        }
        public class Inner
        {
            void display()
            {
                System.out.println("成绩: score = " + score);
            }
        }
    }
    public class InnerClassDemo3
    {
        public static void main(String[] args)
        {
            Outer outer = new Outer();
            Outer.Inner inner = outer.new Inner();
            inner.display() ;
        }
    }
./ch12/���渚�12-7/浠g��12-7.java
    class Outer
    {
        int score = 95;
        void inst()
        {
            class Inner
            {
                void display()
                {
                    System.out.println("成绩: score = " + score);
                }
            }
            Inner in = new Inner();
            in.display();
        }
    }
    public class InnerClassDemo4
    {
        public static void main(String[] args)
        {
            Outer outer = new Outer();
            outer.inst() ;
        }
    }
./ch12/���渚�12-8/浠g��12-8.java
    class Outer
    {
        int score = 95;
        void inst(final int s)
        {
            int temp = 20 ;
            class Inner
            {
                void display()
                {
                    System.out.println("成绩: score = " + (score+s+temp));
                }
            }
            Inner in = new Inner();
            in.display();
        }
    }
    public class InnerClassDemo5
    {
        public static void main(String[] args)
        {
            Outer outer = new Outer();
            outer.inst(5) ;
        }
    }
./ch12/���渚�12-9/浠g��12-9.java
    class Outer
    {
        int score = 95;
        void inst(final int s)
        {
            final int temp = 20 ;
            class Inner
            {
                void display()
                {
                    System.out.println("成绩: score = " + (score+s+temp));
                }
            }
            Inner in = new Inner();
            in.display();
        }
    }
    public class InnerClassDemo5
    {
        public static void main(String[] args)
        {
            Outer outer = new Outer();
            outer.inst(5) ;
        }
    }
./ch12/璺����涓����/Xiti_12.java
class Person
{
   private String name = "张亮亮" ;
   private int age = 20 ;
   private String sex = "男";
   public String talk()
   {
      return "我是:"+name+",今年:"+age+"岁,"+ "我是"+ sex +"性。" ;
   }
}

public class Xiti_12
{
   public static void main(String[] args)
   {
      System.out.println(new Person().talk());
   }
}
./ch13/���渚�13-1/浠g��13-1.java
    class IntegerDemo
    {
        public static void main(String[] args)
        {
            String a = "123" ;
            int i = Integer.parseInt(a) ;
            i++;
            System.out.println(i);
        }
    }
./ch13/���渚�13-2/浠g��13-2.java
    import java.util.*;
    public class SystemInfo
    {
        public static void main(String[] args)
        {
            Properties sp=System.getProperties();
            Enumeration e=sp.propertyNames();
            while(e.hasMoreElements())
            {
                String key=(String)e.nextElement();
                System.out.println(key+" = "+sp.getProperty(key));
            }
        }
    }
./ch13/���渚�13-3/浠g��13-3.java
    public class RuntimeDemo
    {
        public static void main(String[] args)
        {
            Runtime run = Runtime.getRuntime() ;
            try
            {
                run.exec("notepad.exe") ;
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }
./ch13/���渚�13-4/浠g��13-4.java
    import java.util.*;
    public class CalendarDemo
    {
        public static void main(String[] args)
        {
            Calendar c1=Calendar.getInstance();
            // 下面打印当前时间
            System.out.println(c1.get(c1.YEAR)+"年"+(c1.get(c1.MONTH)+1)+
                "月"+c1.get(c1.DAY_OF_MONTH)+"日"+c1.get(c1.HOUR)+
                        ":"+c1.get(c1.MINUTE)+":"+c1.get(c1.SECOND));
            // 增加天数为230
            c1.add(c1.DAY_OF_YEAR,230);

            // 下面打印的是230天后的时间
            System.out.println(c1.get(c1.YEAR)+"年"+(c1.get(c1.MONTH)+1)+
                    "月"+c1.get(c1.DAY_OF_MONTH)+"日"+c1.get(c1.HOUR)+
                        ":"+c1.get(c1.MINUTE)+":"+c1.get(c1.SECOND));
        }
    }
./ch13/���渚�13-5/浠g��13-5.java
    import java.text.* ;
    import java.util.Date;
    public class DateFormatDemo
    {
        public static void main(String[] args)
        {
            SimpleDateFormat sp1 =
new SimpleDateFormat("yyyy-MM-dd hh:mm:ss") ;
            SimpleDateFormat sp2 =
                new SimpleDateFormat("yyyy年MM月dd日 hh点mm分ss秒") ;
            try
               {
                Date d = sp1.parse("2005-8-11 18:30:38") ;
                   System.out.println(sp2.format(d)) ;
            }
            catch (ParseException e)
          {
                e.printStackTrace();
            }
        }
    }
./ch13/���渚�13-6/浠g��13-6.java
    import java.util.Random;
    public class RandomDemo
    {
        public static void main(String[] args)
        {
            Random r = new Random() ;
            for(int i=0;i<5;i++)
            {
                System.out.print(r.nextInt(100)+"\t") ;
            }
        }
    }
./ch13/���渚�13-7/浠g��13-7.java
    import java.util.* ;
    class Person
    {
        private String name ;
        private int age ;
        Person(String name,int age)
        {
            this.name = name ;
            this.age = age ;
        }
        public String toString()
        {
            return "姓名:"+this.name+",年龄:"+this.age ;
        }
    }
    public class HashCodeDemo
    {
        public static void main(String args[])
        {
            HashMap hm = new HashMap() ;
            hm.put(new Person("张三",20),"张三") ;
            System.out.println(hm.get(new Person("张三",20))) ;
        }
    }
./ch13/���渚�13-8/浠g��13-8.java
    class Employee implements Cloneable
    {
        private String name;
        private int age;
        public Employee(String name, int age)
        {
            this.name = name;
            this.age = age;
        }
        public Object clone() throws CloneNotSupportedException
        {
            return super.clone();
        }
        public String toString()
        {
            return "姓名:" + this.name + ",年龄:" + this.age;
        }
        public int getAge()
        {
            return age;
        }
        public void setAge(int age)
        {
            this.age = age;
        }
        public String getName()
        {
            return name;
        }
        public void setName(String name)
        {
            this.name = name;
        }
    }

    public class CloneDemo
    {
        public static void main(String args[])
        {
            Employee e1 = new Employee("张三", 21);
            Employee e2 = null;
            try {
                e2 = (Employee) e1.clone();
            } catch (CloneNotSupportedException e) {
                e.printStackTrace();
            }
            e2.setName("李四");
            e2.setAge(30);
            System.out.println("两个对象的内存地址比较:" + (e1 == e2));
            System.out.println(e1);
            System.out.println(e2);
        }
    }
./ch13/璺����涓����/Xiti_13.java
public class Xiti_13
{
    public static void main(String[] args)
    {
        Runtime run = Runtime.getRuntime() ;
        try
        {
            run.exec("calc.exe") ;
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}
./ch14/���渚�14-1/浠g��14-1.java
package demo.java ;
class Person
{
    public String talk()

        return "Person ―― >> talk()" ;
    }
}

class TestPackage1
{
    public static void main(String[] args)
    {
        System.out.println(new Person().talk()) ;
    }
}
./ch14/���渚�14-2/浠g��14-2.java
package demo.java.a ;

public class Person
{
    public String talk()
    {
        return "Person ―― >> talk()" ;
    }
}

./ch14/���渚�14-3/浠g��14-3.java
package demo.java.b ;
import demo.java.a.Person ;

class TestPackage2
{
    public static void main(String[] args)
    {
        System.out.println(new Person().talk()) ;
    }
}

./ch14/���渚�14-4/浠g��14-4.java
package demo.java.b ;

class TestPackage3
{
    public static void main(String[] args)
    {
        System.out.println(new demo.java.a.Person().talk()) ;
    }
}
./ch14/���渚�14-5/浠g��14-5.java
package demo.java.a ;

public class Person
{
    protected String name ;
    public String talk()
    {
        return "Person ―― >> talk()" ;
    }
}

./ch14/���渚�14-6/浠g��14-6.java
package demo.java.b ;
import demo.java.a.* ;

public class Student extends Person
{
    public Student(String name)
    {
        this.name = name ;
    }
    public String talk()
    {
        return "Person ―― >> talk() , "+this.name ;
    }
}

./ch14/���渚�14-7/浠g��14-7.java
package demo.java.c ;
import demo.java.b.* ;

class TestPackage4
{
    public static void main(String[] args)
    {
        Student s = new Student("javafans") ;
        s.name = "javafans" ;
        System.out.println(s.talk()) ;
    }
}
./ch14/璺����涓����/Xiti_14/src/bao_private/Xiti_14.java
package bao_private ;
import bao_public.Person ;

class Xiti_14
{
    public static void main(String[] args)
    {
        System.out.println(new Person().talk()) ;
    }
}
./ch14/璺����涓����/Xiti_14/src/bao_public/Person.java
package bao_public ;

public class Person
{
    public String talk()
    {
        return "Person ―― >> talk()" ;
    }
}
./ch15/���渚�15-1_/浠g��15-1.java
    public class TestException_1
    {
      public static void main(String args[])
      {
            int arr[]=new int[5];                  // 容许5个元素
            arr[10]=7;                           // 下标值超出所容许的范围
            System.out.println("end of main() method !!");
      }
    }
./ch15/���渚�15-2/浠g��15-2.java
    public class TestException_2
    {
          public static void main(String args[])
          {
            try                 // 检查这个程序块的代码
             {
                int arr[]=new int[5];
                arr[10]=7;        // 在这里会出现异常
              }
              catch(ArrayIndexOutOfBoundsException e)
              {
                 System.out.println("数组超出绑定范围!");
              }
         finally               // 这个块的程序代码一定会执行
         {
                 System.out.println("这里一定会被执行!");
         }
              System.out.println("main()方法结束!");
           }
    }
./ch15/���渚�15-3/浠g��15-3.java
    public class TestException_3
    {
        public static void main(String args[])
        {
            try
            {
                int arr[]=new int[5];
                arr[10]=7;
            }
            catch(ArrayIndexOutOfBoundsException e){
                System.out.println("数组超出绑定范围!");
                System.out.println("异常:"+e);   // 显示异常对象e的内容�
            }
            System.out.println("main()方法结束!");
        }
    }
./ch15/���渚�15-4/浠g��15-4.java
    public class TestException_4
    {
           public static void main(String args[])
           {
              int a=4,b=0;
         try
            {
              if(b==0)
                  throw new ArithmeticException("一个算术异常");  // 抛出异常
              else
                  System.out.println(a+"/"+b+"="+a/b);// 若抛出异常,则执行此行
            }
             catch(ArithmeticException e)
            {
                   System.out.println("抛出异常为:"+e);
             }
         }
    }
./ch15/���渚�15-5/浠g��15-5.java
    class Test
    {
        // throws 在指定方法中不处理异常,在调用此方法的地方处理
          void add(int a,int b) throws Exception
           {
          int c;
          c=a/b;
          System.out.println(a+"/"+b+"="+c);
       }
    }
    public class TestException_5
    {
           public static void main(String args[])
           {
            Test t = new Test() ;
            t.add(4,0);
           }
    }
./ch15/���渚�15-6/浠g��15-6.java
    class DefaultException extends Exception
    {
        public DefaultException(String msg)
        {
            // 调用Exception类的构造方法,存入异常信息
            super(msg) ;
        }
    }
    public class TestException_6
    {
        public static void main(String[] args)
        {
            try
            {
                // 在这里用throw直接抛出一个DefaultException类的实例对象
                throw new DefaultException("自定义异常!") ;
            }
            catch(Exception e)
            {
                System.out.println(e) ;
            }
        }
    }
./ch15/璺����涓����/Xiti_15.java
public class Xiti_15
{
      public static void main(String args[])
      {
          try                 // 检查这个程序块的代码
         {
            int x = 6;
            int y = 0;
            int z;
            z = x/y;            // 在这里会出现异常
          }
          catch(java.lang.ArithmeticException e)
          {
             System.out.println("被除数为0!");
          }
          finally               // 这个块的程序代码一定会执行
          {
              System.out.println("程序出错!");
          }
       }
}
./ch16/���渚�16-1/浠g��16-1.java
import java.util.*;
public class ArrayListDemo
{
    public static void main(String args[])
    {
        // 创建一个ArrarList对象
        ArrayList al = new ArrayList();
        System.out.println("a1 的初始化大小:" + al.size());
        // 向ArrayList对象中添加新内容
        al.add("C");        // 0位置
        al.add("A");        // 1位置
        al.add("E");        // 2位置
        al.add("B");        // 3位置
        al.add("D");        // 4位置
        al.add("F");        // 5位置
        // 把A2加在ArrayList对象的第2个位置
        al.add(1, "A2");    // 加入之后的内容:C A2 A E B D F
        System.out.println("a1 加入元素之后的大小:" + al.size());
        // 显示Arraylist数据
        System.out.println("a1 的内容: " + al);
        // 从ArrayList中移除数据
        al.remove("F");
        al.remove(2);        // C A2 E B D
        System.out.println("a1 删除元素之后的大小: " + al.size());
        System.out.println("a1 的内容: " + al);
    }
}
./ch16/���渚�16-10/浠g��16-10.java
    import java.util.* ;
    class Employee implements Comparator
    {
        public int compare(Object a, Object b)
        {
            int k;
            String aStr, bStr;
            aStr = (String) a;
            bStr = (String) b;
            k = aStr.compareTo(bStr);
            if(k==0)
                return aStr.compareTo(bStr);
            else
                return k;
        }
    }

    public class TreeMapDemo2
    {
        public static void main(String args[])
        {
            // 创建一个TreeMap对象
            TreeMap tm = new TreeMap(new Employee());
            // 向Map对象中插入元素
            tm.put("Z、张三", new Double(3534.34));
            tm.put("L、李四", new Double(126.22));
            tm.put("W、王五", new Double(1578.40));
            tm.put("Z、赵六", new Double(99.62));
            tm.put("S、孙七", new Double(-29.08));
            Set set = tm.entrySet();
            Iterator itr = set.iterator();
            while(itr.hasNext())
            {
                Map.Entry me = (Map.Entry)itr.next();
                System.out.print(me.getKey() + ": ");
                System.out.println(me.getValue());
            }
            System.out.println();
            double balance = ((Double)tm.get("Z、张三")).doubleValue();
            tm.put("Z、张三", new Double(balance + 2000));
            System.out.println("张三最新的资金数为: " + tm.get("Z、张三"));
        }
    }
./ch16/���渚�16-11/浠g��16-11.java
    import java.util.* ;
    public class VectorDemo
    {
        public static void main(String[] args)
        {
            Vector v = new Vector() ;
            v.add("A") ;
            v.add("B") ;
            v.add("C") ;
            v.add("D") ;
            v.add("E") ;
            v.add("F") ;
            Enumeration e = v.elements() ;
            while(e.hasMoreElements())
            {
                System.out.print(e.nextElement()+"\t") ;
            }
        }
    }
./ch16/���渚�16-12/浠g��16-12.java
    import java.util.* ;
    public class StackDemo
    {
        static void showpush(Stack st, int a)
        {
            st.push(new Integer(a));
            System.out.println("入栈(" + a + ")");
            System.out.println("Stack: " + st);
        }

        static void showpop(Stack st)
        {
            System.out.print("出栈 -> ");
            Integer a = (Integer) st.pop();
            System.out.println(a);
            System.out.println("Stack: " + st);
        }

        public static void main(String args[])
        {
            Stack st = new Stack();
            System.out.println("Stack: " + st);
            showpush(st, 42);
            showpush(st, 66);
            showpush(st, 99);
            showpop(st);
            showpop(st);
            showpop(st);
            //出栈的时候会有一个EmptyStackException的异常,需要进行异常处理
            try {
                showpop(st);
            } catch (EmptyStackException e) {
                System.out.println("出现异常:栈中内容为空");
            }
        }
    }
./ch16/���渚�16-13/浠g��16-13.java
    import java.util.* ;
    public class HashtableDemo
    {
        public static void main(String[] args)
        {
            Hashtable numbers = new Hashtable();
            numbers.put("one", new Integer(1));
            numbers.put("two", new Integer(2));
            numbers.put("three", new Integer(3));
            Integer n = (Integer) numbers.get("two");
            if (n != null)
            {
                System.out.println("two = " + n);
            }
        }
    }
./ch16/���渚�16-14/浠g��16-14.java
    import java.util.*;
    public class PropertiesDemo
    {
        public static void main(String args[])
    {
            Properties capitals = new Properties();
            Set states;
            String str;
            capitals.put("中国", "北京");
            capitals.put("俄罗斯", "莫斯科");
            capitals.put("日本", "东京");
            capitals.put("法国", "巴黎");
            capitals.put("英国", "伦敦");

            // 返回包含映射中项的集合
            states = capitals.keySet();
            Iterator itr = states.iterator();
            while (itr.hasNext())
            {
                str = (String) itr.next();
                System.out.println("国家:" + str + " ,首都: " + capitals.getProperty(str) + ".");
            }
            System.out.println();
            // 查找列表,如果没有则显示为“没发现”
            str = capitals.getProperty("美国", "没有发现");
            System.out.println("美国的首都:" + str + ".");
        }
    }
./ch16/���渚�16-15/浠g��16-15.java
    import java.io.* ;
    import java.util.* ;
    public class PropertiesFile
    {
        public static void main(String[] args)
        {
            Properties settings = new Properties();
            try {
                settings.load(new FileInputStream("c:\\count.txt"));
            } catch (Exception e) {
                settings.setProperty("count", new Integer(0).toString());
            }
            int c = Integer.parseInt(settings.getProperty("count")) + 1;
            System.out.println("这是本程序第" + c + "次被使用");
            settings.put("count", new Integer(c).toString());
            try {
                settings.store(new FileOutputStream("c:\\count.txt"),
"PropertiesFile use it .");
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
        }
    }
./ch16/���渚�16-2/浠g��16-2.java
import java.util.*;
public class ArrayListToArray
{
    public static void main(String args[])
    {
        // 创建一ArrayList对象al
        ArrayList al = new ArrayList();
        // 向ArrayList中加入对象
        al.add(new Integer(1));
        al.add(new Integer(2));
        al.add(new Integer(3));
        al.add(new Integer(4));
        System.out.println("ArrayList 中的内容 : " + al);
        // 得到对象数组
        Object ia[] = al.toArray();
        int sum = 0;
        // 计算数组内容
        for (int i = 0; i < ia.length; i++)
            sum += ((Integer) ia[i]).intValue();
        System.out.println("数组累加结果是: " + sum);
    }
}
./ch16/���渚�16-3/浠g��16-3.java
import java.util.*;
public class LinkedListDemo
{
    public static void main(String args[])
    {
        // 创建LinkedList对象
        LinkedList ll = new LinkedList();
        // 加入元素到LinkedList中
        ll.add("F");
        ll.add("B");
        ll.add("D");
        ll.add("E");
        ll.add("C");
        // 在链表的最后一个位置加上数据
        ll.addLast("Z");
        // 在链表的第一个位置上加入数据
        ll.addFirst("A");
        // 在链表第二个元素的位置上加入数据
        ll.add(1, "A2");
        System.out.println("ll 最初的内容:" + ll);
        // 从linkedlist中移除元素
        ll.remove("F");
        ll.remove(2);
        System.out.println("从ll中移除内容之后:" + ll);
        // 移除第一个和最后一个元素
        ll.removeFirst();
        ll.removeLast();
        System.out.println("ll 移除第一个和最后一个元素之后的内容:" + ll);
        // 取得并设置值
        Object val = ll.get(2);
        ll.set(2, (String) val + " Changed");
        System.out.println("ll 被改变之后:" + ll);
    }
}
./ch16/���渚�16-4/浠g��16-4.java
import java.util.*;
public class HashSetDemo
{
    public static void main(String args[])
    {
        // 创建HashSet对象
        HashSet hs = new HashSet();
        // 加入元素到HastSet中
        hs.add("B");
        hs.add("A");
        hs.add("D");
        hs.add("E");
        hs.add("C");
        hs.add("F");
        System.out.println(hs);
    }
}
./ch16/���渚�16-5/浠g��16-5.java
import java.util.*;
public class TreeSetDemo
{
    public static void main(String args[])
    {
        // 创建一TreeSet对象
        TreeSet ts = new TreeSet();
        // 加入元素到TreeSet中
        ts.add("C");
        ts.add("A");
        ts.add("B");
        ts.add("E");
        ts.add("F");
        ts.add("D");
        System.out.println(ts);
    }
}
./ch16/���渚�16-6/浠g��16-6.java
import java.util.* ;
public class IteratorDemo
{
    public static void main(String args[])
    {
        // 创建一个ArrayList数组
        ArrayList al = new ArrayList();
        // 加入元素到ArrayList中
        al.add("C");
        al.add("A");
        al.add("E");
        al.add("B");
        al.add("D");
        al.add("F");
        // 使用iterator显示a1中的内容
        System.out.print("a1 中原始内容是:");
        Iterator itr = al.iterator();
        while (itr.hasNext())
        {
            Object element = itr.next();
            System.out.print(element + " ");
        }
        System.out.println();
        // 在ListIterator中修改内容
        ListIterator litr = al.listIterator();
        while (litr.hasNext())
        {
            Object element = litr.next();
            // 用set方法修改其内容
            litr.set(element + "+");
        }
        System.out.print("a1 被修改之后的内容:");
        itr = al.iterator();
        while (itr.hasNext())
        {
            Object element = itr.next();
            System.out.print(element + " ");
        }
        System.out.println();
        // 下面是将列表中的内容反向输出
        System.out.print("将列表反向输出:");
        // hasPreviours由后向前输出
        while (litr.hasPrevious())
        {
            Object element = litr.previous();
            System.out.print(element + " ");
        }
        System.out.println();
    }
}
./ch16/���渚�16-7/浠g��16-7.java
    import java.util.* ;
    public class HashMapDemo
    {
        public static void main(String args[])
        {
            // 创建HashMap对象
            HashMap hm = new HashMap();
            // 加入元素到HashMap中
            hm.put("John Doe", new Double(3434.34));
            hm.put("Tom Smith", new Double(123.22));
            hm.put("Jane Baker", new Double(1378.00));
            hm.put("Todd Hall", new Double(99.22));
            hm.put("Ralph Smith", new Double(-19.08));
            // 返回包含映射中项的集合
            Set set = hm.entrySet();
            // 用Iterator得到HashMap中的内容
            Iterator i = set.iterator();
            // 显示元素
            while (i.hasNext())
            {
                //Map.Entry可以操作映射的输入
                Map.Entry me = (Map.Entry) i.next();
                System.out.print(me.getKey() + ": ");
                System.out.println(me.getValue());
            }
            System.out.println();
            // 让John Doe中的值增加1000
            double balance = ((Double) hm.get("John Doe")).doubleValue();
            //用新的值替换掉旧的值
            hm.put("John Doe", new Double(balance + 1000));
            System.out.println("John Doe's 现在的资金:" + hm.get("John Doe"));
        }
    }
./ch16/���渚�16-8/浠g��16-8.java
    import java.util.* ;
    public class TreeMapDemo
    {
        public static void main(String args[])
        {
            // 创建TreeMap对象
            TreeMap tm = new TreeMap();
            // 加入元素到TreeMap中
            tm.put(new Integer(10000 - 2000), "张三");
            tm.put(new Integer(10000 - 1500), "李四");
            tm.put(new Integer(10000 - 2500), "王五");
            tm.put(new Integer(10000 - 5000), "赵六");
            Collection col = tm.values();
            Iterator i = col.iterator();
            System.out.println("按工资由高到低顺序输出:");
            while (i.hasNext())
            {
                System.out.println(i.next());
            }
        }
    }
./ch16/���渚�16-9/浠g��16-9.java
    import java.util.*;
    class MyComp implements Comparator
    {
        public int compare(Object o1, Object o2)
        {
            String aStr, bStr;
            aStr = (String)o1;
            bStr = (String)o2;
            return bStr.compareTo(aStr);
        }
    }
    public class ComparatorDemo
    {
        public static void main(String args[])
        {
            // 创建一个TreeSet对象
            TreeSet ts = new TreeSet(new MyComp());
            // 向TreeSet对象中加入内容
            ts.add("C");
            ts.add("A");
            ts.add("B");
            ts.add("E");
            ts.add("F");
            ts.add("D");
            // 得到Iterator的实例化对象
            Iterator i = ts.iterator();
            // 显示全部内容
            while (i.hasNext())
            {
                Object element = i.next();
                System.out.print(element + " ");
            }
        }
    }
./ch16/璺����涓����/Xiti_16.java
import java.util.TreeSet;
public class Xiti_16
{
    public static void main(String args[])
    {
        // 创建一TreeSet对象
        TreeSet ts = new TreeSet();
        // 加入元素到TreeSet中
        ts.add("3");
        ts.add("6");
        ts.add("9");
        ts.add("7");
        ts.add("18");
        ts.add("25");
        System.out.println(ts);
    }
}
./ch17/Meiju/org/lxh/enumdemo/demo00/Color.java
package org.lxh.enumdemo.demo00;

public class Color {
    private String name;
    public static final Color RED = new Color("红色");
    public static final Color GREEN = new Color("绿色");
    public static final Color BLUE = new Color("蓝色");
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    private Color(String name) {
        this.setName(name);
    }
    public static Color getInstance(int i) {
        if (i == 0) {
            return RED;
        }
        if (i == 1) {
            return GREEN;
        }
        if (i == 2) {
            return BLUE;
        }
        return null;
    }
}

./ch17/Meiju/org/lxh/enumdemo/demo00/TestColor.java
package org.lxh.enumdemo.demo00;

public class TestColor {

    public static void main(String[] args) {

        Color c = Color.getInstance(0) ;

        System.out.println(c.getName()) ;
    }
}
./ch17/Meiju/org/lxh/enumdemo/demo01/Color.java
package org.lxh.enumdemo.demo01;

import java.lang.*;
import java.util.*;
public enum Color {

    RED{
        public String getColor(){
            return  "红色";

        }

    },
    GREEN{

        public String getColor(){

            return  "绿色";

        }

    },

    BLUE{
        public String getColor(){

            return "蓝色";

        }

    };
}
./ch17/Meiju/org/lxh/enumdemo/demo01/EnumMapDemo.java
package org.lxh.enumdemo.demo01;

import java.util.EnumMap;

import java.util.Map;

public class EnumMapDemo {

    public static void main(String[] args) {

        EnumMap<Color, String> eMap = new EnumMap<Color, String>(Color.class);

        eMap.put(Color.RED, "红色");

        eMap.put(Color.GREEN, "绿色");

        eMap.put(Color.BLUE, "蓝色");

        for (Map.Entry<Color, String> me : eMap.entrySet()) {

            System.out.println(me.getKey() + " --> " + me.getValue()) ;
        }
    }
}
./ch17/Meiju/org/lxh/enumdemo/demo01/EnumSetDemo01.java
package org.lxh.enumdemo.demo01;

import java.util.EnumSet;

import java.util.Iterator;

public class EnumSetDemo01 {

    public static void main(String[] args) {
        EnumSet<Color> eSet = EnumSet.noneOf(Color.class); // 表示将全部的内容设置到集合
        Iterator<Color> iter = eSet.iterator() ;
        while(iter.hasNext()){
            System.out.println(iter.next());
        }
    }
}
./ch17/Meiju/org/lxh/enumdemo/demo01/TestColor01.java
package org.lxh.enumdemo.demo01;

public class TestColor01 {

    public static void main(String[] args) {

        Color c = Color.RED ;    // 得到红色

        System.out.println(c) ;
    }
}
./ch17/Meiju/org/lxh/enumdemo/demo01/TestColor03.java
package org.lxh.enumdemo.demo01;

public class TestColor03 {

    public static void main(String[] args) {

        switch (Color.RED) {

        case RED: {

            System.out.println("红色");

            break;
        }

        case GREEN: {

            System.out.println("绿色");

            break;

        }
        case BLUE: {

            System.out.println("蓝色");

            break;
        }
        }
    }
}
./ch17/Meiju/org/lxh/enumdemo/demo01/TestColor04.java
package org.lxh.enumdemo.demo01;

public class TestColor04 {

    public static void main(String[] args) {

        for (Color c : Color.values()) {

            System.out.print(c + "、");
        }
    }
}
./ch17/Meiju/org/lxh/enumdemo/demo01/TestColor05.java
package org.lxh.enumdemo.demo01;

public class TestColor05 {

    public static void main(String[] args) {

        for (Color c : Color.values()) {

            System.out.println(c.name() + " --> " + c.ordinal());

        }
    }
}
./ch17/Meiju/org/lxh/enumdemo/demo01/TestColor06.java
package org.lxh.enumdemo.demo01;

public class TestColor06 {

    public static void main(String[] args) {

        Color c = Color.valueOf(Color.class, "RED") ;

        System.out.println(c) ;
    }
}
./ch17/Meiju/org/lxh/enumdemo/demo02/Color.java
package org.lxh.enumdemo.demo02;

public enum Color implements Info { // 实现接口

    RED {
        public String getColor() {
            return "红色";
        }
    },
    GREEN {
        public String getColor() {
            return "绿色";
        }
    },
    BLUE {
        public String getColor(){
            return "蓝色" ;
        }
    };
}

./ch17/Meiju/org/lxh/enumdemo/demo02/Info.java
package org.lxh.enumdemo.demo02;

public interface Info {

public String getColor() ;
}
./ch17/Meiju/org/lxh/enumdemo/demo02/TestColor.java
package org.lxh.enumdemo.demo02;
public class TestColor {

    public static void main(String[] args) {

        for (Color c : Color.values()) {

            System.out.println(c.ordinal() + " --> " + c.name() + ":"
                    + c.getColor());
        }
    }
}
./ch17/Meiju/org/lxh/enumdemo/demo03/Color.java
package org.lxh.enumdemo.demo03;

public interface Color {

    public static final int RED = 0;
    public static final int GREEN = 1;
    public static final int BLUE = 2;

}
./ch17/���渚�17-1/浠g��17-1.java
public class Color {
    private String name;
    public static final Color RED = new Color("红色");
    public static final Color GREEN = new Color("绿色");
    public static final Color BLUE = new Color("蓝色");
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    private Color(String name) {
        this.setName(name);
    }
    public static Color getInstance(int i) {
        if (i == 0) {
            return RED;
        }
        if (i == 1) {
            return GREEN;
        }
        if (i == 2) {
            return BLUE;
        }
        return null;
    }
}
./ch17/���渚�17-10/浠g��17-10.java
package org.lxh.enumdemo.demo04;
import java.util.EnumMap;
import java.util.Map;
public class EnumMapDemo {
    public static void main(String[] args) {
        EnumMap<Color, String> eMap = new EnumMap<Color, String>(Color.class);
        eMap.put(Color.RED, "红色");
        eMap.put(Color.GREEN, "绿色");
        eMap.put(Color.BLUE, "蓝色");
        for (Map.Entry<Color, String> me : eMap.entrySet()) {
            System.out.println(me.getKey() + " --> " + me.getValue()) ;
        }
        }
}
./ch17/���渚�17-11/浠g��17-11.java
package org.lxh.enumdemo.demo04;
import java.util.EnumSet;
import java.util.Iterator;
public class EnumSetDemo01 {
         public static void main(String[] args) {
        EnumSet<Color> eSet = EnumSet.allOf(Color.class); // 表示将全部的内容设置到集合
        Iterator<Color> iter = eSet.iterator() ;
        while(iter.hasNext()){
            System.out.println(iter.next());
        }
./ch17/���渚�17-12/浠g��17-12.java
package org.lxh.enumdemo.demo04;
import java.util.EnumSet;
import java.util.Iterator;
public class EnumSetDemo02 {
         public static void main(String[] args) {
        EnumSet<Color> eSet = EnumSet.noneOf(Color.class); // 表示此类型的空集合
        Iterator<Color> iter = eSet.iterator() ;
        while(iter.hasNext()){
            System.out.println(iter.next());
              }
          }
}
./ch17/���渚�17-13/浠g��17-13.java
package org.lxh.enumdemo.demo05;
public enum Color {
           RED("红色"), GREEN("绿色"), BLUE("蓝色");
       private String name;
       public String getName() {
            return name;
    }
public void setName(String name) {
        this.name = name;
          }
          Color(String name) {
          this.setName(name);
    }
}
./ch17/���渚�17-14/浠g��17-14.java
package org.lxh.enumdemo.demo06;
public interface Info {
    public String getColor() ;
}
./ch17/���渚�17-15/浠g��17-15.java
package org.lxh.enumdemo.demo06;
public enum Color implements Info { // 实现接口
          RED {
       public String getColor() {
            return "红色";
        }
        },
        GREEN {
        public String getColor() {
            return "绿色";
        }
         },
         BLUE {
        public String getColor(){
            return "蓝色" ;
        }
         };
}

./ch17/���渚�17-16/浠g��17-16.java
package org.lxh.enumdemo.demo06;
public class TestColor {
     public static void main(String[] args) {
            for (Color c : Color.values()) {
              System.out.println(c.ordinal() + " --> " + c.name() + ":"
                     + c.getColor());
             }
           }
}
./ch17/���渚�17-17/浠g��17-17.java
package org.lxh.enumdemo.demo06;
public enum Color {
          RED {
       public String getColor() {
            return "红色";
        }
        },
        GREEN {
        public String getColor() {
            return "绿色";
        }
         },
         BLUE {
        public String getColor(){
            return "蓝色" ;
        }
         };
public abstract String getColor() ;
}
./ch17/���渚�17-18/浠g��17-18.java
package org.lxh.enumdemo.demo06;
public class TestColor {
     public static void main(String[] args) {
            for (Color c : Color.values()) {
              System.out.println(c.ordinal() + " --> " + c.name() + ":"
                     + c.getColor());
             }
           }
}
./ch17/���渚�17-2/浠g��17-2.java
package org.lxh.enumdemo.demo01;

public class TestColor {

    public static void main(String[] args) {

        Color c = Color.getInstance(0) ;

        System.out.println(c.getName()) ;
    }
}
./ch17/���渚�17-3/浠g��17-3.java
       package org.lxh.enumdemo.demo01;
      public interface Color {
         public static final int RED = 0;
         public static final int GREEN = 1;
         public static final int BLUE = 2;
     }
./ch17/���渚�17-4/浠g��17-4.java
01   package org.lxh.enumdemo.demo02;
02   public enum Color {
03       RED, GREEN, BLUE;
04    }
./ch17/���渚�17-5/浠g��17-5.java
package org.lxh.enumdemo.demo03;
public class TestColor01 {
      public static void main(String[] args) {
        Color c = Color.RED ;    // 得到红色
        System.out.println(c) ;
     }
    }
./ch17/���渚�17-6/浠g��17-6.java
package org.lxh.enumdemo.demo03;
public class TestColor03 {
      public static void main(String[] args) {
        switch (Color.RED) {
        case RED: {
            System.out.println("红色");
            break;
        }
        case GREEN: {
            System.out.println("绿色");
            break;
        }
        case BLUE: {
            System.out.println("蓝色");
            break;
        }
}
}
}
./ch17/���渚�17-7/浠g��17-7.java
package org.lxh.enumdemo.demo03;
public class TestColor04 {
public static void main(String[] args) {
        for (Color c : Color.values()) {
            System.out.print(c + "、");
        }
    }
}
./ch17/���渚�17-8/浠g��17-8.java
package org.lxh.enumdemo.demo03;
public class TestColor05 {
    public static void main(String[] args) {
        for (Color c : Color.values()) {
            System.out.println(c.name() + " --> " + c.ordinal());
         }
         }
}
./ch17/���渚�17-9/浠g��17-9.java

package org.lxh.enumdemo.demo03;
public class TestColor06 {
    public static void main(String[] args) {
        Color c = Color.valueOf(Color.class, "RED") ;
        System.out.println(c) ;
         }
}
./ch17/璺����涓����/Xiti_17.java
public enum Day {
    MONDAY {
 return "星期一";
    },
    TUESDAY {
public String getDay() {
   return "星期二";
    }
     },
     WEDNESDAY {
  return "星期三" ;
     };
public abstract String getDay() ;
     }
./ch18/璺����涓����/Xiti_18.java
/**
 * Describes the Request-For-Enhancement(RFE) that led
 * to the presence of the annotated API element.
 */
public @interface RequestForEnhancement {
 int    id();
String synopsis();
String engineer() default "[unassigned]";
String date();   default "[unimplemented]";
}
./ch19/���渚�19-1/浠g��19-1.java
public class ThreadDemo_1
{
    public static void main(String args[])
    {
        new TestThread().run();
        // 循环输出
        for(int i=0;i<10;i++)
        {
            System.out.println("main 线程在运行");
        }
    }
}
class TestThread
{
    public void run()
    {
        for(int i=0;i<10;i++)
        {
            System.out.println("TestThread 在运行");
        }
    }
}
./ch19/���渚�19-10/浠g��9-10.java
public class ThreadDaemon
{
    public static void main(String args[])
    {
        ThreadTest t = new ThreadTest() ;
        Thread tt = new Thread(t) ;
        tt.setDaemon(true) ;    // 设置后台运行
        tt.start();
    }
}

class ThreadTest implements Runnable
{
        public void run()
        {
            while(true)
          {
            System.out.println(Thread.currentThread().getName()+"is running.");
          }
    }
}
./ch19/���渚�19-11/浠g��19-11.java
public class ThreadJoin
{
    public static void main(String[] args)
    {
        ThreadTest t=new ThreadTest();
        Thread pp=new Thread(t);
        pp.start();
        int i=0;
        for(int x=0;x<10;x++)
        {
            if(i==5)
            {
                try
                {
                    pp.join();        // 强制运行完一线程后,再运行后面的线程
                }
                catch(Exception e)        // 会抛出InterruptedException
                {
                    System.out.println(e.getMessage());
                }
            }
            System.out.println("main Thread "+i++);
        }
    }
}
class ThreadTest implements Runnable
{
    public void run()
    {
        String str=new String();
        int i=0;
        for(int x=0;x<10;x++)
        {
            System.out.println(Thread.currentThread().getName()+" ---->> "+i++);
        }
    }
}
./ch19/���渚�19-12/浠g��19-12.java
public class TwoThreadSleep extends Thread {
    public void run() {
        loop();
    }
    public void loop() {
        String name = Thread.currentThread().getName();
        System.out.println(name+" ---->> 刚进入loop方法");
        for ( int i = 0; i < 10; i++ )
        {
            try {
                Thread.sleep(2000);
            } catch ( InterruptedException x ) {}
            System.out.println("name=" + name);
        }
        System.out.println(name+" ---->> 离开loop方法") ;
    }
    public static void main(String[] args)
    {
        TwoThreadSleep tt = new TwoThreadSleep();
        tt.setName("my worker thread");
        tt.start();
        try {
            Thread.sleep(700);
        } catch ( InterruptedException x ) {}
        tt.loop();
    }
}
./ch19/���渚�19-13/浠g��19-13.java
public class SleepInterrupt implements Runnable
{
    public void run()
    {
        try {
            System.out.println("在run()方法中 - 这个线程休眠20秒");
            Thread.sleep(20000);
            System.out.println("在run()方法中 - 继续运行");
        }
        catch (InterruptedException x) {
            System.out.println("在run()方法中 - 中断线程");
            return;
        }
        System.out.println("在run()方法中 - 休眠之后继续完成");
        System.out.println("在run()方法中 - 正常退出");
    }
    public static void main(String[] args)
    {
        SleepInterrupt si = new SleepInterrupt();
        Thread t = new Thread(si);
        t.start();
        // 在此休眠是为确保线程能运行一会
        try {
            Thread.sleep(2000);
        }
        catch (InterruptedException x) {}
        System.out.println("在main()方法中 - 中断其它线程");
        t.interrupt();
        System.out.println("在main()方法中 - 退出");
    }
}
./ch19/���渚�19-14/浠g��19-14.java
public class InterruptCheck
{
    public static void main(String[] args)
    {
        Thread t = Thread.currentThread();
        System.out.println("A:t.isInterrupted() = " + t.isInterrupted());
        t.interrupt();
        System.out.println("B:t.isInterrupted() = " + t.isInterrupted());
        System.out.println("C:t.isInterrupted() = " + t.isInterrupted());
        try {
            Thread.sleep(2000);
            System.out.println("线程没有被中断!");
        } catch ( InterruptedException x ) {
        System.out.println("线程被中断!");
        }
        // 因为sleep抛出了异常,所以它清除了中断标志
        System.out.println("D:t.isInterrupted() = " + t.isInterrupted());
    }
}
./ch19/���渚�19-15/浠g��19-15.java
public class ThreadDemo_5
{
    public static void main(String [] args)
    {
        TestThread t = new TestThread() ;
        // 启动了四个线程,实现了资源共享的目的
        new Thread(t).start();
        new Thread(t).start();
        new Thread(t).start();
        new Thread(t).start();
    }
}
class TestThread implements Runnable
{
    private int tickets=20;
    public void run()
    {
        while(true)
        {
            if(tickets>0)
            {
                try{
                    Thread.sleep(100);
                }
                catch(Exception e){}
                System.out.println(Thread.currentThread().getName()
+"出售票"+tickets--);
            }
        }
    }
}
./ch19/���渚�19-16/浠g��19-16.java
class A
{
    synchronized void funA(B b)
    {
        String name=Thread.currentThread().getName();
        System.out.println(name+ " 进入 A.foo ");
        try
        {
            Thread.sleep(1000);
        }
        catch(Exception e)
        {
            System.out.println(e.getMessage());
        }
        System.out.println(name+ " 调用 B类中的last()方法");
        b.last();
    }
    synchronized void last()
    {
        System.out.println("A类中的last()方法");
    }
}
class B
{
    synchronized void funB(A a)
    {
        String name=Thread.currentThread().getName();
        System.out.println(name + " 进入 B 类中的");
        try
        {
            Thread.sleep(1000);
        }
        catch(Exception e)
        {
            System.out.println(e.getMessage());
        }
        System.out.println(name + " 调用 A类中的last()方法");
        a.last();
    }
    synchronized void last()
    {
        System.out.println("B类中的last()方法");
    }
}
class DeadLockDemo implements Runnable
{
    A a=new A();
    B b=new B();
    DeadLockDemo()
    {
        // 设置当前线程的名称
        Thread.currentThread().setName("Main -->> Thread");
        new Thread(this).start();
        a.funA(b);
        System.out.println("main线程运行完毕");
    }
    public void run()
    {
        Thread.currentThread().setName("Test -->> Thread");
        b.funB(a);
        System.out.println("其他线程运行完毕");
    }
    public static void main(String[] args)
    {
        new DeadLockDemo();
    }
}
./ch19/���渚�19-17/浠g��19-17.java
class Producer implements Runnable
{
    P q=null;
    public Producer(P q)
    {
        this.q=q;
    }
    public void run()
    {
        int i=0;
        while(true)
        {
            if(i==0)
            {
                q.name="张三";
                q.sex="男";
            }
            else
            {
                q.name="李四";
                q.sex="女";
            }
            i=(i+1)%2;
        }
    }
}
class P
{
    String name="李四";
    String sex="女";
}
class Consumer implements Runnable
{
    P q=null;
    public Consumer(P q)
    {
        this.q=q;
    }
    public void run()
    {
        while(true)
        {
            System.out.println(q.name + " ---->" + q.sex);
        }
    }
}
public class ThreadCommunation
{
    public static void main(String [] args)
    {
        P q=new P();
        new Thread(new Producer(q)).start();
        new Thread(new Consumer(q)).start();
    }
}
./ch19/���渚�19-18/浠g��19-18.java
class Producer implements Runnable
{
    P q=null;
    public Producer(P q)
    {
        this.q=q;
    }
    public void run()
    {
        int i=0;
        while(true)
        {
            if(i==0)
            {
                q.set("张三","男");
            }
            else
            {
                q.set("李四","女");
            }
            i=(i+1)%2;
        }
    }
}
class P
{
    private String name="李四";
    private String sex="女";
    public synchronized void set(String name,String sex)
    {
        this.name = name ;
        this.sex =sex ;
    }
    public synchronized void get()
    {
        System.out.println(this.name + " ---->" + this.sex ) ;
    }
}
class Consumer implements Runnable
{
    P q=null;
    public Consumer(P q)
    {
        this.q=q;
    }
    public void run()
    {
        while(true)
        {
            q.get();
        }
    }
}
public class ThreadCommunation
{
    public static void main(String [] args)
    {
        P q=new P();
        new Thread(new Producer(q)).start();
        new Thread(new Consumer(q)).start();
    }
}
./ch19/���渚�19-19/浠g��19-19.java
class P
{
    private String name="李四";
    private String sex="女";
    boolean bFull = false ;
    public synchronized void set(String name,String sex)
    {
        if(bFull)
        {
            try
            {
                wait() ;    // 后来的线程要等待
            }
            catch(InterruptedException e)
            {}
        }
        this.name = name ;
        try
        {
            Thread.sleep(10);
        }
        catch(Exception e)
        {
            System.out.println(e.getMessage());
        }
        this.sex = sex ;
        bFull = true ;
        notify();                    // 唤醒最先到达的线程
    }
    public synchronized void get()
    {
        if(!bFull)
        {
            try
            {
                wait() ;
            }
            catch(InterruptedException e)
            {}
        }
        System.out.println(name+" ---->"+sex);
        bFull = false ;
        notify();
    }
}
./ch19/���渚�19-2/浠g��19-2.java
public class ThreadDemo_1
{
    public static void main(String args[])
    {
        new TestThread().start();
        // 循环输出
        for(int i=0;i<10;i++)
        {
            System.out.println("main 线程在运行");
        }
    }
}
class TestThread extends Thread
{
    public void run()
    {
        for(int i=0;i<10;i++)
        {
            System.out.println("TestThread 在运行");
        }
    }
}
./ch19/���渚�19-20/浠g��19-20.java
public class ThreadLife
{
    public static void main(String [] args)
    {
        TestThread t=new TestThread();
        new Thread(t).start();
        for(int i=0;i<10; i++)
        {
            if(i == 5)
                t.stopMe();
            System.out.println("Main 线程在运行");
        }
    }
}
class TestThread implements Runnable
{
    private boolean bFlag = true;
    public void stopMe()
    {
        bFlag = false;
    }
    public void run()
    {
        while(bFlag)
        {
            System.out.println(Thread.currentThread().getName()+" 在运行");
        }
    }
}
./ch19/���渚�19-3/浠g��19-3.java
public class ThreadDemo_2
{
    public static void main(String args[])
    {
        TestThread t = new TestThread() ;
        new Thread(t).start();
        // 循环输出
        for(int i=0;i<10;i++)
        {
            System.out.println("main 线程在运行");
        }
    }
}
class TestThread implements Runnable
{
    public void run()
    {
        for(int i=0;i<10;i++)
        {
            System.out.println("TestThread 在运行");
        }
    }
}
./ch19/���渚�19-4/浠g��19-4.java
public class ThreadDemo_3
{
    public static void main(String [] args)
    {
        TestThread t=new TestThread();
    // 一个线程对象只能启动一次
        t.start();
        t.start();
        t.start();
        t.start();
    }
}
class TestThread extends Thread
{
    private int tickets=20;
    public void run()
    {
        while(true)
      {
            if(tickets>0)
        System.out.println(Thread.currentThread().getName()+"出售票"+tickets--);
      }
    }
}
./ch19/���渚�19-5/浠g��19-5.java
public class ThreadDemo_3
{
    public static void main(String [] args)
    {
        // 启动了四个线程,分别执行各自的操作
        new TestThread().start();
        new TestThread().start();
        new TestThread().start();
        new TestThread().start();
    }
}
class TestThread extends Thread
{
    private int tickets=20;
    public void run()
    {
        while(true)
          {
            if(tickets>0)
                System.out.println(Thread.currentThread().getName()
+"出售票"+tickets--);
    }
    }
}
./ch19/���渚�19-6/浠g��19-6.java
public class ThreadDemo_4
{
    public static void main(String [] args)
    {
        TestThread t = new TestThread() ;
        // 启动了四个线程,并实现了资源共享的目的
        new Thread(t).start();
        new Thread(t).start();
        new Thread(t).start();
        new Thread(t).start();
    }
}
class TestThread implements Runnable
{
    private int tickets=20;
    public void run()
    {
        while(true)
     {
            if(tickets>0)
        System.out.println(Thread.currentThread().getName()+"出售票"+tickets--);
     }
    }
}
./ch19/���渚�19-7/浠g��19-7.java
public class GetNameThreadDemo extends Thread
{
    public void run()
    {
        for(int i=0;i<10;i++)
            printMsg();
    }
    public void printMsg()
    {
        // 获得运行此代码的线程的引用
        Thread t = Thread.currentThread();
        String name = t.getName();
        System.out.println("name = "+name);
    }
    public static void main(String[] args)
    {
        GetNameThreadDemo t1 = new GetNameThreadDemo();
        t1.start();
        for(int i=0;i<10;i++)
        {
            t1.printMsg();
        }
    }
}
./ch19/���渚�19-8/浠g��19-8.java
public class SetNameThreadDemo extends Thread
{
    public void run()
    {
        for(int i=0;i<10;i++)
        {
            printMsg();
        }
    }
    public void printMsg()
    {
        // 获得运行此代码的线程的引用
        Thread t = Thread.currentThread();
        String name = t.getName();
        System.out.println("name = "+name);
    }
    public static void main(String args[])
    {
        SetNameThreadDemo tt = new SetNameThreadDemo();
        // 在这里设置线程的名称
        tt.setName("test thread");
        tt.start();
        for(int i=0;i<10;i++)
        {
            tt.printMsg();
        }
    }
}
./ch19/���渚�19-9/浠g��19-9.java
public class StartThreadDemo extends Thread
{
    public void run()
    {
        for(int i=0;i<10;i++)
        {
            printMsg();
        }
    }
    public void printMsg()
    {
        // 获得运行此代码的线程的引用
        Thread t = Thread.currentThread();
        String name = t.getName();
        System.out.println("name = "+name);
    }
    public static void main(String[] args) {
        StartThreadDemo t = new StartThreadDemo();
        t.setName("test Thread");
        System.out.println("调用start()方法之前 , t.isAlive() = "+t.isAlive());
        t.start();
        System.out.println("刚调用start()方法时 , t.isAlive() = "+t.isAlive());
        for(int i=0;i<10;i++)
        {
            t.printMsg();
        }
        // 下面于句的数出结果是不固定的,有时输出false,有时输出true
        System.out.println("main()方法结束时 , t.isAlive() = "+t.isAlive());
    }
}
./ch19/璺����涓����/Xiti_19.java
public class Xiti_19 implements Runnable
{
    public void run()
    {
        try {
            System.out.println("在run()方法中 - 这个线程休眠10秒");
            Thread.sleep(10000);
            System.out.println("在run()方法中 - 继续运行");
        }
        catch (InterruptedException x) {
            System.out.println("在run()方法中 - 中断线程");
            return;
        }
        System.out.println("在run()方法中 - 休眠之后继续完成");
        System.out.println("在run()方法中 - 正常退出");
    }
    public static void main(String[] args)
    {
        Xiti_19 si = new Xiti_19();
        Thread t = new Thread(si);
        t.start();
        try {
            Thread.sleep(1000);
        }
        catch (InterruptedException x) {}
        System.out.println("在main()方法中 - 中断其它线程");
        t.interrupt();
        System.out.println("在main()方法中 - 退出");
    }
}
./ch20/���渚�20-1/浠g��20-1.java
    import java.io.*;
    public class FileDemo
    {
        public static void main(String[] args)
        {
            File f=new File("c:\\1.txt");
            if(f.exists())
                f.delete();
            else
                try
                {
                    f.createNewFile();
                }
                catch(Exception e)
                {
                    System.out.println(e.getMessage());
                }
            // getName()方法,取得文件名
            System.out.println("文件名:"+f.getName());
            // getPath()方法,取得文件路径
            System.out.println("文件路径:"+f.getPath());
            // getAbsolutePath()方法,得到绝对路径名
            System.out.println("绝对路径:"+f.getAbsolutePath());
            // getParent()方法,得到父文件夹名
            System.out.println("父文件夹名称:"+f.getParent());
            // exists(),判断文件是否存在
            System.out.println(f.exists()?"文件存在":"文件不存在");
            // canWrite(),判断文件是否可写
            System.out.println(f.canWrite()?"文件可写":"文件不可写");
            // canRead(),判断文件是否可读
            System.out.println(f.canRead()?"文件可读":"文件不可读");
            /// isDirectory(),判断是否是目录
            System.out.println(f.isDirectory()?"是":"不是"+"目录");
            // isFile(),判断是否是文件
            System.out.println(f.isFile()?"是文件":"不是文件");
            // isAbsolute(),是否是绝对路径名称
            System.out.println(f.isAbsolute()?"是绝对路径":"不是绝对路径");
            // lastModified(),文件最后的修改时间
            System.out.println("文件最后修改时间:"+f.lastModified());
            // length(),文件的长度
            System.out.println("文件大小:"+f.length()+" Bytes");
        }
    }
./ch20/���渚�20-10/浠g��20-10.java
    import java.io.*;
    public class SequenceDemo
    {
        public static void main(String[] args) throws IOException
        {
            // 声明两个文件读入流
            FileInputStream in1 = null, in2 = null;
            // 声明一个序列流
            SequenceInputStream s = null;
            FileOutputStream out = null;

            try
            {
                // 构造两个被读入的文件
                File inputFile1 = new File("c:\\1.txt");
                File inputFile2 = new File("c:\\2.txt");
                // 构造一个输出文件
                File outputFile = new File("c:\\12.txt");

                in1 = new FileInputStream(inputFile1);
                in2 = new FileInputStream(inputFile2);

                // 将两输入流合为一个输入流
                s = new SequenceInputStream(in1, in2);
                out = new FileOutputStream(outputFile);

                int c;
                while ((c = s.read()) != -1)
                    out.write(c);

                in1.close();
                in2.close();
                s.close();
                out.close();
                System.out.println("ok...");
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            finally
            {
                if (in1 != null)
                    try {
                        in1.close();
                    } catch (IOException e) {
                    }
                if (in2 != null)
                    try {
                        in2.close();
                    } catch (IOException e) {
                    }
                if (s != null)
                    try {
                        s.close();
                    } catch (IOException e) {
                    }
                if (out != null)
                    try {
                        out.close();
                    } catch (IOException e) {
                    }
            }
        }
    }
./ch20/���渚�20-11/浠g��20-11.java
     import java.io.*;
       public class BufferDemo
    {
        public static void main(String args[])
        {
            BufferedReader buf = null;
            buf = new BufferedReader(new InputStreamReader(System.in));
            String str = null;
            while (true)
            {
                System.out.print("请输入数字:");
                try
                {
                    str = buf.readLine();
                } catch (IOException e)
                {
                    e.printStackTrace();
                }
                int i = -1;
                try
                {
                    i = Integer.parseInt(str);
                    i++;
                    System.out.println("输入的数字修改后为:" + i);
                    break;
                }
                catch (Exception e)
                {
                    System.out.println("输入的内容不正确,请重新输入!");
                }
            }
        }
    }
./ch20/���渚�20-12/浠g��20-12.java
    import java.io.* ;
    public class EncodingDemo
    {
        public static void main(String args[]) throws Exception
        {
            // 在这里将字符串通过getBytes()方法,编码成GB2312
            byte b[] = "大家一起来学Java语言".getBytes("GB2312") ;
            OutputStream out = new FileOutputStream(new File("c:\\encoding.txt")) ;
            out.write(b) ;
            out.close() ;
        }
    }
./ch20/���渚�20-13/浠g��20-13.java
    public class SetDemo
    {
        public static void main(String args[])
        {
            System.getProperties().put("file.encoding","GB2312") ;
        }
    }
./ch20/���渚�20-14/浠g��20-14.java
    import java.io.* ;
    public class EncodingDemo
    {
        public static void main(String args[]) throws Exception
        {
            // 在这里将字符串通过getBytes()方法,编码成ISO8859-1
            byte b[] = "大家一起来学Java语言".getBytes("ISO8859-1") ;
            OutputStream out = new FileOutputStream(new File("c:\\encoding.txt")) ;
            out.write(b) ;
            out.close() ;
        }
    }
./ch20/���渚�20-15/浠g��20-15.java
    public class GetDemo
    {
        public static void main(String args[])
        {
            // 输出全部环境变量
            System.getProperties().list(System.out);
        }
    }
./ch20/���渚�20-16/浠g��20-16.java
    import java.io.* ;
    public class Person implements Serializable
    {
        private String name ;
        private int age ;
        public Person(String name,int age)
        {
            this.name = name ;
            this.age = age ;
        }
        public String toString()
        {
            return " 姓名:"+this.name+",年龄:"+this.age ;
        }
    };
./ch20/���渚�20-17/浠g��20-17.java
    import java.io.*;
    public class SerializableDemo
    {
        public static void main( String args[] ) throws Exception
        {
            File f = new File("SerializedPerson") ;
            serialize(f);
            deserialize(f);
        }

        // 以下方法为序列化对象方法
        public static void serialize(File f) throws Exception
        {
            OutputStream outputFile = new FileOutputStream(f);
            ObjectOutputStream cout = new ObjectOutputStream(outputFile);
            cout.writeObject(new Person("张三",25));
            cout.close();
        }
        // 以下方法为反序列化对象方法
        public static void deserialize(File f) throws Exception
        {
            InputStream inputFile = new FileInputStream(f);
            ObjectInputStream cin = new ObjectInputStream(inputFile);
            Person p = (Person) cin.readObject();
            System.out.println(p);
        }
    }
./ch20/���渚�20-2/浠g��20-2.java
    import java.io.*;
    public class RandomFileDemo
    {
        public static void main(String [] args) throws Exception
        {
            Employee e1 = new Employee("zhangsan",23);
            Employee e2 = new Employee("lisi",24);
            Employee e3 = new Employee("wangwu",25);
            RandomAccessFile ra=new RandomAccessFile("c:\\employee.txt","rw");
            ra.write(e1.name.getBytes());
            ra.writeInt(e1.age);
            ra.write(e2.name.getBytes());
            ra.writeInt(e2.age);
            ra.write(e3.name.getBytes());
            ra.writeInt(e3.age);
            ra.close();
            RandomAccessFile raf=new RandomAccessFile("c:\\employee.txt","r");
            int len=8;
            raf.skipBytes(12);    // 跳过第一个员工的信息,其姓名8字节,年龄4字节
            System.out.println("第二个员工信息:");
            String str="";
            for(int i=0;i<len;i++)
                str=str+(char)raf.readByte();
            System.out.println("name:"+str);
            System.out.println("age:"+raf.readInt());
            System.out.println("第一个员工的信息:");
            raf.seek(0);        // 将文件指针移动到文件开始位置
            str="";
            for(int i=0;i<len;i++)
                str=str+(char)raf.readByte();
            System.out.println("name:"+str);
            System.out.println("age:"+raf.readInt());
            System.out.println("第三个员工的信息:");
            raf.skipBytes(12);    // 跳过第二个员工信息
            str="" ;
            for(int i=0;i<len;i++)
                str=str+(char)raf.readByte();
            System.out.println("name:"+str.trim());
            System.out.println("age:"+raf.readInt());
            raf.close();
        }
    }
    class Employee
    {
        String name;
        int age;
        final static int LEN=8;
        public Employee(String name,int age)
        {
            if(name.length()>LEN)
            {
                name=name.substring(0,8);
            }
            else
            {
                while(name.length()<LEN)
                    name=name+"\u0000";
            }
            this.name=name;
            this.age=age;
        }
    }
./ch20/���渚�20-3/浠g��20-3.java
    import java.io.*;
    public class StreamDemo
    {
        public static void main(String args[])
        {
            File f = new File("c:\\temp.txt") ;
            OutputStream out = null ;
            try
            {
                out = new FileOutputStream(f) ;
            }
            catch (FileNotFoundException e)
            {
                e.printStackTrace();
            }
            // 将字符串转成字节数组
            byte b[] = "Hello World!!!".getBytes() ;
            try
            {
                // 将byte数组写入到文件之中
                out.write(b) ;
            }
            catch (IOException e1)
            {
                e1.printStackTrace();
            }
            try
            {
                out.close() ;
            }
            catch (IOException e2)
            {
                e2.printStackTrace();
            }

            // 以下为读文件操作
            InputStream in = null ;
            try
            {
                in = new FileInputStream(f) ;
            }
            catch (FileNotFoundException e3)
            {
                e3.printStackTrace();
            }
            // 开辟一个空间用于接收文件读进来的数据
            byte b1[] = new byte[1024] ;
            int i = 0 ;
            try
            {
            // 将b1的引用传递到read()方法之中,同时此方法返回读入数据的个数
                i = in.read(b1) ;
            }
            catch (IOException e4)
            {
                e4.printStackTrace();
            }
            try
            {
                in.close() ;
            }
            catch (IOException e5)
            {
                e5.printStackTrace();
            }
            //将byte数组转换为字符串输出
            System.out.println(new String(b1,0,i)) ;
        }
    }
./ch20/���渚�20-4/浠g��20-4.java
    import java.io.*;
    public class CharDemo
    {
        public static void main(String args[])
        {
            File f = new File("c:\\temp.txt") ;
            Writer out = null ;
            try
            {
                out = new FileWriter(f) ;
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            // 声明一个String类型对象
            String str = "Hello World!!!" ;
            try
            {
                // 将str内容写入到文件之中
                out.write(str) ;
            }
            catch (IOException e1)
            {
                e1.printStackTrace();
            }
            try
            {
                out.close() ;
            }
            catch (IOException e2)
            {
                e2.printStackTrace();
            }

            // 以下为读文件操作
            Reader in = null ;
            try
            {
                in = new FileReader(f) ;
            }
            catch (FileNotFoundException e3)
            {
                e3.printStackTrace();
            }
            // 开辟一个空间用于接收文件读进来的数据
            char c1[] = new char[1024] ;
            int i = 0 ;
            try
            {
            // 将c1的引用传递到read()方法之中,同时此方法返回读入数据的个数
                i = in.read(c1) ;
            }
            catch (IOException e4)
            {
                e4.printStackTrace();
            }
            try
            {
                in.close() ;
            }
            catch (IOException e5)
            {
                e5.printStackTrace();
            }
            //将字符数组转换为字符串输出
            System.out.println(new String(c1,0,i)) ;
        }
    }
./ch20/���渚�20-5/浠g��20-5.java
    import java.io.*;
    public class PipeStreamDemo
    {
        public static void main(String args[])
        {
            try
            {
                Sender sender = new Sender();     // 产生两个线程对象
                Receiver receiver = new Receiver();
                PipedOutputStream out = sender.getOutputStream();    // 写入
                PipedInputStream in = receiver.getInputStream();        // 读出
                out.connect(in);     // 将输出发送到输入
                sender.start();         // 启动线程
                   receiver.start();
            }
            catch(IOException e)
            {
                System.out.println(e.getMessage());
            }
        }
    }
    class Sender extends Thread
    {
        private PipedOutputStream out=new PipedOutputStream();
        public PipedOutputStream getOutputStream()
        {
            return out;
        }
        public void run()
        {
            String s=new String("Receiver,你好!");
            try
            {
                out.write(s.getBytes());        // 写入(发送)
                out.close();
            }
            catch(IOException e)
            {
                System.out.println(e.getMessage());
            }
        }
    }
    class Receiver extends Thread
    {
        private PipedInputStream in=new PipedInputStream();
        public PipedInputStream getInputStream()
        {
            return in;
        }
        public void run()
        {
            String s=null;
            byte [] buf = new byte[1024];
            try
            {
                int len =in.read(buf);         // 读出数据
                  s = new String(buf,0,len);
                System.out.println("收到了以下信息:"+s);
                in.close();
            }
            catch(IOException e)
            {
                System.out.println(e.getMessage());
            }
        }
    }
./ch20/���渚�20-6/浠g��20-6.java
    import java.io.* ;
    public class ByteArrayDemo {
        public static void main(String[] args) throws Exception
        {
            String tmp = "abcdefghijklmnopqrstuvwxyz";
            byte[] src = tmp.getBytes();            // src为转换前的内存块
            ByteArrayInputStream input = new ByteArrayInputStream(src);
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            new ByteArrayDemo().transform(input, output);
            byte[] result = output.toByteArray();    // result为转换后的内存块
            System.out.println(new String(result));
        }
        public void transform(InputStream in, OutputStream out)
        {
            int c = 0;
            try
            {
                while ((c = in.read()) != -1)        // read在读到流的结尾处返回-1
                {
                    int C = (int) Character.toUpperCase((char) c);
                    out.write(C);
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }
./ch20/���渚�20-7/浠g��20-7.java
    import java.io.*;
    public class SystemPrintDemo
    {
        public static void main(String args[])
        {
            PrintWriter out = null;
            // 通过System.out为PrintWriter实例化
            out = new PrintWriter(System.out);
            // 向屏幕上输出
            out. print ("Hello World!");
            out.close();
        }
    }
./ch20/���渚�20-8/浠g��20-8.java
    import java.io.*;
    public class FilePrint
    {
        public static void main(String args[])
        {
            PrintWriter out = null ;
            File f = new File("c:\\temp.txt") ;
            try
            {
                out = new PrintWriter(new FileWriter(f)) ;
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            // 由FileWriter实例化,则向文件中输出
            out. print ("Hello World!"+"\r\n");
            out.close() ;
        }
    }
./ch20/���渚�20-9/浠g��20-9.java
    import java.io.* ;
    public class DataStreamDemo
    {
        public static void main(String[] args) throws IOException
        {
            // 将数据写入某一种载体
            DataOutputStream out = new DataOutputStream(
w FileOutputStream("order.txt"));
            // 价格
            double[] prices = { 18.99, 9.22, 14.22, 5.22, 4.21 };
            // 数目
            int[] units = { 10, 10, 20, 39, 40 };
            // 产品名称
            String[] descs = { "T恤杉", "杯子", "洋娃娃", "大头针", "钥匙链" };

            // 向数据过滤流写入主要类型
            for (int i = 0; i < prices.length; i++)
            {
                // 写入价格,使用tab隔开数据
                out.writeDouble(prices[i]);
                out.writeChar('\t');
                // 写入数目
                out.writeInt(units[i]);
                out.writeChar('\t');
                // 写入产品名称,行尾加入换行符
                out.writeChars(descs[i]);
                out.writeChar('\n');
            }
            out.close();

            // 将数据读出
            DataInputStream in = new DataInputStream(
w FileInputStream("order.txt"));

            double price;
            int unit;
            StringBuffer desc;
            double total = 0.0;

            try
            {
                // 当文本被全部读出以后会抛出EOFException异常,中断循环
                while (true)
                {
                    // 读出价格
                    price = in.readDouble();
                    // 跳过tab
                    in.readChar();
                    // 读出数目
                    unit = in.readInt();
                    // 跳过tab
                    in.readChar();
                    char chr;
                    // 读出产品名称
                    desc = new StringBuffer();

                    while ((chr = in.readChar()) != '\n')
                    {
                        desc.append(chr);
                    }
        System.out.println("定单信息: " + "产品名称:"+desc
                                +",\t数量:+unit+",\t价格:"+price);
                    total = total + unit * price;
                }
            }
            catch (EOFException e)
            {
                System.out.println("\n总共需要:" + total+"元");
            }
            in.close();
        }
    }
./ch20/璺����涓����/Xiti_20.java
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
public class Xiti_20
{
    public static void main(String args[])
    {
        File f = new File("c:\\Xiti_16.txt") ;
        Writer out = null ;
        try
        {
            out = new FileWriter(f) ;
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        String str = "Here is my file." ;
        try
        {
            out.write(str) ;
        }
        catch (IOException e1)
        {
            e1.printStackTrace();
        }
        try
        {
            out.close() ;
        }
        catch (IOException e2)
        {
            e2.printStackTrace();
        }

        Reader in = null ;
        try
        {
            in = new FileReader(f) ;
        }
        catch (FileNotFoundException e3)
        {
            e3.printStackTrace();
        }
        char c1[] = new char[1024] ;
        int i = 0 ;
        try
        {
            i = in.read(c1) ;
        }
        catch (IOException e4)
        {
            e4.printStackTrace();
        }
        try
        {
            in.close() ;
        }
        catch (IOException e5)
        {
            e5.printStackTrace();
        }
        System.out.println(new String(c1,0,i)) ;
    }
}
./ch21/AcceptParam/src/test/AcceptParam.java
package test ;
import java.awt.Graphics;
import java.applet.Applet;
public class AcceptParam extends Applet
{
    String tempString,score;
    public void init()
    {
        // 得到web页中的str参数的值
        tempString = getParameter("str");
        if(tempString.equals("及格"))        // 如果字符串等于"及格"
            score = "60-70";
        else if(tempString.equals("中"))        // 如果字符串等于"中"
            score = "70-80";
        else if(tempString.equals("良"))        // 如果字符串等于"良"
            score = "80-90";
        else if(tempString.equals("优"))        // 如果字符串等于"优"
            score = "90-100";
        else
            score = "0-60" ;
    }
    public void paint(Graphics g)
    {
        g.drawString(score,10,25);       // 输出分数段
    }
}
./ch21/HelloApplet/src/test/HelloApplet.java
package test ;
import java.awt.Graphics;
import java.applet.Applet;
public class HelloApplet extends Applet
{
    public void paint(Graphics g)
    {
        g.drawString("这是我的Java Applet程序!",5,30);   // 输出字符串
    }
}
./ch21/HelloAppletDemo/src/test/HelloAppletDemo.java
package test ;
import java.awt.Graphics;
import java.applet.Applet;
public class HelloAppletDemo extends Applet
{
    String mystring="";
    public void paint(Graphics g)
    {
        g.drawString(mystring,5,30);   // 输出字符串
    }
    public void init()
    {
        mystring=mystring+"正在初始化……";
        repaint();
    }
    public void start()
    {
        mystring=mystring+"正在开始执行程序……";
        repaint();
    }
    public void stop()
    {
        mystring=mystring+"正在停止执行程序……";
        repaint();
    }
    public void destory()
    {
        mystring=mystring+"正在收回资源……";
        repaint();
    }
}
./ch21/璺����涓����/Xiti_21/src/test/Xiti_21.java
package test ;
import java.awt.Graphics;
import java.applet.Applet;
public class Xiti_21 extends Applet
{
    public void paint(Graphics g)
    {
        g.drawString("这是我的Java Applet程序!",5,30);   // 输出字符串
    }
}
./ch22/���渚�22-1/浠g��22-1.java
import java.io.*;
import java.net.*;
public class HelloServer
{
    public static void main(String[] args) throws IOException
    {
        ServerSocket serversocket=null;
        PrintWriter out=null;
        try
        {
            // 在下面实例化了一个服务器端的Socket连接
            serversocket=new ServerSocket(9999);
        }
        catch(IOException e)
        {
            System.err.println("Could not listen on port:9999.");
            System.exit(1);
        }
        Socket clientsocket=null;
        try
        {
            // accept()方法用来监听客户端的连接
            clientsocket=serversocket.accept();
        }
        catch(IOException e)
        {
            System.err.println("Accept failed.");
            System.exit(1);
        }
        out=new PrintWriter(clientsocket.getOutputStream(),true);
        out.println("hello world!");
        clientsocket.close();
        serversocket.close();
    }
}

./ch22/���渚�22-2/浠g��22-2.java
import java.io.*;
import java.net.*;
public class HelloClient
{
    public static void main(String[] args) throws IOException
    {
        Socket hellosocket=null;
        BufferedReader in=null;
        // 下面这段程序,用来将输入输出流与socket关联
        try
        {
            hellosocket=new Socket("localhost",9999);
            in=new BufferedReader(
                        tStreamReader(hellosocket.getInputStream()));
        }
        catch(UnknownHostException e)
        {
            System.err.println("Don't know about host:localhost!");
            System.exit(1);
        }
        catch(IOException e)
        {
            System.err.println("Couldn't get I/O for the connection.");
            System.exit(1);
        }
        System.out.println(in.readLine());
        in.close();
        hellosocket.close();
    }
}

./ch22/���渚�22-3/浠g��22-3.java
import java.io.*;
import java.net.*;
public class EchoServer
{
    public static void main(String[] args) throws IOException
    {
        ServerSocket serverSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;
        try
        {
            // 实例化监听端口
            serverSocket = new ServerSocket(1111);
        }
        catch (IOException e)
        {
            System.err.println("Could not listen on port: 1111.");
            System.exit(1);
        }
        Socket incoming = null;
        while(true)
        {
            incoming = serverSocket.accept();
            out = new PrintWriter(incoming.getOutputStream(), true);
            // 将字节流放入字符流缓冲之中
        in = new BufferedReader(
                new InputStreamReader(incoming.getInputStream()));
            // 提示信息
            out.println("Hello! . . . ");
            out.println("Enter BYE to exit");
            out.flush();
            // 在没有异常的情况下不断循环
               while(true)
               {
                        // 只有当有用户输入数据的时候才返回数据内容
                String str = in.readLine();
                // 当用户连接断掉时会返回空值null
                if(str == null)
                {
                    // 退出循环
                    break;
                }
                else
                {
                        // 对用户输入字串加前缀Echo:,将此信息打印到客户端
                    out.println("Echo: "+str);
                    out.flush();
                        // 退出命令,equalsIgnoreCase()是不区分大小写的比较
                    if(str.trim().equalsIgnoreCase("BYE"))
                      break;
                }
  }
                            // 收尾工作
            out.close();
            in.close();
            incoming.close();
            serverSocket.close();
        }
    }
}

./ch22/���渚�22-4/浠g��22-4.java
import java.io.*;
import java.net.*;
// 客户端程序
public class EchoClient
{
    public static void main(String[] args) throws IOException
    {
        Socket echoSocket = null;
        PrintWriter out = null;
           BufferedReader in = null;
        try
        {
            echoSocket = new Socket ( "localhost", 1111);
            out = new PrintWriter(echoSocket.getOutputStream(), true);
            in = new BufferedReader(
new InputStreamReader(echoSocket.getInputStream()));
        }
        catch (UnknownHostException e)
        {
            System.err.println("Don't know about host: localhost.");
            System.exit(1);
        }
        System.out.println(in.readLine());
        System.out.println(in.readLine());
        BufferedReader stdIn =
new BufferedReader(new InputStreamReader(System.in));
        String userInput;
        // 将客户端Socket输入流输出到标准输出
        while ((userInput = stdIn.readLine()) != null)
        {
            out.println(userInput);
            System.out.println(in.readLine());
        }
        out.close();
        in.close();
        echoSocket.close();
    }
}

./ch22/���渚�22-5/浠g��22-5.java
import java.net.*;
import java.io.*;
public class EchoMultiServerThread extends Thread
{
    private Socket socket = null;
    public EchoMultiServerThread(Socket socket)
    {
        super("EchoMultiServerThread");
        // 声明一个socket对象
        this.socket = socket;
    }
    public void run()
    {
        try
        {
            PrintWriter out = null;
            BufferedReader in = null;
            out = new PrintWriter(socket.getOutputStream(), true);
            in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
            out.println("Hello! . . . ");
            out.println("Enter BYE to exit");
            out.flush();
            while(true)
            {
                String str = in.readLine();
                if(str == null)
                {
                    break;
                }
                else
                {
                    out.println("Echo: "+str);
                    out.flush();
                    if(str.trim().equalsIgnoreCase("BYE"))
                        break;
                }
            }
            out.close();
            in.close();
            socket.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }
}

./ch22/���渚�22-6/浠g��22-6.java
import java.io.*;
import java.net.*;
// 多线程的服务器端程序
public class EchoServerThread
{
    public static void main(String[] args) throws IOException
    {
        // 声明一个serverSocket
        ServerSocket serverSocket = null;
        // 声明一个监听标识
        boolean listening = true;
        try
        {
            serverSocket = new ServerSocket(1111);
        }
        catch (IOException e)
        {
            System.err.println("Could not listen on port: 1111.");
            System.exit(1);
        }
        // 如果处于监听状态则开启一个线程
        while(listening)
        {
            // 实例化一个服务端的socket与请求socket建立连接
            new EchoMultiServerThread(serverSocket.accept()).start();
        }
        // 将serverSocket的关闭操作放在循环外,
        // 只有当监听状态为false时,服务才关闭
        serverSocket.close();
    }
}

./ch22/���渚�22-7/浠g��22-7.java
import java.net.*;
import java.io.*;

public class UdpReceive
{
    public static void main(String[] args)
    {
        DatagramSocket ds = null;
        byte[] buf = new byte[1024];
        DatagramPacket dp = null;
        try {
            ds = new DatagramSocket(9000);
        } catch (SocketException ex) {
        }
        // 创建DatagramPacket时,要求的数据格式是byte型数组
        dp = new DatagramPacket(buf, 1024);
        try {
            ds.receive(dp);
        } catch (IOException ex1) {
        }
        /*
         * 调用public String(byte[] bytes,int offset,int length)构造方法,
         * 将byte型的数组转换成字符串
         */
        String str = new String(dp.getData(), 0, dp.getLength()) + " from "
                + dp.getAddress().getHostAddress() + " : " + dp.getPort();
        System.out.println(str);
        ds.close();
    }
}

./ch22/���渚�22-8/浠g��22-8.java
import java.net.*;
import java.io.*;
public class UdpSend
{
    public static void main(String[] args)
    {
        // 要编写UDP网络程序,首先要用到java.net.DatagramSocket类
        DatagramSocket ds = null;
        DatagramPacket dp = null;
        try {
            ds = new DatagramSocket(3000);
        }
        catch (SocketException ex) {
        }
        String str = "hello world ";
        try {
            dp = new DatagramPacket(str.getBytes(), str.length(), InetAddress
                    .getByName("localhost"), 9000);
            // 调用getByName()方法可以返回一个InetAddress类的实例对象
        } catch (UnknownHostException ex1) {
        }
        try {
            ds.send(dp);
        } catch (IOException ex2) {
        }
        ds.close();
    }
}

./ch22/璺����涓����/Xiti_22/src/Xiti_22_client.java
import java.io.*;
import java.net.*;
// 客户端程序
public class Xiti_22_client
{
    public static void main(String[] args) throws IOException
    {
        Socket echoSocket = null;
        PrintWriter out = null;
           BufferedReader in = null;
        try
        {
            echoSocket = new Socket ( "localhost", 1111);
            out = new PrintWriter(echoSocket.getOutputStream(), true);
            in = new BufferedReader(
new InputStreamReader(echoSocket.getInputStream()));
        }
        catch (UnknownHostException e)
        {
            System.err.println("Don't know about host: localhost.");
            System.exit(1);
        }
        System.out.println(in.readLine());
        System.out.println(in.readLine());
        BufferedReader stdIn =
new BufferedReader(new InputStreamReader(System.in));
        String userInput;
        while ((userInput = stdIn.readLine()) != null)
        {
            out.println(userInput);
            System.out.println(in.readLine());
        }
        out.close();
        in.close();
        echoSocket.close();
    }
}
./ch22/璺����涓����/Xiti_22/src/Xiti_22_server.java
import java.io.*;
// 服务器端
import java.net.*;
public class Xiti_22_server
{
    public static void main(String[] args) throws IOException
    {
        ServerSocket serverSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;
        try
        {
            serverSocket = new ServerSocket(1111);
        }
        catch (IOException e)
        {
            System.err.println("Could not listen on port: 1111.");
            System.exit(1);
        }
        Socket incoming = null;
        while(true)
        {
            incoming = serverSocket.accept();
            out = new PrintWriter(incoming.getOutputStream(), true);
            in = new BufferedReader(
new InputStreamReader(incoming.getInputStream()));
            out.println("Hello! . . . ");
            out.println("Enter BYE to exit");
            out.flush();
               while(true)
               {
                String str = in.readLine();
                if(str == null)
                {
                    break;
                }
                else
                {
                    out.println("客户器端: "+str);
                    out.flush();
                    if(str.trim().equalsIgnoreCase("BYE"))
                      break;
                }
         }
            out.close();
            in.close();
            incoming.close();
            serverSocket.close();
        }
    }
}
./ch23/JDBCproject1.0/wf/network/execdemo01/InputData.java
package wf.network.execdemo01;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class InputData {
    private BufferedReader buf = null;

    public InputData() {
        this.buf = new BufferedReader(new InputStreamReader(System.in));
    }

    public String getString(String info) {
        String str = null;
        System.out.print(info);// 打印提示信息
        try {
            str = this.buf.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return str;
    }

    public int getInt(String info, String err) {
        int temp = 0;
        boolean flag = true;// 定义一个标志位
        while (flag) {
            String str = this.getString(info);
            if (str.matches("\\d+")) {
                temp = Integer.parseInt(str);
                flag = false;// 退出循环
            } else {
                System.out.print(err);
            }
        }
        return temp;
    }

    public float getFloat(String info, String err) {
        float temp = 0.0f;
        boolean flag = true;// 定义一个标志位
        while (flag) {
            String str = this.getString(info);
            if (str.matches("\\d+.?\\d+")) {
                temp = Float.parseFloat(str);
                flag = false;// 退出循环
            } else {
                System.out.print(err);
            }
        }
        return temp;
    }

    public char getChar(String info, String err) {
        char temp = ' ';
        boolean flag = true;// 定义一个标志位
        while (flag) {
            String str = this.getString(info);
            if (str.matches("\\w")) {
                temp = str.charAt(0);
                flag = false;// 退出循环
            } else {
                System.out.print(err);
            }
        }
        return temp;
    }

    public Date getDate(String info, String err) {
        Date temp = null ;
        boolean flag = true;// 定义一个标志位
        while (flag) {
            String str = this.getString(info);
            if (str.matches("\\d{4}-\\d{2}-\\d{2}")) {
                try {
                    temp = new SimpleDateFormat("yyyy-MM-dd").parse(str) ;
                } catch (ParseException e) {
                    System.out.print(err) ;
                }
                flag = false;// 退出循环
            } else {
                System.out.print(err);
            }
        }
        return temp;
    }
}
./ch23/JDBCproject1.0/wf/network/execdemo01/InsertDemo.java
package wf.network.execdemo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class InsertDemo {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "wangfei";
    public static void main(String[] args) throws Exception {
        Connection conn = null; // 表示数据库的连接的对象

        Statement stmt = null; // 表示数据库的更新操作
        InputData input = new InputData() ;

        String name = input.getString("请输入姓名:");

        int age = input.getInt("请输入年龄:", "年龄必须是数字,");

        String date = input.getString("请输入生日:");

        float salary = input.getFloat("请输入工资:", "输入的工资必须是数字,");

        String sql = "INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,'"

                + name + "'," + age + ",TO_DATE('"

                + date + "','yyyy-mm-dd'),"    + salary + ") ";

        System.out.println(sql) ;

        // 1、使用Class类加载驱动程序

        Class.forName(DBDRIVER);

        // 2、连接数据库

        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);

        // 3、Statement接口需要通过Connection接口进行实例化操作

        stmt = conn.createStatement();

        // 执行SQL语句,更新数据库
        stmt.executeUpdate(sql);

        // 4、关闭数据库
        conn.close();
    }
}
./ch23/JDBCproject1.0/wf/network/JDBCproject01/ConnectJDBC.java
package wf.network.JDBCproject01;
import java.sql.Connection;
import java.sql.DriverManager;

public class ConnectJDBC {

    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中

    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "wangfei";
    public static void main(String[] args) throws Exception {
        Connection conn = null; // 表示数据库的连接的对象
        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        System.out.println(conn);
        // 4、关闭数据库
        conn.close();
    }
}
./ch23/JDBCproject1.0/wf/network/prepareddemo01/BatchInsertDemo.java
package wf.network.prepareddemo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class BatchInsertDemo {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "wangfei";
    public static void main(String[] args) throws Exception {
        Connection conn = null; // 表示数据库的连接的对象
        PreparedStatement pstmt = null; // 表示数据库的更新操作
        String sql = "INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,?,?,?,?) ";
        System.out.println(sql) ;
        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        // 3、PreparedStatement接口需要通过Connection接口进行实例化操作
        pstmt = conn.prepareStatement(sql) ;// 使用预处理的方式创建对象
        for(int i=0;i<10;i++){
            pstmt.setString(1, "lxh-" + i);// 第一个?号的内容
            pstmt.setInt(2, 20 + i); // 第二个?号的内容
            pstmt.setDate(3, new java.sql.Date(new java.util.Date().getTime()));
            pstmt.setFloat(4, 900*i);
            pstmt.addBatch() ;    // 增加批处理
        }
        // 执行SQL语句,更新数据库
        int i[] = pstmt.executeBatch() ;
        System.out.println(i.length);
        // 4、关闭数据库
        pstmt.close() ;
        conn.close();
    }
}
./ch23/JDBCproject1.0/wf/network/prepareddemo01/InputData.java
package wf.network.prepareddemo01;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class InputData {
    private BufferedReader buf = null;

    public InputData() {
        this.buf = new BufferedReader(new InputStreamReader(System.in));
    }

    public String getString(String info) {
        String str = null;
        System.out.print(info);// 打印提示信息
        try {
            str = this.buf.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return str;
    }

    public int getInt(String info, String err) {
        int temp = 0;
        boolean flag = true;// 定义一个标志位
        while (flag) {
            String str = this.getString(info);
            if (str.matches("\\d+")) {
                temp = Integer.parseInt(str);
                flag = false;// 退出循环
            } else {
                System.out.print(err);
            }
        }
        return temp;
    }

    public float getFloat(String info, String err) {
        float temp = 0.0f;
        boolean flag = true;// 定义一个标志位
        while (flag) {
            String str = this.getString(info);
            if (str.matches("\\d+.?\\d+")) {
                temp = Float.parseFloat(str);
                flag = false;// 退出循环
            } else {
                System.out.print(err);
            }
        }
        return temp;
    }

    public char getChar(String info, String err) {
        char temp = ' ';
        boolean flag = true;// 定义一个标志位
        while (flag) {
            String str = this.getString(info);
            if (str.matches("\\w")) {
                temp = str.charAt(0);
                flag = false;// 退出循环
            } else {
                System.out.print(err);
            }
        }
        return temp;
    }

    public Date getDate(String info, String err) {
        Date temp = null ;
        boolean flag = true;// 定义一个标志位
        while (flag) {
            String str = this.getString(info);
            if (str.matches("\\d{4}-\\d{2}-\\d{2}")) {
                try {
                    temp = new SimpleDateFormat("yyyy-MM-dd").parse(str) ;
                } catch (ParseException e) {
                    System.out.print(err) ;
                }
                flag = false;// 退出循环
            } else {
                System.out.print(err);
            }
        }
        return temp;
    }
}
./ch23/JDBCproject1.0/wf/network/prepareddemo01/InsertDemo.java
package wf.network.prepareddemo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Date;
public class InsertDemo {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "wangfei";
    public static void main(String[] args) throws Exception {
        Connection conn = null; // 表示数据库的连接的对象
        PreparedStatement pstmt = null; // 表示数据库的更新操作
        InputData input = new InputData() ;
        String name = input.getString("请输入姓名:");
        int age = input.getInt("请输入年龄:", "年龄必须是数字,");
        Date date = input.getDate("请输入生日:","输入的不是日期,");
        float salary = input.getFloat("请输入工资:", "输入的工资必须是数字,");
        String sql = "INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,?,?,?,?) ";
        System.out.println(sql) ;
        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        // 3、PreparedStatement接口需要通过Connection接口进行实例化操作
        pstmt = conn.prepareStatement(sql) ;// 使用预处理的方式创建对象
        pstmt.setString(1, name) ;// 第一个?号的内容
        pstmt.setInt(2, age) ;    // 第二个?号的内容
        pstmt.setDate(3, new java.sql.Date(date.getTime())) ;
        pstmt.setFloat(4,salary) ;
        // 执行SQL语句,更新数据库
        pstmt.executeUpdate();
        // 4、关闭数据库
        pstmt.close() ;
        conn.close();
    }
}

./ch23/JDBCproject1.0/wf/network/prepareddemo01/SelectDemo01.java
package wf.network.prepareddemo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Date;
public class SelectDemo01 {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "wangfei";
    public static void main(String[] args) throws Exception {
        Connection conn = null; // 表示数据库的连接的对象
        PreparedStatement pstmt = null ;    // 表示数据库的更新操作
        ResultSet result = null ;// 表示接收数据库的查询结果
        String sql = "SELECT pid,name,age,birthday,salary FROM person" ;
        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        // 3、PreparedStatement接口需要通过Connection接口进行实例化操作
        pstmt = conn.prepareStatement(sql) ;
        // 执行SQL语句,查询数据库
        result = pstmt.executeQuery() ;
        while(result.next()){// 是否有下一行数据
            int pid = result.getInt(1) ;
            String name = result.getString(2) ;
            int age = result.getInt(3) ;
            Date birthday = result.getDate(4) ;
            float salary = result.getFloat(5) ;
            System.out.print("pid = " + pid + ";") ;
            System.out.print("name = " + name + ";") ;
            System.out.print("age = " + age + ";") ;
            System.out.print("birthday = " + birthday + ";") ;
            System.out.println("salary = " + salary + ";") ;
        }
        // 4、关闭数据库
        result.close() ;
        pstmt.close() ;
        conn.close();
    }
}  

./ch23/JDBCproject1.0/wf/network/prepareddemo01/SelectDemo02.java
package wf.network.prepareddemo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Date;
public class SelectDemo02 {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "wangfei";
    public static void main(String[] args) throws Exception {
        Connection conn = null; // 表示数据库的连接的对象
        PreparedStatement pstmt = null ;    // 表示数据库的更新操作
        ResultSet result = null ;// 表示接收数据库的查询结果
        String keyWord = "" ;
        String sql = "SELECT pid,name,age,birthday,salary FROM person WHERE name LIKE ? OR birthday LIKE ?" ;
        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        // 3、PreparedStatement接口需要通过Connection接口进行实例化操作
        pstmt = conn.prepareStatement(sql) ;
        pstmt.setString(1,"%"+keyWord+"%") ;
        pstmt.setString(2,"%"+keyWord+"%") ;
        // 执行SQL语句,查询数据库
        result = pstmt.executeQuery() ;
        while(result.next()){// 是否有下一行数据
            int pid = result.getInt(1) ;
            String name = result.getString(2) ;
            int age = result.getInt(3) ;
            Date birthday = result.getDate(4) ;
            float salary = result.getFloat(5) ;
            System.out.print("pid = " + pid + ";") ;
            System.out.print("name = " + name + ";") ;
            System.out.print("age = " + age + ";") ;
            System.out.print("birthday = " + birthday + ";") ;
            System.out.println("salary = " + salary + ";") ;
        }
        // 4、关闭数据库
        result.close() ;
        pstmt.close() ;
        conn.close();
    }
}
./ch23/JDBCproject1.0/wf/network/resultsetdemo01/ResultSetDemo01.java
package wf.network.resultsetdemo01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;

public class ResultSetDemo01 {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "wangfei";

    public static void main(String[] args) throws Exception {

        Connection conn = null; // 表示数据库的连接的对象

        Statement stmt = null ;    // 表示数据库的更新操作

        ResultSet result = null;  //表示

        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        // 3、Statement接口需要通过Connection接口进行实例化操作
        stmt = conn.createStatement() ;
        // 执行SQL语句,更新数据库
        result = stmt.executeQuery("SELECT pid,name,age,birthday,salary FROM person");

        while (result.next()){  // 是否有下一行信息

            int pid  = result.getInt("pid") ;
            String name = result.getString("name");
            int age = result.getInt("age");
            Date birthday = result.getDate("birthday");
            float  salary = result.getFloat("salary");
            System.out.print("pid=" + pid+";");
            System.out.print("name=" + name+";");
            System.out.print("age=" + age+";");
            System.out.print("birthday=" + birthday+";");
            System.out.println("salary=" + salary+";");
        }

        result.close();

        stmt.close();

        // 4、关闭数据库
        conn.close();
    }
}
./ch23/JDBCproject1.0/wf/network/resultsetdemo01/ResultSetDemo02.java
package wf.network.resultsetdemo01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;

public class ResultSetDemo02 {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "wangfei";

    public static void main(String[] args) throws Exception {

        Connection conn = null; // 表示数据库的连接的对象

        Statement stmt = null ;    // 表示数据库的更新操作

        ResultSet result = null;  //表示

        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        // 3、Statement接口需要通过Connection接口进行实例化操作
        stmt = conn.createStatement() ;
        // 执行SQL语句,更新数据库
        result = stmt.executeQuery("SELECT pid,name,age,birthday,salary FROM person");

        while(result.next()){// 是否有下一行数据
            int pid = result.getInt(1) ;
            String name = result.getString(2) ;
            int age = result.getInt(3) ;
            Date birthday = result.getDate(4) ;
            float salary = result.getFloat(5) ;
            System.out.print("pid = " + pid + ";") ;
            System.out.print("name = " + name + ";") ;
            System.out.print("age = " + age + ";") ;
            System.out.print("birthday = " + birthday + ";") ;
            System.out.println("salary = " + salary + ";") ;
        }

        result.close();

        stmt.close();

        // 4、关闭数据库
        conn.close();
    }
}
./ch23/JDBCproject1.0/wf/network/trandemo01/TransactionDemo01.java
package wf.network.trandemo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class TransactionDemo01 {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:ORCL";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "wangfei";
    public static void main(String[] args) throws Exception {
        Connection conn = null; // 表示数据库的连接的对象
        Statement stmt = null; // 表示数据库的更新操作
        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        conn.setAutoCommit(false) ;    // 取消自动提交
        // 3、Statement接口需要通过Connection接口进行实例化操作
        stmt = conn.createStatement() ;
        try{
            stmt.addBatch("INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,'张三',30,TO_DATE('1995-02-14','yyyy-mm-dd'),9000.0) ") ;
            stmt.addBatch("INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,'李四',30,TO_DATE('1995-02-14','yyyy-mm-dd'),9000.0) ") ;
            stmt.addBatch("INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,'王'五',30,TO_DATE('1995-02-14','yyyy-mm-dd'),9000.0) ") ;
            stmt.addBatch("INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,'赵六',30,TO_DATE('1995-02-14','yyyy-mm-dd'),9000.0) ") ;
            stmt.addBatch("INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,'孙七',30,TO_DATE('1995-02-14','yyyy-mm-dd'),9000.0) ") ;
            // 执行SQL语句,更新数据库
            int i[] = stmt.executeBatch() ;
            System.out.println(i.length);
            conn.commit() ;// 提交
        }catch(Exception e){
            conn.rollback() ;// 回滚
        }
        // 4、关闭数据库
        stmt.close() ;
        conn.close();
    }
}
./ch23/JDBCproject1.0/wf/network/updatedemo01/StatementDemo01.java
package wf.network.updatedemo01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class StatementDemo01 {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "wangfei";

    public static void main(String[] args) throws Exception {

        Connection conn = null; // 表示数据库的连接的对象

        Statement stmt = null ;    // 表示数据库的更新操作

        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        // 3、Statement接口需要通过Connection接口进行实例化操作
        stmt = conn.createStatement() ;
        // 执行SQL语句,更新数据库
        stmt.executeUpdate("INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,'张三',30,TO_DATE('1995-02-14','yyyy-mm-dd'),9000.0) ") ;
        // 4、关闭数据库
        conn.close();
    }
}
./ch23/JDBCproject1.0/wf/network/updatedemo01/StatementDemo02.java
package wf.network.updatedemo01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class StatementDemo02 {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "wangfei";

    public static void main(String[] args) throws Exception {

        Connection conn = null; // 表示数据库的连接的对象

        Statement stmt = null ;    // 表示数据库的更新操作

        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        stmt = conn.createStatement() ;
        // 执行SQL语句,更新数据库
        stmt.executeUpdate("UPDATE person SET name='李四', age=33,birthday=sysdate,salary=8000.0 WHERE pid=2 ") ;
        // 4、关闭数据库
        conn.close();
    }
}
./ch23/JDBCproject1.0/wf/network/updatedemo01/StatementDemo03.java
package wf.network.updatedemo01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class StatementDemo03 {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "wangfei";

    public static void main(String[] args) throws Exception {

        Connection conn = null; // 表示数据库的连接的对象

        Statement stmt = null ;    // 表示数据库的更新操作

        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        stmt = conn.createStatement() ;
        // 执行SQL语句,更新数据库
        stmt.executeUpdate("DELETE FROM person WHERE pid=4 ") ;
        // 4、关闭数据库
        conn.close();
    }
}
./ch23/���渚�23-10/浠g��23-10.java
package wf.network.prepareddemo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.Date;
public class InsertDemo {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "java";
    public static void main(String[] args) throws Exception {
        Connection conn = null; // 表示数据库的连接的对象
        PreparedStatement pstmt = null; // 表示数据库的更新操作
        InputData input = new InputData() ;
        String name = input.getString("请输入姓名:");
        int age = input.getInt("请输入年龄:", "年龄必须是数字,");
        Date date = input.getDate("请输入生日:","输入的不是日期,");
        float salary = input.getFloat("请输入工资:", "输入的工资必须是数字,");
        String sql = "INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,?,?,?,?) ";
        System.out.println(sql) ;
        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        // 3、PreparedStatement接口需要通过Connection接口进行实例化操作
        pstmt = conn.prepareStatement(sql) ;// 使用预处理的方式创建对象
        pstmt.setString(1, name) ;// 第一个?号的内容
        pstmt.setInt(2, age) ;    // 第二个?号的内容
        pstmt.setDate(3, new java.sql.Date(date.getTime())) ;
        pstmt.setFloat(4,salary) ;
        // 执行SQL语句,更新数据库
        pstmt.executeUpdate();
        // 4、关闭数据库
        pstmt.close() ;
        conn.close();
    }
}

./ch23/���渚�23-11/浠g��23-11.java
package wf.network.prepareddemo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Date;
public class SelectDemo01 {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "java";
    public static void main(String[] args) throws Exception {
        Connection conn = null; // 表示数据库的连接的对象
        PreparedStatement pstmt = null ;    // 表示数据库的更新操作
        ResultSet result = null ;// 表示接收数据库的查询结果
        String sql = "SELECT pid,name,age,birthday,salary FROM person" ;
        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        // 3、PreparedStatement接口需要通过Connection接口进行实例化操作
        pstmt = conn.prepareStatement(sql) ;
        // 执行SQL语句,查询数据库
        result = pstmt.executeQuery() ;
        while(result.next()){// 是否有下一行数据
            int pid = result.getInt(1) ;
            String name = result.getString(2) ;
            int age = result.getInt(3) ;
            Date birthday = result.getDate(4) ;
            float salary = result.getFloat(5) ;
            System.out.print("pid = " + pid + ";") ;
            System.out.print("name = " + name + ";") ;
            System.out.print("age = " + age + ";") ;
            System.out.print("birthday = " + birthday + ";") ;
            System.out.println("salary = " + salary + ";") ;
        }
        // 4、关闭数据库
        result.close() ;
        pstmt.close() ;
        conn.close();
    }
}  

./ch23/���渚�23-12/浠g��23-12.java
package wf.network.prepareddemo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Date;
public class SelectDemo02 {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "java";
    public static void main(String[] args) throws Exception {
        Connection conn = null; // 表示数据库的连接的对象
        PreparedStatement pstmt = null ;    // 表示数据库的更新操作
        ResultSet result = null ;// 表示接收数据库的查询结果
        String keyWord = "" ;
        String sql = "SELECT pid,name,age,birthday,salary FROM person WHERE name LIKE ? OR birthday LIKE ?" ;
        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        // 3、PreparedStatement接口需要通过Connection接口进行实例化操作
        pstmt = conn.prepareStatement(sql) ;
        pstmt.setString(1,"%"+keyWord+"%") ;
        pstmt.setString(2,"%"+keyWord+"%") ;
        // 执行SQL语句,查询数据库
        result = pstmt.executeQuery() ;
        while(result.next()){// 是否有下一行数据
            int pid = result.getInt(1) ;
            String name = result.getString(2) ;
            int age = result.getInt(3) ;
            Date birthday = result.getDate(4) ;
            float salary = result.getFloat(5) ;
            System.out.print("pid = " + pid + ";") ;
            System.out.print("name = " + name + ";") ;
            System.out.print("age = " + age + ";") ;
            System.out.print("birthday = " + birthday + ";") ;
            System.out.println("salary = " + salary + ";") ;
        }
        // 4、关闭数据库
        result.close() ;
        pstmt.close() ;
        conn.close();
    }
}
./ch23/���渚�23-13/浠g��23-13.java
package wf.network.prepareddemo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class BatchInsertDemo {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "java";
    public static void main(String[] args) throws Exception {
        Connection conn = null; // 表示数据库的连接的对象
        PreparedStatement pstmt = null; // 表示数据库的更新操作
        String sql = "INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,?,?,?,?) ";
        System.out.println(sql) ;
        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        // 3、PreparedStatement接口需要通过Connection接口进行实例化操作
        pstmt = conn.prepareStatement(sql) ;// 使用预处理的方式创建对象
        for(int i=0;i<10;i++){
            pstmt.setString(1, "lxh-" + i);// 第一个?号的内容
            pstmt.setInt(2, 20 + i); // 第二个?号的内容
            pstmt.setDate(3, new java.sql.Date(new java.util.Date().getTime()));
            pstmt.setFloat(4, 900*i);
            pstmt.addBatch() ;    // 增加批处理
        }
        // 执行SQL语句,更新数据库
        int i[] = pstmt.executeBatch() ;
        System.out.println(i.length);
        // 4、关闭数据库
        pstmt.close() ;
        conn.close();
    }
}
./ch23/���渚�23-14/浠g��23-14.java
package wf.network.trandemo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class TransactionDemo02 {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:ORCL";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "java";
    public static void main(String[] args) throws Exception {
        Connection conn = null; // 表示数据库的连接的对象
        Statement stmt = null; // 表示数据库的更新操作
        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        conn.setAutoCommit(false) ;    // 取消自动提交
        // 3、Statement接口需要通过Connection接口进行实例化操作
        stmt = conn.createStatement() ;
        try{
            stmt.addBatch("INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,'张三',30,TO_DATE('1995-02-14','yyyy-mm-dd'),9000.0) ") ;
            stmt.addBatch("INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,'李四',30,TO_DATE('1995-02-14','yyyy-mm-dd'),9000.0) ") ;
            stmt.addBatch("INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,'王'五',30,TO_DATE('1995-02-14','yyyy-mm-dd'),9000.0) ") ;
            stmt.addBatch("INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,'赵六',30,TO_DATE('1995-02-14','yyyy-mm-dd'),9000.0) ") ;
            stmt.addBatch("INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,'孙七',30,TO_DATE('1995-02-14','yyyy-mm-dd'),9000.0) ") ;
            // 执行SQL语句,更新数据库
            int i[] = stmt.executeBatch() ;
            System.out.println(i.length);
            conn.commit() ;// 提交
        }catch(Exception e){
            conn.rollback() ;// 回滚
        }
        // 4、关闭数据库
        stmt.close() ;
        conn.close();
    }
}
./ch23/���渚�23-15/浠g��23-15.java
package org.lxh.mysqldemo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.text.SimpleDateFormat;
import java.util.Date;
public class JDBCMySQL {
// 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
// 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
public static final String DBURL = "jdbc:mysql://localhost:3306/orcl";
// 连接数据库的用户名
public static final String DBUSER = "root";
// 连接数据库的密码
public static final String DBPASS = "java";
public static void main(String[] args) throws Exception {
   Connection conn = null;    // 表示数据库的连接的对象
   PreparedStatement pstmt = null;
    // 表示数据库的更新操作
   String name = "张三";
   int age = 30;
   Date date = new SimpleDateFormat("yyyy-MM-dd").parse("1983-02-15");
   float salary = 7000.0f;
   String sql = "INSERT INTO person(name,age,birthday,salary) VALUES
   (?,?,?,?) ";
   System.out.println(sql) ;
   // 1、使用Class类加载驱动程序
   Class.forName(DBDRIVER);
   // 2、连接数据库
   conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
   // 3、PreparedStatement接口需要通过Connection接口进行实例化操作
   pstmt = conn.prepareStatement(sql) ;// 使用预处理的方式创建对象
   pstmt.setString(1, name) ;// 第一个?号的内容
   pstmt.setInt(2, age) ;    // 第二个?号的内容
   pstmt.setDate(3, new java.sql.Date(date.getTime())) ;
   pstmt.setFloat(4,salary) ;
   // 执行SQL语句,更新数据库
   pstmt.executeUpdate();
   // 4、关闭数据库
   pstmt.close() ;
   conn.close();
   }
}
./ch23/���渚�23-2/浠g��23-2.java
package wf.network.JDBCproject01;
import java.sql.Connection;
import java.sql.DriverManager;

public class ConnectJDBC {

    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中

    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "java";
    public static void main(String[] args) throws Exception {
        Connection conn = null; // 表示数据库的连接的对象
        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        System.out.println(conn);
        // 4、关闭数据库
        conn.close();
    }
}
./ch23/���渚�23-3/浠g��23-3.java
package wf.network.updatedemo01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class StatementDemo01 {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "java";

    public static void main(String[] args) throws Exception {

        Connection conn = null; // 表示数据库的连接的对象

        Statement stmt = null ;    // 表示数据库的更新操作

        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        // 3、Statement接口需要通过Connection接口进行实例化操作
        stmt = conn.createStatement() ;
        // 执行SQL语句,更新数据库
        stmt.executeUpdate("INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,'张三',30,TO_DATE('1995-02-14','yyyy-mm-dd'),9000.0) ") ;
        // 4、关闭数据库
        conn.close();
    }
}./ch23/���渚�23-4/浠g��23-4.java
package wf.network.updatedemo01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class StatementDemo02 {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "java";

    public static void main(String[] args) throws Exception {

        Connection conn = null; // 表示数据库的连接的对象

        Statement stmt = null ;    // 表示数据库的更新操作

        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        stmt = conn.createStatement() ;
        // 执行SQL语句,更新数据库
        stmt.executeUpdate("UPDATE person SET name='李四', age=33,birthday=sysdate,salary=8000.0 WHERE pid=1 ") ;
        // 4、关闭数据库
        conn.close();
    }
}
./ch23/���渚�23-5/浠g��23-5.java
package wf.network.updatedemo01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;

public class StatementDemo03 {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "java";

    public static void main(String[] args) throws Exception {

        Connection conn = null; // 表示数据库的连接的对象

        Statement stmt = null ;    // 表示数据库的更新操作

        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        stmt = conn.createStatement() ;
        // 执行SQL语句,更新数据库
        stmt.executeUpdate("DELETE FROM person WHERE pid=4 ") ;
        // 4、关闭数据库
        conn.close();
    }
}./ch23/���渚�23-6/浠g��23-6.java
package wf.network.resultsetdemo01;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Date;

public class ResultSetDemo01 {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "java";

    public static void main(String[] args) throws Exception {

        Connection conn = null; // 表示数据库的连接的对象

        Statement stmt = null ;    // 表示数据库的更新操作

        ResultSet result = null;  //表示

        // 1、使用Class类加载驱动程序
        Class.forName(DBDRIVER);
        // 2、连接数据库
        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);
        // 3、Statement接口需要通过Connection接口进行实例化操作
        stmt = conn.createStatement() ;
        // 执行SQL语句,更新数据库
        result = stmt.executeQuery("SELECT pid,name,age,birthday,salary FROM person");

        while (result.next()){  // 是否有下一行信息

            int pid  = result.getInt("pid") ;
            String name = result.getString("name");
            int age = result.getInt("age");
            Date birthday = result.getDate("birthday");
            float  salary = result.getFloat("salary");
            System.out.print("pid=" + pid+";");
            System.out.print("name=" + name+";");
            System.out.print("age=" + age+";");
            System.out.print("birthday=" + birthday+";");
            System.out.println("salary=" + salary+";");
        }

        result.close();

        stmt.close();

        // 4、关闭数据库
        conn.close();
    }
}
./ch23/���渚�23-8/浠g��23-8.java
package wf.network.execdemo01;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
public class InsertDemo {
    // 驱动程序就是之前在classpath中配置的jdbc的驱动程序的jar包中
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    // 连接地址是由各个数据库生产商单独提供的,所以需要单独记住
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    // 连接数据库的用户名
    public static final String DBUSER = "system";
    // 连接数据库的密码
    public static final String DBPASS = "java";
    public static void main(String[] args) throws Exception {
        Connection conn = null; // 表示数据库的连接的对象

        Statement stmt = null; // 表示数据库的更新操作
        InputData input = new InputData() ;

        String name = input.getString("请输入姓名:");

        int age = input.getInt("请输入年龄:", "年龄必须是数字,");

        String date = input.getString("请输入生日:");

        float salary = input.getFloat("请输入工资:", "输入的工资必须是数字,");

        String sql = "INSERT INTO person(pid,name,age,birthday,salary) VALUES (perseq.nextval,'"

                + name + "'," + age + ",TO_DATE('"

                + date + "','yyyy-mm-dd'),"    + salary + ") ";

        System.out.println(sql) ;

        // 1、使用Class类加载驱动程序

        Class.forName(DBDRIVER);

        // 2、连接数据库

        conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);

        // 3、Statement接口需要通过Connection接口进行实例化操作

        stmt = conn.createStatement();

        // 执行SQL语句,更新数据库
        stmt.executeUpdate(sql);

        // 4、关闭数据库
        conn.close();
    }
}
./ch24/FiveChessProject/org/liky/game/frame/FiveChessFrame.java
package org.liky.game.frame;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class FiveChessFrame extends JFrame implements MouseListener, Runnable {

    // 取得屏幕的宽度
    int width = Toolkit.getDefaultToolkit().getScreenSize().width;
    // 取得屏幕的高度
    int height = Toolkit.getDefaultToolkit().getScreenSize().height;
    // 背景图片
    BufferedImage bgImage = null;
    // 保存棋子的坐标
    int x = 0;
    int y = 0;
    // 保存之前下过的全部棋子的坐标
    // 其中数据内容 0: 表示这个点并没有棋子, 1: 表示这个点是黑子, 2:表示这个点是白子
    int[][] allChess = new int[19][19];
    // 标识当前应该黑棋还是白棋下下一步
    boolean isBlack = true;
    // 标识当前游戏是否可以继续
    boolean canPlay = true;
    // 保存显示的提示信息
    String message = "黑方先行";
    // 保存最多拥有多少时间(秒)
    int maxTime = 0;
    // 做倒计时的线程类
    Thread t = new Thread(this);
    // 保存黑方与白方的剩余时间
    int blackTime = 0;
    int whiteTime = 0;
    // 保存双方剩余时间的显示信息
    String blackMessage = "无限制";
    String whiteMessage = "无限制";

    public FiveChessFrame() {
        // 设置标题
        this.setTitle("五子棋");
        // 设置窗体大小
        this.setSize(500, 500);
        // 设置窗体出现位置
        this.setLocation((width - 500) / 2, (height - 500) / 2);
        // 将窗体设置为大小不可改变
        this.setResizable(false);
        // 将窗体的关闭方式设置为默认关闭后程序结束
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 为窗体加入监听器
        this.addMouseListener(this);
        // 将窗体显示出来
        this.setVisible(true);

        t.start();
        t.suspend();

        String imagePath = "" ;
        try {
            imagePath = System.getProperty("user.dir")+"/bin/image/background.jpg" ;
            bgImage = ImageIO.read(new File(imagePath.replaceAll("\\\\", "/")));
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // 刷新屏幕,防止开始游戏时出现无法显示的情况.
        this.repaint();
    }

    public void paint(Graphics g) {
        // 双缓冲技术防止屏幕闪烁
        BufferedImage bi = new BufferedImage(500, 500,
                BufferedImage.TYPE_INT_RGB);
        Graphics g2 = bi.createGraphics();
        g2.setColor(Color.BLACK);
        // 绘制背景
        g2.drawImage(bgImage, 1, 20, this);
        // 输出标题信息
        g2.setFont(new Font("黑体", Font.BOLD, 20));
        g2.drawString("游戏信息:" + message, 130, 60);
        // 输出时间信息
        g2.setFont(new Font("宋体", 0, 14));
        g2.drawString("黑方时间:" + blackMessage, 30, 470);
        g2.drawString("白方时间:" + whiteMessage, 260, 470);

        // 绘制棋盘
        for (int i = 0; i < 19; i++) {
            g2.drawLine(10, 70 + 20 * i, 370, 70 + 20 * i);
            g2.drawLine(10 + 20 * i, 70, 10 + 20 * i, 430);
        }

        // 标注点位
        g2.fillOval(68, 128, 4, 4);
        g2.fillOval(308, 128, 4, 4);
        g2.fillOval(308, 368, 4, 4);
        g2.fillOval(68, 368, 4, 4);
        g2.fillOval(308, 248, 4, 4);
        g2.fillOval(188, 128, 4, 4);
        g2.fillOval(68, 248, 4, 4);
        g2.fillOval(188, 368, 4, 4);
        g2.fillOval(188, 248, 4, 4);

        /*
         * //绘制棋子 x = (x - 10) / 20 * 20 + 10 ; y = (y - 70) / 20 * 20 + 70 ;
         * //黑子 g.fillOval(x - 7, y - 7, 14, 14); //白子 g.setColor(Color.WHITE) ;
         * g.fillOval(x - 7, y - 7, 14, 14); g.setColor(Color.BLACK) ;
         * g.drawOval(x - 7, y - 7, 14, 14);
         */

        // 绘制全部棋子
        for (int i = 0; i < 19; i++) {
            for (int j = 0; j < 19; j++) {
                if (allChess[i][j] == 1) {
                    // 黑子
                    int tempX = i * 20 + 10;
                    int tempY = j * 20 + 70;
                    g2.fillOval(tempX - 7, tempY - 7, 14, 14);
                }
                if (allChess[i][j] == 2) {
                    // 白子
                    int tempX = i * 20 + 10;
                    int tempY = j * 20 + 70;
                    g2.setColor(Color.WHITE);
                    g2.fillOval(tempX - 7, tempY - 7, 14, 14);
                    g2.setColor(Color.BLACK);
                    g2.drawOval(tempX - 7, tempY - 7, 14, 14);
                }
            }
        }
        g.drawImage(bi, 0, 0, this);
    }

    public void mouseClicked(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    public void mouseEntered(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    public void mouseExited(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    public void mousePressed(MouseEvent e) {
        // TODO Auto-generated method stub
        /*
         * System.out.println("X:"+e.getX()); System.out.println("Y:"+e.getY());
         */
        if (canPlay == true) {
            x = e.getX();
            y = e.getY();
            if (x >= 10 && x <= 370 && y >= 70 && y <= 430) {
                x = (x - 10) / 20;
                y = (y - 70) / 20;
                if (allChess[x][y] == 0) {
                    // 判断当前要下的是什么颜色的棋子
                    if (isBlack == true) {
                        allChess[x][y] = 1;
                        isBlack = false;
                        message = "轮到白方";
                    } else {
                        allChess[x][y] = 2;
                        isBlack = true;
                        message = "轮到黑方";
                    }
                    // 判断这个棋子是否和其他的棋子连成5连,即判断游戏是否结束
                    boolean winFlag = this.checkWin();
                    if (winFlag == true) {
                        JOptionPane.showMessageDialog(this, "游戏结束,"
                                + (allChess[x][y] == 1 ? "黑方" : "白方") + "获胜!");
                        canPlay = false;
                    }
                } else {
                    JOptionPane.showMessageDialog(this, "当前位置已经有棋子,请重新落子!");
                }
                this.repaint();
            }
        }
        /* System.out.println(e.getX() + " -- " + e.getY()); */
        // 点击 开始游戏 按钮
        if (e.getX() >= 400 && e.getX() <= 470 && e.getY() >= 70
                && e.getY() <= 100) {
            int result = JOptionPane.showConfirmDialog(this, "是否重新开始游戏?");
            if (result == 0) {
                // 现在重新开始游戏
                // 重新开始所要做的操作: 1)把棋盘清空,allChess这个数组中全部数据归0.
                // 2) 将 游戏信息: 的显示改回到开始位置
                // 3) 将下一步下棋的改为黑方
                for (int i = 0; i < 19; i++) {
                    for (int j = 0; j < 19; j++) {
                        allChess[i][j] = 0;
                    }
                }
                // 另一种方式 allChess = new int[19][19];
                message = "黑方先行";
                isBlack = true;
                blackTime = maxTime;
                whiteTime = maxTime;
                if (maxTime > 0) {
                    blackMessage = maxTime / 3600 + ":"
                            + (maxTime / 60 - maxTime / 3600 * 60) + ":"
                            + (maxTime - maxTime / 60 * 60);
                    whiteMessage = maxTime / 3600 + ":"
                            + (maxTime / 60 - maxTime / 3600 * 60) + ":"
                            + (maxTime - maxTime / 60 * 60);
                    t.resume();
                } else {
                    blackMessage = "无限制";
                    whiteMessage = "无限制";
                }
                this.canPlay = true;
                this.repaint();

            }
        }
        // 点击 游戏设置 按钮
        if (e.getX() >= 400 && e.getX() <= 470 && e.getY() >= 120
                && e.getY() <= 150) {
            String input = JOptionPane
                    .showInputDialog("请输入游戏的最大时间(单位:分钟),如果输入0,表示没有时间限制:");
            try {
                maxTime = Integer.parseInt(input) * 60;
                if (maxTime < 0) {
                    JOptionPane.showMessageDialog(this, "请输入正确信息,不允许输入负数!");
                }
                if (maxTime == 0) {
                    int result = JOptionPane.showConfirmDialog(this,
                            "设置完成,是否重新开始游戏?");
                    if (result == 0) {
                        for (int i = 0; i < 19; i++) {
                            for (int j = 0; j < 19; j++) {
                                allChess[i][j] = 0;
                            }
                        }
                        // 另一种方式 allChess = new int[19][19];
                        message = "黑方先行";
                        isBlack = true;
                        blackTime = maxTime;
                        whiteTime = maxTime;
                        blackMessage = "无限制";
                        whiteMessage = "无限制";
                        this.canPlay = true;
                        this.repaint();
                    }
                }
                if (maxTime > 0) {
                    int result = JOptionPane.showConfirmDialog(this,
                            "设置完成,是否重新开始游戏?");
                    if (result == 0) {
                        for (int i = 0; i < 19; i++) {
                            for (int j = 0; j < 19; j++) {
                                allChess[i][j] = 0;
                            }
                        }
                        // 另一种方式 allChess = new int[19][19];
                        message = "黑方先行";
                        isBlack = true;
                        blackTime = maxTime;
                        whiteTime = maxTime;
                        blackMessage = maxTime / 3600 + ":"
                                + (maxTime / 60 - maxTime / 3600 * 60) + ":"
                                + (maxTime - maxTime / 60 * 60);
                        whiteMessage = maxTime / 3600 + ":"
                                + (maxTime / 60 - maxTime / 3600 * 60) + ":"
                                + (maxTime - maxTime / 60 * 60);
                        t.resume();
                        this.canPlay = true;
                        this.repaint();
                    }
                }
            } catch (NumberFormatException e1) {
                // TODO Auto-generated catch block
                JOptionPane.showMessageDialog(this, "请正确输入信息!");
            }
        }
        // 点击 游戏说明 按钮
        if (e.getX() >= 400 && e.getX() <= 470 && e.getY() >= 170
                && e.getY() <= 200) {
            JOptionPane.showMessageDialog(this,
                    "这个一个五子棋游戏程序,黑白双方轮流下棋,当某一方连到五子时,游戏结束。");
        }
        // 点击 认输 按钮
        if (e.getX() >= 400 && e.getX() <= 470 && e.getY() >= 270
                && e.getY() <= 300) {
            int result = JOptionPane.showConfirmDialog(this, "是否确认认输?");
            if (result == 0) {
                if (isBlack) {
                    JOptionPane.showMessageDialog(this, "黑方已经认输,游戏结束!");
                } else {
                    JOptionPane.showMessageDialog(this, "白方已经认输,游戏结束!");
                }
                canPlay = false;
            }
        }
        // 点击 关于 按钮
        if (e.getX() >= 400 && e.getX() <= 470 && e.getY() >= 320
                && e.getY() <= 350) {
            JOptionPane.showMessageDialog(this,
                    "本游戏由MLDN制作,有相关问题可以访问www.mldn.cn");
        }
        // 点击 退出 按钮
        if (e.getX() >= 400 && e.getX() <= 470 && e.getY() >= 370
                && e.getY() <= 400) {
            JOptionPane.showMessageDialog(this, "游戏结束");
            System.exit(0);
        }
    }

    public void mouseReleased(MouseEvent e) {
        // TODO Auto-generated method stub

    }

    private boolean checkWin() {
        boolean flag = false;
        // 保存共有相同颜色多少棋子相连
        int count = 1;
        // 判断横向是否有5个棋子相连,特点 纵坐标 是相同, 即allChess[x][y]中y值是相同
        int color = allChess[x][y];
        /*
         * if (color == allChess[x+1][y]) { count++; if (color ==
         * allChess[x+2][y]) { count++; if (color == allChess[x+3][y]) {
         * count++; } } }
         */
        // 通过循环来做棋子相连的判断
        /*
         * int i = 1; while (color == allChess[x + i][y + 0]) { count++; i++; }
         * i = 1; while (color == allChess[x - i][y - 0]) { count++; i++; } if
         * (count >= 5) { flag = true; } // 纵向的判断 int i2 = 1 ; int count2 = 1 ;
         * while (color == allChess[x + 0][y + i2]) { count2++; i2++; } i2 = 1;
         * while (color == allChess[x - 0][y - i2]) { count2++; i2++; } if
         * (count2 >= 5) { flag = true ; } // 斜方向的判断(右上 + 左下) int i3 = 1 ; int
         * count3 = 1 ; while (color == allChess[x + i3][y - i3]) { count3++;
         * i3++; } i3 = 1; while (color == allChess[x - i3][y + i3]) { count3++;
         * i3++; } if (count3 >= 5) { flag = true ; } // 斜方向的判断(右下 + 左上) int i4 =
         * 1 ; int count4 = 1 ; while (color == allChess[x + i4][y + i4]) {
         * count4++; i4++; } i4 = 1; while (color == allChess[x - i4][y - i4]) {
         * count4++; i4++; } if (count4 >= 5) { flag = true ; }
         */

        // 判断横向
        count = this.checkCount(1, 0, color);
        if (count >= 5) {
            flag = true;
        } else {
            // 判断纵向
            count = this.checkCount(0, 1, color);
            if (count >= 5) {
                flag = true;
            } else {
                // 判断右上、左下
                count = this.checkCount(1, -1, color);
                if (count >= 5) {
                    flag = true;
                } else {
                    // 判断右下、左上
                    count = this.checkCount(1, 1, color);
                    if (count >= 5) {
                        flag = true;
                    }
                }
            }
        }

        return flag;
    }

    // 判断棋子连接的数量
    private int checkCount(int xChange, int yChange, int color) {
        int count = 1;
        int tempX = xChange;
        int tempY = yChange;
        while (x + xChange >= 0 && x + xChange <= 18 && y + yChange >= 0
                && y + yChange <= 18
                && color == allChess[x + xChange][y + yChange]) {
            count++;
            if (xChange != 0)
                xChange++;
            if (yChange != 0) {
                if (yChange > 0)
                    yChange++;
                else {
                    yChange--;
                }
            }
        }
        xChange = tempX;
        yChange = tempY;
        while (x - xChange >= 0 && x - xChange <= 18 && y - yChange >= 0
                && y - yChange <= 18
                && color == allChess[x - xChange][y - yChange]) {
            count++;
            if (xChange != 0)
                xChange++;
            if (yChange != 0) {
                if (yChange > 0)
                    yChange++;
                else {
                    yChange--;
                }
            }
        }
        return count;
    }

    public void run() {
        // TODO Auto-generated method stub
        // 判断是否有时间限制
        if (maxTime > 0) {
            while (true) {
                if (isBlack) {
                    blackTime--;
                    if (blackTime == 0) {
                        JOptionPane.showMessageDialog(this, "黑方超时,游戏结束!");
                    }
                } else {
                    whiteTime--;
                    if (whiteTime == 0) {
                        JOptionPane.showMessageDialog(this, "白方超时,游戏结束!");
                    }
                }
                blackMessage = blackTime / 3600 + ":"
                        + (blackTime / 60 - blackTime / 3600 * 60) + ":"
                        + (blackTime - blackTime / 60 * 60);
                whiteMessage = whiteTime / 3600 + ":"
                        + (whiteTime / 60 - whiteTime / 3600 * 60) + ":"
                        + (whiteTime - whiteTime / 60 * 60);
                this.repaint();
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println(blackTime + " -- " + whiteTime);
            }
        }
    }

}
./ch24/FiveChessProject/org/liky/game/test/Test.java
package org.liky.game.test;

import org.liky.game.frame.FiveChessFrame;

public class Test {
    public static void main(String[] args) {
        FiveChessFrame ff = new FiveChessFrame();

    }
}
./ch24/浠g��24-1.java
package org.liky.game;

import javax.swing.JFrame;

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO 自动生成方法存根
        JFrame jf = new JFrame();
        jf.setVisible(true);

    }

}
./ch24/浠g��24-2.java
package org.liky.game;

import javax.swing.JFrame;

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO 自动生成方法存根
        JFrame jf = new JFrame();
        jf.setVisible(true);
        jf.setTitle("五子棋");
        jf.setSize(200,100);
        jf.setLocation(200,100);

    }

}
./ch24/浠g��24-3.java
package org.liky.game;

import javax.swing.JFrame;

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO 自动生成方法存根
        JFrame jf = new JFrame();
        jf.setVisible(true);
        jf.setTitle("五子棋");
        jf.setSize(200,100);
        jf.setLocation(200,100);
        jf.setResizable(false);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }

}
./ch24/浠g��24-4.java
package org.liky.game;

import java.awt.Toolkit;

import javax.swing.JFrame;

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO 自动生成方法存根
        JFrame jf = new JFrame();
        jf.setVisible(true);
        jf.setTitle("五子棋");
        jf.setSize(200,100);
        jf.setLocation(200,100);
        jf.setResizable(false);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        int width = Toolkit.getDefaultToolkit().getScreenSize().width;
        int height = Toolkit.getDefaultToolkit().getScreenSize().height;
        System.out.println("宽度为:"+ width);
        System.out.println("高度为:"+ height);

    }

}
./ch24/浠g��24-5.java
package org.liky.game;

import java.awt.Toolkit;

import javax.swing.JFrame;

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO 自动生成方法存根
        JFrame jf = new JFrame();
        jf.setVisible(true);
        jf.setTitle("五子棋");
        jf.setSize(200,100);
        //jf.setLocation(200,100);
        jf.setResizable(false);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        int width = Toolkit.getDefaultToolkit().getScreenSize().width;
        int height = Toolkit.getDefaultToolkit().getScreenSize().height;
        System.out.println("宽度为:"+ width);
        System.out.println("高度为:"+ height);
        jf.setLocation((width-200)/2,(height-100)/2);
    }

}
./ch24/浠g��24-6.java
package org.liky.game.test;
import org.liky.game.frame.FiveChessFrame;
public class Test {
    public static void main(String[] args) {
        FiveChessFrame ff = new FiveChessFrame();
    }
}
./ch24/浠g��24-7.java
package org.liky.game.frame;
import java.awt.Toolkit;
import javax.swing.JFrame;
public class FiveChessFrame extends JFrame {
//     取得屏幕的宽度
    int width = Toolkit.getDefaultToolkit().getScreenSize().width;
//     取得屏幕的高度
    int height = Toolkit.getDefaultToolkit().getScreenSize().height;
    public FiveChessFrame() {
        // 设置标题
        this.setTitle("五子棋");
        // 设置窗体大小
        this.setSize(500, 500);
        // 设置窗体出现位置
        this.setLocation((width - 500) / 2, (height - 500) / 2);
        // 将窗体设置为大小不可改变
        this.setResizable(false);
        // 将窗体的关闭方式设置为默认关闭后程序结束
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 将窗体显示出来
        this.setVisible(true);
    }
}
./ch24/浠g��24-8.java
package org.liky.game;

import java.awt.Toolkit;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

import org.liky.game.frame.FiveChessFrame;

public class Test {

    public static void main(String[] args) {
        FiveChessFrame ff = new FiveChessFrame();        

        JOptionPane.showMessageDialog(ff, "我的信息");
        int result=JOptionPane.showConfirmDialog(ff,"我的确认信息:现在要开始游戏吗?" );
        if (result == 0){
            JOptionPane.showMessageDialog(ff, "游戏开始");
        }
        if (result == 1){
            JOptionPane.showMessageDialog(ff, "游戏结束");
        }
        if (result == 2){
            JOptionPane.showMessageDialog(ff, "请重新选择");
        }
        String username = JOptionPane.showInputDialog("请输入你的姓名: ");
        if (username != null ){
            System.out.println(username);
            JOptionPane.showMessageDialog(ff,"输入的姓名为: " + username );
        }else {
            JOptionPane.showMessageDialog(ff, "请重新输入你的姓名!");
        }
    } 

}
./ch24/浠g��24-9.java
package org.liky.game.frame;

import java.awt.HeadlessException;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class FiveChessFrame extends JFrame implements MouseListener {

    // 取得屏幕的宽度
    int width = Toolkit.getDefaultToolkit().getScreenSize().width;
    // 取得屏幕的高度
    int height = Toolkit.getDefaultToolkit().getScreenSize().height;
    // 保存棋子的坐标
    int x = 0;
    int y = 0;
    // 保存之前下过的全部棋子的坐标
    // 其中数据内容 0: 表示这个点并没有棋子, 1: 表示这个点是黑子, 2:表示这个点是白子
    int[][] allChess = new int[19][19];
    // 标识当前应该黑棋还是白棋下下一步
    boolean isBlack = true;
    // 标识当前游戏是否可以继续
    boolean canPlay = true;
    // 保存显示的提示信息
    String message = "黑方先行";
    // 保存最多拥有多少时间(秒)
    int maxTime = 0;

    // 保存黑方与白方的剩余时间
    int blackTime = 0;
    int whiteTime = 0;
    // 保存双方剩余时间的显示信息
    String blackMessage = "无限制";
    String whiteMessage = "无限制";
    public FiveChessFrame() throws HeadlessException {
        // 设置标题
        this.setTitle("五子棋");
        // 设置窗体大小
        this.setSize(500, 500);
        // 设置窗体出现位置
        this.setLocation((width - 500) / 2, (height - 500) / 2);
        // 将窗体设置为大小不可改变
        this.setResizable(false);
        // 将窗体的关闭方式设置为默认关闭后程序结束
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // 为窗体加入监听器
        this.addMouseListener(this);
        // 将窗体显示出来
        this.setVisible(true);
    }
    public void mouseClicked(MouseEvent arg0) {
        // TODO 自动生成方法存根
        JOptionPane.showMessageDialog(this,"鼠标单击");
    }
    public void mouseEntered(MouseEvent arg0) {
        // TODO 自动生成方法存根

    }
    public void mouseExited(MouseEvent arg0) {
        // TODO 自动生成方法存根

    }
    public void mousePressed(MouseEvent arg0) {
        // TODO 自动生成方法存根

    }
    public void mouseReleased(MouseEvent arg0) {
        // TODO 自动生成方法存根

    }
}
./ch25/InfoProject/src/org/lxh/info/dao/impl/IPersonDAOImpl.java
package org.lxh.info.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import org.lxh.info.dao.IPersonDAO;
import org.lxh.info.vo.Person;

public class IPersonDAOImpl implements IPersonDAO {
    private Connection conn = null;

    public IPersonDAOImpl(Connection conn) {
        this.conn = conn;
    }

    public boolean doCreate(Person person) throws Exception {
        boolean flag = false;
        PreparedStatement pstmt = null;
        String sql = "INSERT INTO person(pid,name,age,birthday,address)"
                + " VALUES (myseq.nextval,?,?,?,?)";
        try {
            pstmt = this.conn.prepareStatement(sql);
            pstmt.setString(1, person.getName());
            pstmt.setInt(2, person.getAge());
            pstmt.setDate(3, new java.sql.Date(person.getBirthday().getTime()));
            pstmt.setString(4, person.getAddress());
            int len = pstmt.executeUpdate();
            if (len > 0) {
                flag = true;
            }
        } catch (Exception e) {
            throw e;
        } finally {
            try {
                pstmt.close();
            } catch (Exception e) {
                throw e;
            }
        }
        return flag;
    }

    public boolean doDelete(int pid) throws Exception {
        boolean flag = false;
        PreparedStatement pstmt = null;
        String sql = "DELETE FROM person WHERE pid=?";
        try {
            pstmt = this.conn.prepareStatement(sql);
            pstmt.setInt(1, pid);
            int len = pstmt.executeUpdate();
            if (len > 0) {
                flag = true;
            }
        } catch (Exception e) {
            throw e;
        } finally {
            try {
                pstmt.close();
            } catch (Exception e) {
                throw e;
            }
        }
        return flag;
    }

    public boolean doUpdate(Person person) throws Exception {
        boolean flag = false;
        PreparedStatement pstmt = null;
        String sql = "UPDATE person SET name=?,age=?,birthday=?,address=? WHERE pid=?";
        try {
            pstmt = this.conn.prepareStatement(sql);
            pstmt.setString(1, person.getName());
            pstmt.setInt(2, person.getAge());
            pstmt.setDate(3, new java.sql.Date(person.getBirthday().getTime()));
            pstmt.setString(4, person.getAddress());
            pstmt.setInt(5, person.getPid());
            int len = pstmt.executeUpdate();
            if (len > 0) {
                flag = true;
            }
        } catch (Exception e) {
            throw e;
        } finally {
            try {
                pstmt.close();
            } catch (Exception e) {
                throw e;
            }
        }
        return flag;
    }

    public List<Person> findAll(String keyWord) throws Exception {
        List<Person> all = new ArrayList<Person>();
        PreparedStatement pstmt = null;
        String sql = "SELECT pid,name,age,birthday,address FROM person "
                + "WHERE name LIKE ? OR age LIKE ? OR birthday LIKE ? OR address LIKE ?";
        try {
            pstmt = this.conn.prepareStatement(sql);
            pstmt.setString(1, "%" + keyWord + "%"); // 模糊查询
            pstmt.setString(2, "%" + keyWord + "%"); // 模糊查询
            pstmt.setString(3, "%" + keyWord + "%"); // 模糊查询
            pstmt.setString(4, "%" + keyWord + "%"); // 模糊查询
            ResultSet rs = pstmt.executeQuery(); // 执行查询
            Person per = null;
            while (rs.next()) { // 如果有查询的结果,则可以向下执行
                per = new Person();
                per.setPid(rs.getInt(1));
                per.setName(rs.getString(2));
                per.setAge(rs.getInt(3));
                per.setBirthday(rs.getDate(4));
                per.setAddress(rs.getString(5));
                all.add(per); // 向集合中插入内容
            }
        } catch (Exception e) {
            throw e;
        } finally {
            try {
                pstmt.close();
            } catch (Exception e) {
                throw e;
            }
        }
        return all;
    }

    public Person findById(int pid) throws Exception {
        Person per = null;
        PreparedStatement pstmt = null;
        String sql = "SELECT pid,name,age,birthday,address FROM person WHERE pid=?";
        try {
            pstmt = this.conn.prepareStatement(sql);
            pstmt.setInt(1, pid);
            ResultSet rs = pstmt.executeQuery(); // 执行查询
            if (rs.next()) { // 如果有查询的结果,则可以向下执行
                per = new Person();
                per.setPid(rs.getInt(1));
                per.setName(rs.getString(2));
                per.setAge(rs.getInt(3));
                per.setBirthday(rs.getDate(4));
                per.setAddress(rs.getString(5));
            }
        } catch (Exception e) {
            throw e;
        } finally {
            try {
                pstmt.close();
            } catch (Exception e) {
                throw e;
            }
        }
        return per;
    }

}
./ch25/InfoProject/src/org/lxh/info/dao/IPersonDAO.java
package org.lxh.info.dao;

import java.util.List;

import org.lxh.info.vo.Person;

public interface IPersonDAO {
    /**
     * 数据库的增加操作
     * @param person
     * @return
     * @throws Exception
     */
    public boolean doCreate(Person person) throws Exception;
    /**
     * 数据库的修改操作
     * @param person
     * @return
     * @throws Exception
     */
    public boolean doUpdate(Person person) throws Exception;
    /**
     * 数据库的删除操作
     * @param pid
     * @return
     * @throws Exception
     */
    public boolean doDelete(int pid) throws Exception;
    /**
     * 根据ID查询数据库
     * @param pid
     * @return
     * @throws Exception
     */
    public Person findById(int pid) throws Exception;
    /**
     * 查询全部的记录
     * @param keyWord
     * @return
     * @throws Exception
     */
    public List<Person> findAll(String keyWord) throws Exception;
}
./ch25/InfoProject/src/org/lxh/info/dao/proxy/IPersonDAOProxy.java
package org.lxh.info.dao.proxy;

import java.util.List;

import org.lxh.info.dao.IPersonDAO;
import org.lxh.info.dao.impl.IPersonDAOImpl;
import org.lxh.info.dbc.DatabaseConnection;
import org.lxh.info.vo.Person;

public class IPersonDAOProxy implements IPersonDAO {
    private DatabaseConnection dbc = null;
    private IPersonDAO dao = null;

    public IPersonDAOProxy() {
        this.dbc = new DatabaseConnection();
        this.dao = new IPersonDAOImpl(this.dbc.getConnection());
    }

    public boolean doCreate(Person person) throws Exception {
        boolean flag = false;
        try {
            flag = this.dao.doCreate(person);
        } catch (Exception e) {
            throw e;
        } finally {
            this.dbc.close();
        }
        return flag;
    }

    public boolean doDelete(int pid) throws Exception {
        boolean flag = false;
        try {
            flag = this.dao.doDelete(pid);
        } catch (Exception e) {
            throw e;
        } finally {
            this.dbc.close();
        }
        return flag;
    }

    public boolean doUpdate(Person person) throws Exception {
        boolean flag = false;
        try {
            flag = this.dao.doUpdate(person);
        } catch (Exception e) {
            throw e;
        } finally {
            this.dbc.close();
        }
        return flag;
    }

    public List<Person> findAll(String keyWord) throws Exception {
        List<Person> all = null;
        try {
            all = this.dao.findAll(keyWord);
        } catch (Exception e) {
            throw e;
        } finally {
            this.dbc.close();
        }
        return all;
    }

    public Person findById(int pid) throws Exception {
        Person per = null;
        try {
            per = this.dao.findById(pid);
        } catch (Exception e) {
            throw e;
        } finally {
            this.dbc.close();
        }
        return per;
    }

}
./ch25/InfoProject/src/org/lxh/info/dbc/DatabaseConnection.java
package org.lxh.info.dbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DatabaseConnection {
    public static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
    public static final String DBURL = "jdbc:oracle:thin:@localhost:1521:orcl";
    public static final String DBUSER = "system";
    public static final String DBPASSWORD = "root";
    private Connection conn = null;

    public DatabaseConnection() {
        try {
            Class.forName(DBDRIVER);
            this.conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public Connection getConnection() {
        return this.conn;
    }

    public void close() {
        if (this.conn != null) {
            try {
                this.conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
./ch25/InfoProject/src/org/lxh/info/factory/DAOFactory.java
package org.lxh.info.factory;

import org.lxh.info.dao.IPersonDAO;
import org.lxh.info.dao.proxy.IPersonDAOProxy;

public class DAOFactory {
    public static IPersonDAO getIPersonDAOInstance() {
        return new IPersonDAOProxy();
    }
}
./ch25/InfoProject/src/org/lxh/info/menu/Menu.java
package org.lxh.info.menu;

import org.lxh.info.operate.PersonOperate;
import org.lxh.info.util.InputData;

public class Menu {
    public Menu() {
        while (true) {
            this.show();
        }
    }

    public void show() { // 显示菜单
        System.out.println("======== 人员管理系统 =========");
        System.out.println("[1]、增加信息");
        System.out.println("[2]、修改信息");
        System.out.println("[3]、删除信息");
        System.out.println("[4]、查看信息");
        System.out.println("[5]、检索信息");
        System.out.println("[0]、退出系统\n\n\n");
        int ch = new InputData().getInt("请选择:", "选项必须是数字");
        switch (ch) {
        case 0: {
            System.out.println("bye bye.");
            System.exit(1);
        }
        case 1: {
            PersonOperate.insert();
            break;
        }
        case 2: {
            PersonOperate.update();
            break;
        }
        case 3: {
            PersonOperate.delete();
            break;
        }
        case 4: {
            PersonOperate.findall();
            break;
        }
        case 5: {
            PersonOperate.search();
            break;
        }
        default: {
            System.out.println("请选择正确的选项。");
        }
        }
    }
}
./ch25/InfoProject/src/org/lxh/info/operate/PersonOperate.java
package org.lxh.info.operate;

import java.util.Date;
import java.util.Iterator;
import java.util.List;

import org.lxh.info.factory.DAOFactory;
import org.lxh.info.util.InputData;
import org.lxh.info.vo.Person;

public class PersonOperate {
    public static void insert() {
        Person per = new Person();
        InputData input = new InputData();
        String name = input.getString("请输入人员的姓名:");
        int age = input.getInt("请输入人员的年龄:", "年龄必须是数字,");
        Date date = input.getDate("请输入人员的生日:", "输入的日期格式不正确,");
        String address = input.getString("请输入人员的住址:");
        per.setName(name);
        per.setAddress(address);
        per.setAge(age);
        per.setBirthday(date);
        try {
            DAOFactory.getIPersonDAOInstance().doCreate(per);
            System.out.println("人员信息增加成功!");
        } catch (Exception e) {
            System.out.println("人员信息增加失败!");
        }
    }

    public static void update() {
        // 在修改数据之前最好先将数据查询出来
        Person per = null;
        InputData input = new InputData();
        int pid = input.getInt("请输入要修改人员的编号:", "编号必须是数字,");

        try {
            per = DAOFactory.getIPersonDAOInstance().findById(pid);
        } catch (Exception e1) {
        }
        if (per != null) {
            String name = input.getString("请输入新的人员的姓名(原姓名是:" + per.getName()
                    + "):");
            int age = input.getInt("请输入新的人员的年龄(原年龄是:" + per.getAge() + "):",
                    "年龄必须是数字,");
            Date date = input.getDate("请输入新的人员的生日(原生日是:" + per.getBirthday()
                    + "):", "输入的日期格式不正确,");
            String address = input.getString("请输入新的人员的住址(原住址是:"
                    + per.getAddress() + "):");
            per.setName(name);
            per.setAddress(address);
            per.setAge(age);
            per.setBirthday(date);
            try {
                DAOFactory.getIPersonDAOInstance().doUpdate(per);
                System.out.println("人员信息修改成功!");
            } catch (Exception e) {
                System.out.println("人员信息修改失败!");
            }
        } else {
            System.out.println("没有此人员信息。");
        }
    }

    public static void delete() {
        InputData input = new InputData();
        int pid = input.getInt("请输入要修改人员的编号:", "编号必须是数字,");
        try {
            DAOFactory.getIPersonDAOInstance().doDelete(pid);
            System.out.println("人员信息删除成功!");
        } catch (Exception e) {
            System.out.println("人员信息删除失败!");
        }
    }

    public static void findall() {
        List<Person> all = null;
        try {
            all = DAOFactory.getIPersonDAOInstance().findAll("");
        } catch (Exception e) {
            e.printStackTrace() ;
        }
        Iterator<Person> iter = all.iterator();
        while (iter.hasNext()) {
            Person per = iter.next();
            System.out.println(per.getPid() + "," + per.getName() + ","
                    + per.getAge() + "," + per.getBirthday() + ","
                    + per.getAddress());
        }
    }

    public static void search() {
        List<Person> all = null;
        String kw = new InputData().getString("请输入检索的关键字:");
        try {
            all = DAOFactory.getIPersonDAOInstance().findAll(kw);
        } catch (Exception e) {
        }
        Iterator<Person> iter = all.iterator();
        while (iter.hasNext()) {
            Person per = iter.next();
            System.out.println(per.getPid() + "," + per.getName() + ","
                    + per.getAge() + "," + per.getBirthday() + ","
                    + per.getAddress());
        }
    }
}
./ch25/InfoProject/src/org/lxh/info/test/Test.java
package org.lxh.info.test;

import org.lxh.info.menu.Menu;

public class Test {
    public static void main(String[] args) throws Exception {
        new Menu();
    }

}
./ch25/InfoProject/src/org/lxh/info/util/InputData.java
package org.lxh.info.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;

public class InputData {
    private Scanner scan = null; // 输入数据

    public InputData() {
        this.scan = new Scanner(System.in); // 输入数据实例化
    }

    public String getString(String info) {
        String str = null;
        System.out.print(info);
        if (this.scan.hasNext()) {
            str = this.scan.next(); // 接收内容
        }
        return str;
    }

    public int getInt(String info, String errMsg) {
        int temp = 0;
        System.out.print(info);
        if (this.scan.hasNextInt()) {
            temp = this.scan.nextInt(); // 接收内容
        } else {
            System.out.print(errMsg);
        }
        return temp;
    }

    public Date getDate(String info, String errMsg) {
        java.util.Date date = null;
        System.out.print(info);
        if (this.scan.hasNext("\\d{4}-\\d{2}-\\d{2}")) {
            String str = this.scan.next("\\d{4}-\\d{2}-\\d{2}");
            try {
                date = new SimpleDateFormat("yyyy-MM-dd").parse(str);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        } else {
            System.out.print(errMsg);
        }
        return date;
    }
}
./ch25/InfoProject/src/org/lxh/info/vo/Person.java
package org.lxh.info.vo;

import java.util.Date;

public class Person {    // 本类可以很好的映射一个表的数据
    private int pid;
    private String name;
    private int age;
    private Date birthday;
    private String address;

    public Person() {
        super();
    }
    public Person(int pid, String name, int age, Date birthday, String address) {
        super();
        this.pid = pid;
        this.name = name;
        this.age = age;
        this.birthday = birthday;
        this.address = address;
    }
    public int getPid() {
        return pid;
    }
    public void setPid(int pid) {
        this.pid = pid;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }

}