核心技术(卷一)02、第4章-对象与类

对象与类

构造对象的模板或蓝图

  • 封装(数据隐藏)

  • 实例域

    对象中的数据

  • 方法

    操纵数据的过程

  1. 对象
  1. 类之间的关系
  • 依赖(uses-a)

    一个类的方法操纵另一个类的对象

  • 聚合(has-a)

    一个对象包含另一个对象

  • 继承(is -a)

  1. 对象与对象变量

    对象与对象变量的关系是:对象变量引用了一个对象。在Java中,任何对象变量的值都是对存储在另一个地方的一个对象的引用。由此可见,new操作符的返回值是新创建对象的引用。

  2. 更改器方法和访问器方法

    对实例域做出修改的方法称为更改器方法

    仅访问实例域不修改实例域的方法称为访问器方法

  3. 用户自定义类

    在一个源文件中,只能有一个公有类,可以有多个非公有类。

  4. 隐式参数与显式参数

    objectName.methodName(params);

    隐式参数:objectName(方法名前的对象名称)。在每个方法中,关键字this表示隐式参数

    显式参数:params(方法名后括号里的参数)

  5. 私有方法

    一般方法都是公有的,但是在一个类中,可能将一个计算代码划分成若干个独立的辅助方法,这些方法不应该成为公有接口的一部分,最好将这部分方法设计为私有的。

    私有方法可以很方便的别删除,因为除了本身类的方法依赖于它外,其它类不会使用这些私有方法。

  6. final实例域

    构建对象时,必须对final实例域进行初始化。

  7. 静态域

    static修饰的域。也被称为类域,每个类中,静态域的名称是唯一的。

    类的所有实例共享该类的静态域

    静态域可以直接通过ClassName.fieldName(类名.域名)访问;没有被static修饰的域,只能通过类的对象来访问。

  8. 静态常量

    static final修饰的域。

  9. 静态方法

    static修饰的方法,不能向对象实施操作的方法,正因不能操作对象,所以静态方法无法访问实例域,但是可以访问自身类中的静态域。

    下列两种情况下使用静态方法:

    • 一个方法不需要访问对象状态,其所需参数全部通过显示参数提供

    • 一个方法只需要访问类的静态域

  10. 工厂方法

    静态方法的一种常见的用途。类使用工厂方法产生不同风格的对象。

    使用工厂方法是因为构造器无法做到以下两单:

    • 无法命名构造器。构造器名称需要与类名相同,无法通过不同的名称来构造两个实例。
    • 当使用构造器时,无法改变所构造的对象类型。使用工厂方法,可以返回该类的不同子类实例。
  11. main方法

    main方法是一个静态方法,不需要通过对象来调用。所以程序通过main方法来创建程序所需的对象

  12. 方法参数

    按值调用: 方法接收的是调用者提供的

    按引用调用: 方法接收的是调用者提供的变量地址

    java采用按值调用

    因此:

    1. 一个方法不能修改一个基本数据类型的参数(即数值型和布尔型)【只有为基本数据类型参数赋值方法返回值】;

    2. 一个方法可以改变一个对象参数的状态。【调用者调用方法,传给方法的对象参数是对象的引用,方法复制对象的引用,并使用新的对象参数对对象进行操作】

    3. 一个方法不能让对象参数引用新的对象。【(同1)只能:方法返回新对象,调用者对对象参数重新赋值。】

  13. 对象构造

    重载,重载解析

    在构造器中,使用this(params1,params2)来调用另一个构造函数

  14. 默认域初始化

    域:属于类的参数

    域应该在对象的构造方法中进行初始化,如果在构造器中没有显式的对域进行赋值,那么就会自动地赋予默认值(数值为0,布尔为false,对象为null)

  15. 初始化块

    对象初始化块

    class Employee {   
      private static int nextId;   
      private int id;   
      private String name;   
      private double salary;   
      //  对象初始化块
      {  
        id = nextId;      
        nextId++;   
      }   
      public Employee(String n, double s){      
        name = n;      
        salary = s;   
      }   
      public Employee(){      
        name = "";      
        salary = 0;   
      }   . . .
    }
    

    初始化块会在构造类的对象时自动执行。

    建议将初始化块放在域定义之后

    静态初始化块

    对静态域进行初始化

    1. private static int nextId = 1

    2. static
      {   
        Random generator = new Random();   
        nextId = generator.nextInt(10000);
      }
      
  16. 使用包的主要原因是确保类名的唯一性

  17. 类的导入

    一个类可以使用所属包的所有类和其它包的公共类

    通过import导入一个包或者特定的类

    import java.util.*;//导入java.util包的所有类
    
    import java.sql.Date;//导入java.sql包的Date类
    

    只能用星号导入一个包

  18. 静态导入

    使用import static来导入一个类的静态方法和静态域

  19. 将类放入包中

    将包名放在源文件的开头,定义类的代码之前

    package xxx.xxx.xxx;

    如果没有在源文件中放置package语句,这个源文件中的类就被放置在默认包中,默认包是一个没有名字的包。

    将包中的文件放在与完整的包名所匹配的子目录中。

  20. 包的作用域

    public:可以被任意类使用

    private:可以被定义它们的类使用

    如果没有访问修饰符,则这个部分可以被同一个包中的所有方法访问

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值