`

core-java学习【一】

    博客分类:
  • Java
阅读更多
import java.util.*;

public class Employee 
{
    //构造器,-------------------------------------------------注意参数的命名规则
    //默认构造器
    public Employee()
    {   
        
    }
    public Employee(String firstName , String lastName , double salary , int year, int month, int day)
    {
        this.firstName = firstName ;//不要在构造器中定义与实例域重名的局部变量,如:String firstName = f ;
        this.lastName = lastName ;
        this.salary = salary ;
        GregorianCalendar calendar = new GregorianCalendar(year,month - 1,day);
        // GregorianCalendar uses 0 for January
        this.hireDay = calendar.getTime() ;
    }
    
    public Employee(String firstName , String lastName , double salary)
    {
        this.firstName = firstName ;
        this.lastName = lastName ;
        this.salary = salary ;
    }
    
    public Employee(double salary)
    {
        this.salary = salary ;
    }
    /*public Employee(double salary)
    {
        //calls Employee(String, String, double)
        this() ;
        //nextId++ ;
    }*/
    
    // 定义方法
    public int getId()
    {
        return id ;
    }
    
    public String getName()
    {
        return firstName+" "+lastName ;
    }
    
    public double getSalary()
    {
        return salary ;
    }
    
    //----------------------------------------------若需返回一个可变数据域的拷贝,应该使用克隆,以免破坏封装性
    public Date getHireDay()
    {
        return (Date)hireDay.clone() ;
    }
    
    //----------------------------------------------关键字this表示隐式参数
    public void raiseSalary(double byPercent)
    {
        double raise = this.salary * byPercent /100 ;
        this.salary += raise ;
    }
    
    // 定义 equals 方法=======================================================================
    public boolean equals(Object otherObject)
    {
        // a quick test to see if the objects are identical
        if(this == otherObject)
            return true ;
        
        // must return false if the explicit parameter is null 
        if(otherObject == null)
            return false ;
        
        //if the classes don't match , they can't be equal
        if(getClass() != otherObject.getClass())
            return false ;
        
        // now we know otherObject is a non-null Employee 
        Employee other = (Employee) otherObject ;
        
        // test whether the fields have idential values
        return firstName.equals(other.firstName)
        && lastName.equals(other.lastName)
        && salary == other.salary
        && hireDay.equals(other.hireDay) ;
    }
    
    // 定义hashCode方法======================================================================
    public int hashCode()
    {
        return 7 * firstName.hashCode()
        + 11 * lastName.hashCode()
        + 13 * new Double(salary).hashCode()
        + 17 * hireDay.hashCode() ;
    }
    
    // 定义 toString 方法=======================================================================
    public String toString()
    {
        return getClass().getName()
        + "[ firstName= " + firstName
        + " , lastName= " + lastName
        + " , salary= " + salary
        + " , hireDay= " + hireDay
        +" ] " ;
    }
      
    //定义 域
    private static int nextId ;
    
    private int id ;
    private String firstName = " ";//实例域初始化
    private String lastName = " ";//实例域初始化
    /*
    private final String firstName ;//String类是一个不可变的类,声明为final类型
    private final String lastName ;//表示对象在构建之后不会再被修饰,即没有setName方法
    */
    private double salary ;
    private Date hireDay ;
    
    //静态初始化块
    static
    {
        Random generator = new Random() ;
        //set nextId to a random number between 0 and 9999
        nextId = generator.nextInt(10000) ;
    }
    
    //对象初始化块
    {
        id = nextId ;
        nextId++ ;
    }
}

 

 

public class Manager extends Employee 
{
    // 定义构造器,通过super 调用超类的构造器
    public Manager(String firstName , String lastName , double salary , int year , int month , int day )
    {
        super(firstName , lastName , salary , year , month , day) ;
        bonus = 0 ;
    }
    
    // 定义子类的getSalary方法,覆盖超类中的getSalary方法
    public double getSalary() 
    {
        double baseSalary = super.getSalary() ;//通过super调用超类的getSalary方法
        return baseSalary + bonus ;
    }
    
    public void setBonus(double bonus)
    {
        this.bonus = bonus ;
    }
    
    // 定义子类Manager对象的equals方法,通过super调用超类的equals方法
    public boolean equals(Object otherObject)
    {
        if(!super.equals(otherObject))
            return false ;
        Manager other = (Manager) otherObject ;
        // super.equals checked that this and other belong to the same class
        return this.bonus == other.bonus ;
    }
    
    // 定义子类的hashCode方法
    public int hashCode()
    {
        return super.hashCode()
        + 19 * new Double(bonus).hashCode() ;
    }
    
    // 定义子类的toString方法
    public String toString()
    {
        return super.toString()
        + "[ bonus= " + bonus
        + " ]" ;
    }
    
    private double bonus ;
}

 

 

 

public class EqualsTest 
{
    public static void main(String[] args) 
    {
        Employee alices1 = new Employee("Alice", "Adams", 75000, 1987, 12, 15) ;
        Employee alices2 = alices1 ;
        Employee alices3 = new Employee("Alice", "Adams", 75000, 1987, 12, 15) ;
        Employee bob = new Employee("Bob", "Brandson", 50000, 1989, 10, 1) ;
        
        System.out.println("alices1 == alices2: " + (alices1 == alices2)) ;
        System.out.println("alices1 == alices3: " + (alices1 == alices3)) ;
        System.out.println("alices1.equals(alices3): " + alices1.equals(alices3)) ;
        System.out.println("alices1.equals(bob): " + alices1.equals(bob)) ;
        
        System.out.println("bob.toString(): " + bob) ;
        
        Manager carl = new Manager("Carl", "Cracker", 80000, 1987, 12, 15) ;
        Manager boss = new Manager("Carl", "Cracker", 80000, 1987, 12, 15) ;
        boss.setBonus(5000) ;
        System.out.println("boss.toString(): " + boss) ;
        System.out.println("carl.equals(boss): " + carl.equals(boss)) ;
        System.out.println("alices1.hashCode(): " + alices1.hashCode()) ;
        System.out.println("alices3.hashCode(): " + alices3.hashCode()) ;
        System.out.println("bob.hashCode(): " + bob.hashCode()) ;
        System.out.println("carl.hashCode(): " + carl.hashCode()) ;
    }
}

 

 

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","Crack",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);//使用for each 循环结构
        
        //print out information about all Employee objects
        for(Employee e : staff)
            System.out.println("name= " + e.getName()
                    +",salary= "+e.getSalary()
                    +",hireDay= "+e.getHireDay());
    }

}

 

 

public class ManagerTest
{
    public static void main(String[] args)
    {
        // constructor a Manager object 
        Manager boss = new Manager("Carl" , "Cracker" , 80000 , 1987 , 12 ,15) ;
        boss.setBonus(5000) ;
        
        Employee[] staff = new Employee[3] ;
        
        // fill the staff array with Manager and Employee objects
        
        staff[0] = boss ; //置换法则,将Manager类对象赋值给Employee类对象
        staff[1] = new Employee("Harry" , "Hacker" , 50000 , 1989 , 10 ,1) ;
        staff[2] = new Employee("Tommy" , "Tester" , 40000 , 1990 , 3 , 15) ;
        
        //print out information about all Employee objects
        for(Employee e : staff)
            System.out.println("name=" +e.getName()
                    + ", salary= "+e.getSalary()) ;//此处的变量e即引用了超类Employee的getSalary方法,又同时引用了子类Manager的getSalary方法,这种现象叫做多态。
        }

}

 

 

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 " , "Crack" , 5000);
        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("Eric" , "Zhang" , 70000);
        Employee b = new Employee("Huiyi" , "Chang" , 50000);
        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());
    }
    
    //Test 1
    public static void tripleValue(double x) //does'nt work
    {
        x = 3 * x ;
        System.out.println("End of Method: x= "+x );
    }
    
    //Test 2
    public static void tripleSalary(Employee x) //works
    {
        x.raiseSalary(200);
        System.out.println("End of Methods: salary= "+x.getSalary());
    }
    
    //Test 3
    public static void swap(Employee x , Employee y) 
    {
        Employee temp = x ;
        x = y ;
        y = temp ;
        System.out.println("End of Methods: x = "+x.getName());
        System.out.println("End of Methods: y = "+y.getName());
    }
}

/*结果如下:
Testing tripleValue:--------------------------------------未发生改变
Before: percent= 10.0
End of Method: x= 30.0
After: percent= 10.0

Testing tripleSalary: ------------------------------------发生改变
Before: salary= 5000.0
End of Methods: salary= 15000.0
After: salary= 15000.0

Testing swap: --------------------------------------------a,b未发生改变,x,y发生改变
Before: a= Eric Zhang
Before: b= Huiyi Chang
End of Methods: x = Huiyi Chang
End of Methods: y = Eric Zhang
After: a= Eric Zhang
After: b= Huiyi Chang
 */

 

import java.util.*;

public class CalendarTest 
{
    public static void main(String[] args) 
    {
        //construct d as current date构造一个日历对象
        GregorianCalendar d = new GregorianCalendar();
        
        //2次调用get方法得到当时的日、月
        int today = d.get(Calendar.DAY_OF_MONTH);
        int month = d.get(Calendar.MONTH);
        
        // set d to start date of the month将d设置为这个月的第一天
        d.set(Calendar.DAY_OF_MONTH,1);
        
        //并且获得第一个月的第一天是星期几
        int weekday = d.get(Calendar.DAY_OF_WEEK);
        
        //print heading
        System.out.println("  Sun  Mon  Tue  Wed  Thu  Fri  Sat ");
        
        // indent first line of calendar
        for(int i = Calendar.SUNDAY; i < weekday; i++)
            System.out.print("         ");
        
        do
        {
            //print day
            int day = d.get(Calendar.DAY_OF_MONTH);
            System.out.printf("%4d", day);
            
            //mark current day with *
            if(day == today)
                System.out.print("*");
            else
                System.out.print("  ");
            
            //start a new line after every Saturday
            if(weekday == Calendar.SATURDAY)
                System.out.println();
            
            //advanced d to the next day
            d.add(Calendar.DAY_OF_MONTH,1);
            weekday = d.get(Calendar.DAY_OF_WEEK);
        }
        while (d.get(Calendar.MONTH) == month);
        // the loop exits when d is day 1 of the the next month
        
        //print final end of line if necessary
        if (weekday != Calendar.SUNDAY)
            System.out.println();
    }
    
}

 

 

 

分享到:
评论
1 楼 csdn_zuoqiang 2010-07-18  
100以内的质数(素数):2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97 (共25个)、
在计算hashCode的时候用得着

相关推荐

    encog-java-core-master.zip_Encog_encog java_encog-java

    通过以上分析,我们可以看到,encog-java-core-master.zip文件提供了完整的Encog Java核心库源代码,无论是对机器学习理论的研究,还是实际应用开发,都是宝贵的资源。通过学习和使用这些代码,开发者可以深入了解...

    aws-java-sdk-1.2.12下载

    AWS Java SDK 1.2.12 是一个用于与亚马逊Web服务(Amazon Web Services, AWS)进行交互的软件开发工具包,特别适用于Java开发者。这个版本的SDK包含了多个示例项目,可以帮助开发者深入理解如何利用AWS的各项服务。...

    aws-java-sdk-core-1.11.46.zip

    【标题】"AWS Java SDK Core 1.11.46与ScalaTest+Play的集成" 在Java开发中,Amazon Web Services(AWS)提供了一系列的SDK,使得开发者能够轻松地与AWS服务进行交互。其中,`aws-java-sdk-core-1.11.46.zip`是AWS ...

    core-Java-volume1--example-code.rar_core java 1 code

    《Java核心技术第一卷》是Java开发者必读的经典之作,它深入浅出地讲解了Java语言的基础和核心概念。这个压缩包文件"core-Java-volume1--example-code.rar"包含了书中所有卷一的示例代码,为读者提供了实践编程概念...

    core-java电子书

    《Core Java电子书》是一本深入探讨Java核心技术的权威指南,涵盖了从基础知识到高级特性的全方位内容。这本书的英文版提供了PDF和CHM两种格式,方便不同用户的需求。PDF格式通常便于在线阅读或打印,而CHM...

    Core-Java-8th-Edition.rar_core java II

    《Core Java II》是Java开发领域的一本经典著作,尤其对于深入理解Java的高级特性具有重要价值。本书的第八版,即"Core Java 8th Edition",专注于讲解Java的最新版本,即Java 8的高级特性。在这个压缩包中,包含的...

    java--corejava学习黄金代码

    要想学习java corejava是java之旅的最重要的入门知识,本人在学习corejava中练习过的最重量级的代码! 希望对新手有所帮助!

    javamelody-javamelody-core-src-1.68.1.zip

    从标题“javamelody-javamelody-core-src-1.68.1.zip”可以看出,这包含的是JavaMelody核心组件1.68.1版本的源代码。这对于开发者来说是一个宝贵的资源,可以深入理解其内部工作原理,进行定制化开发或者调试。 源...

    corejava学习笔记

    Java是一种广泛使用的面向对象的编程语言,其基础知识构成了"Core Java"的学习内容。在学习Java时,遵循"多花时间、多动手、多问题"的原则至关重要,因为理论理解与实践操作相结合能更好地掌握知识。 1. **Java语法...

    Core-Java-2.-Volume-II.rar_Core Java Volume II_core java II_core

    《Core Java 2 Volume II》是Java开发领域中一本经典的参考书籍,主要针对有经验的Java程序员,深入探讨了Java的高级特性和功能。这本书的第8版,即"Advanced Features"部分,提供了关于Java技术的详尽指南,涵盖了...

    aws-java-sdk-1.6.7.zip

    AWS Java SDK 1.6.7 是亚马逊网络服务(Amazon Web Services)提供的Java开发工具包的一个版本,主要用于帮助Java开发者轻松地与AWS的各种云服务进行交互。这个版本1.6.7是AWS SDK for Java历史上的一个里程碑,包含...

    达内 core-java.ppt

    学习Core Java是成为一名合格的Java开发者的基础。 在Java开发中,JDK(Java Development Kit)是必不可少的工具包,它包含了Java编译器、解释器、JRE(Java Runtime Environment)以及一系列的开发工具,如javadoc...

    CoreJava课程学习资料--Java核心技术(第8版)

    《Java核心技术》是Java开发人员必读的经典教材,尤其对于初学者和希望深入理解...通过学习这两卷内容,开发者不仅可以掌握Java编程的基础,还能进一步了解和运用Java的高级特性,为成为专业的Java开发者奠定坚实基础。

    opencv-java460-windows-64

    OpenCV(开源计算机视觉库)是一个强大的跨平台计算机视觉库,它包含了大量的图像处理和计算机视觉算法,广泛应用于机器学习、深度学习、图像分析、人脸识别等领域。"opencv-java460-windows-64" 是OpenCV的一个特定...

    zxing core-3.3.3.jar core-3.3.3-javadoc.jar core-3.3.3-sources.jar

    "core-3.3.3-sources.jar"提供了ZXing核心库的源代码,对于开发者来说,这是一个宝贵的资源,可以深入学习ZXing的内部实现,理解其工作原理,甚至可以根据需求进行自定义修改或扩展。 标签中的"core-3.3.3.j"、...

    grpc-java-1.9.0.zip_grpc-java 1.9.0源码

    总之,`grpc-java-1.9.0.zip` 包含了 GRPC 在 Java 平台上的所有源代码,是学习和研究 GRPC 内部实现的宝贵资源。通过深入研究源码,开发者可以更好地掌握 GRPC 的工作原理,从而在微服务架构中更有效地使用这一强大...

    Core-Java-1.-Volume-I---Fundamentals.rar_Fundamentals

    Volume I - Fundamentals》是一本系统学习Java编程的优秀教程,它不仅介绍了Java的基本语法,还深入探讨了面向对象编程的核心概念,为读者构建坚实的Java编程基础。通过阅读和实践书中的例子,读者将能够熟练掌握...

    JDK17-java-core-libraries-developer-guide.pdf

    《JDK17-java-core-libraries-developer-guide》是一份针对Java开发者的指南,主要涵盖了Java标准版(Java SE)17的核心库。这个版本的发布号为F40864-03,发布时间为2022年10月。这份文档由Oracle公司及其关联公司...

    gst1-java-core:GStreamer 1.x的Java绑定

    gst1-java-core是一组Java绑定。 GStreamer是一个用C语言编写的开源,基于管道的多媒体框架。它允许程序员在应用程序内部创建各种媒体处理管道,从简单的媒体播放到编码,实时流式传输,分析,机器学习, WebRTC等...

    JDK14-java-core-libraries-developer-guide.pdf

    Java 语言是一种面向对象的编程语言,具有以下特点: * 简洁:Java 语言的语法简洁易懂,易于学习和使用。 * 面向对象:Java 语言支持面向对象编程,提供了类、对象、继承、多态等概念。 * 平台独立:Java 语言具有...

Global site tag (gtag.js) - Google Analytics