美文网首页
Java核心技术(卷I) 3、用户自定义类

Java核心技术(卷I) 3、用户自定义类

作者: kaiker | 来源:发表于2021-02-14 17:57 被阅读0次

    Java核心技术(卷I)关于类与对象基础 https://www.jianshu.com/p/36ba065d1624

    Employee类

    class Employee
    {
      // 字段
       private String name;
       private double salary;
       private LocalDate hireDay;
    
       // 构造器
       public Employee(String n, double s, int year, int month, int day)
       {
          name = n;
          salary = s;
          hireDay = LocalDate.of(year, month, day);
       }
    
      // 封装的实现,通过get set方法操作字段
       public String getName()
       {
          return name;
       }
    
       public double getSalary()
       {
          return salary;
       }
    
       public LocalDate getHireDay()
       {
          return hireDay;
       }
    
       public void raiseSalary(double byPercent)
       {
          double raise = salary * byPercent / 100;
          salary += raise;
       }
    }
    

    在一个源文件中(xxx.java),只能有一个公共类,但可以有任意数目的非公共类

    构造器

    • 当构造Employee类对象时,构造器会运行,从而将实例字段初始化为所希望的初始字段
    public Employee(String n, double s, int year, int month, int day)
       {
          name = n;
          salary = s;
          hireDay = LocalDate.of(year, month, day);
       }
    
    • 构造器总是结合new运算符调用。不能对一个已经存在的对象调用构造器来达到重新设置实例字段的目的。
    • 构造器与类同名、构造器没有返回值、构造器总是伴随着new操作符一起调用、构造器可以有多个、构造器参数大于等于0
    • 不要在构造器中定义与实例字段同名的局部变量,比如
    public Employee(String n, double s, ...){
      String name = n; // 不对
    }
    

    显示参数与隐式参数

    • 显示参数:byPercent
    • 隐式参数:salary
       public void raiseSalary(double byPercent)
       {
          double raise = salary * byPercent / 100;
          salary += raise;
       }
    

    封装

    • 如果没有封装,私有的name字段一旦通过构造器构造,将无法进行修改。
    • 如果要进行封装,提供一个私有的数据字段、一个公共的字段访问器方法、一个公共的字段更改器方法
    • 带来的好处包括:1.可以改变内部实现 2.更改器方法可以完成错误检查
       public String getName()
       {
          return name;
       }
    
       public double getSalary()
       {
          return salary;
       }
    

    不要编写返回可变对象引用的访问器方法,如需要返回一个可变对象的引用,首先应该对它进行克隆。

    class Employee{
      private Date hireDay;
      public Date getHireDay(){
        return hireDay; // 这个是可以通过Date类的setTime进行修改的
      }
    }
    
    Employee harry = ...;
    Date d = harry.getHireDay();
    d.setTime(); // 这样就把Employee里的内容改了
    
    返回可变数据字段的引用

    私有方法

    • 应当将所有数据字段设置为私有
    • 私有方法添加private实现,只有当前类可以用,别的类不可以调用。

    在类中对构造方法进行实例化 https://www.cnblogs.com/vaejava/articles/6512305.html

    class Single{
      private static Single instance = new Single();
      // 在类中对构造方法进行实例化
      private Single() ; //将构造方法私有化
      public static Single getInstance(){
        return instance ;
      }
      //对insance 对象进行get方法取得
      public void print(){
        System.put.println("Hello world!!");
      }
    }
    
    public class SingleDemo02{
      public static void main(String args[]){
      Single s = null ; //声明对象
      s = Single.getInstance();
      //通过类中的get方法对对象instance简介进行实例化
      s.print();
    }
    }
    

    final字段

    • final字段在构造对象时初始化
    • 构造器执行后,这个字段的值便已经设置,此后不能再修改该字段
    • final关键字只是表示存储在变量中对象引用不会再指示另一个不同的对象,所以如果修饰基本类型和不可变类字段会很有效
    private final StringBuilder evaluations;
    evaluations = new StringBuilder();
    public void giveGoldStar(){
      evaluations.append(LocalDate.now() + "Gold star");  // 这个还是可以变的
    }
    

    相关文章

      网友评论

          本文标题:Java核心技术(卷I) 3、用户自定义类

          本文链接:https://www.haomeiwen.com/subject/iyfjxltx.html