corejava[读书笔记]第四章

来源:互联网 发布:平面构成 知乎 编辑:程序博客网 时间:2024/05/16 05:42

例4-2

import java.util.*;/** * This program tests the Employee class. * @version 1.11 2004-02-19 * @author Cay Horstmann */public class EmployeeTest{   public static void main(String[] args)   {      // fill the staff array with three Employee objects      Employee[] staff = new Employee[3];      staff[0] = new Employee("Carl Cracker", 75000, 1987, 12, 15);      staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);      staff[2] = new Employee("Tony Tester", 40000, 1990, 3, 15);      // raise everyone's salary by 5%      for (Employee e : staff)         e.raiseSalary(5);      // print out information about all Employee objects      for (Employee e : staff)         System.out.println("name=" + e.getName() + ",salary=" + e.getSalary() + ",hireDay="               + e.getHireDay());   }}class Employee{   public Employee(String n, double s, int year, int month, int day)   {      name = n;      salary = s;            //month-1 为什么?      GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);      // GregorianCalendar uses 0 for January      hireDay = calendar.getTime();   }   public String getName()   {      return name;   }   public double getSalary()   {      return salary;   }   public Date getHireDay()   {      return hireDay;   }   public void raiseSalary(double byPercent)   {      double raise = salary * byPercent / 100;      salary += raise;   }   private String name;   private double salary;   private Date hireDay;}
执行结果:

    name=Carl Cracker,salary=78750.0,hireDay=Tue Dec 15 00:00:00 CST 1987
   name=Harry Hacker,salary=52500.0,hireDay=Sun Oct 01 00:00:00 CST 1989
   name=Tony Tester,salary=42000.0,hireDay=Thu Mar 15 00:00:00 CST 1990

 

例4-3

package com.itquanta;/** * This program demonstrates static methods. * @version 1.01 2004-02-19 * @author Cay Horstmann */public class StaticTest{   public static void main(String[] args)   {      // fill the staff array with three Employee objects      Employee[] staff = new Employee[3];      staff[0] = new Employee("Tom", 40000);      staff[1] = new Employee("Dick", 60000);      staff[2] = new Employee("Harry", 65000);      // print out information about all Employee objects      for (Employee e : staff)      {         e.setId();         System.out.println("name=" + e.getName() + ",id=" + e.getId() + ",salary="               + e.getSalary());      }      int n = Employee.getNextId(); // calls static method      System.out.println("Next available id=" + n);   }}class Employee{   public Employee(String n, double s)   {      name = n;      salary = s;      id = 0;   }   public String getName()   {      return name;   }   public double getSalary()   {      return salary;   }   public int getId()   {      return id;   }   public void setId()   {      id = nextId; // set id to next available id      nextId++;   }   public static int getNextId()   {      return nextId; // returns static field   }   public static void main(String[] args) // unit test   {      Employee e = new Employee("Harry", 50000);      System.out.println(e.getName() + " " + e.getSalary());   }   private String name;   private double salary;   private int id;   private static int nextId = 1;}

执行结果:

name=Tom,id=1,salary=40000.0
name=Dick,id=2,salary=60000.0
name=Harry,id=3,salary=65000.0
Next available id=4

例4-4

package com.itquanta;/** * This program demonstrates parameter passing in Java. * @version 1.00 2000-01-27 * @author Cay Horstmann */public class ParamTest{   public static void main(String[] args)   {      /*       * Test 1: Methods can't modify numeric parameters       */      System.out.println("Testing tripleValue:");      double percent = 10;      System.out.println("Before: percent=" + percent);      tripleValue(percent);      System.out.println("After: percent=" + percent);      /*       * Test 2: Methods can change the state of object parameters       */      System.out.println("\nTesting tripleSalary:");      Employee harry = new Employee("Harry", 50000);      System.out.println("Before: salary=" + harry.getSalary());      tripleSalary(harry);      System.out.println("After: salary=" + harry.getSalary());      /*       * Test 3: Methods can't attach new objects to object parameters       */      System.out.println("\nTesting swap:");      Employee a = new Employee("Alice", 70000);      Employee b = new Employee("Bob", 60000);      System.out.println("Before: a=" + a.getName());      System.out.println("Before: b=" + b.getName());      swap(a, b);      System.out.println("After: a=" + a.getName());      System.out.println("After: b=" + b.getName());   }   public static void tripleValue(double x) // doesn't work   {      x = 3 * x;      System.out.println("End of method: x=" + x);   }   public static void tripleSalary(Employee x) // works   {      x.raiseSalary(200);      System.out.println("End of method: salary=" + x.getSalary());   }   public static void swap(Employee x, Employee y)   {      Employee temp = x;      x = y;      y = temp;      System.out.println("End of method: x=" + x.getName());      System.out.println("End of method: y=" + y.getName());   }}class Employee // simplified Employee class{   public Employee(String n, double s)   {      name = n;      salary = s;   }   public String getName()   {      return name;   }   public double getSalary()   {      return salary;   }   public void raiseSalary(double byPercent)   {      double raise = salary * byPercent / 100;      salary += raise;   }   private String name;   private double salary;}

执行结果:

Testing tripleValue:
Before: percent=10.0
End of method: x=30.0
After: percent=10.0

Testing tripleSalary:
Before: salary=50000.0
End of method: salary=150000.0
After: salary=150000.0

Testing swap:
Before: a=Alice
Before: b=Bob
End of method: x=Bob
End of method: y=Alice
After: a=Alice
After: b=Bob

例4-5

package com.itquanta;import java.util.Random;/** * This program demonstrates object construction. *  * @version 1.01 2004-02-19 * @author Cay Horstmann */public class ConstructorTest {public static void main(String[] args) {// fill the staff array with three Employee objectsEmployee[] staff = new Employee[3];staff[0] = new Employee("Harry", 40000);staff[1] = new Employee(60000);staff[2] = new Employee();// print out information about all Employee objectsfor (Employee e : staff)System.out.println("name=" + e.getName() + ",id=" + e.getId()+ ",salary=" + e.getSalary());}}class Employee {// three overloaded constructorspublic Employee(String n, double s) {name = n;salary = s;}public Employee(double s) {// calls the Employee(String, double) constructorthis("Employee #" + nextId, s);}// the default constructorpublic Employee() {// name initialized to ""--see below// salary not explicitly set--initialized to 0// id initialized in initialization block}public String getName() {return name;}public double getSalary() {return salary;}public int getId() {return id;}private static int nextId;private int id;private String name = ""; // instance field initializationprivate double salary;// static initialization blockstatic {Random generator = new Random();// set nextId to a random number between 0 and 9999nextId = generator.nextInt(10000);}// object initialization block{id = nextId;nextId++;}}

运行结果:

name=Harry,id=8638,salary=40000.0
name=Employee #8639,id=8639,salary=60000.0
name=,id=8640,salary=0.0

例4-6

package com.itquanta;import com.horstmann.corejava.Employee;// the Employee class is defined in that packageimport static java.lang.System.*;/** * This program demonstrates the use of packages. * @author cay * @version 1.11 2004-02-19 * @author Cay Horstmann */public class PackageTest{   public static void main(String[] args)   {      // because of the import statement, we don't have to use com.horstmann.corejava.Employee here      Employee harry = new Employee("Harry Hacker", 50000, 1989, 10, 1);      harry.raiseSalary(5);      // because of the static import statement, we don't have to use System.out here      out.println("name=" + harry.getName() + ",salary=" + harry.getSalary());   }}


例4-7

package com.horstmann.corejava;// the classes in this file are part of this packageimport java.util.*;// import statements come after the package statement/** * @version 1.10 1999-12-18 * @author Cay Horstmann */public class Employee{   public Employee(String n, double s, int year, int month, int day)   {      name = n;      salary = s;      GregorianCalendar calendar = new GregorianCalendar(year, month - 1, day);      // GregorianCalendar uses 0 for January      hireDay = calendar.getTime();   }   public String getName()   {      return name;   }   public double getSalary()   {      return salary;   }   public Date getHireDay()   {      return hireDay;   }   public void raiseSalary(double byPercent)   {      double raise = salary * byPercent / 100;      salary += raise;   }   private String name;   private double salary;   private Date hireDay;}

执行结果:

name=Harry Hacker,salary=52500.0

第四章所有代码完。




 


原创粉丝点击