- 类
- 实例域:对象中的数据—>实例化后的类中中数据
- Object是所有类的超类
- 对象
- 作为类的实例,每个对象的标识永远不同,状态也常常存在差异
- 类之间的关系
- 依赖 uses-a —-一个类的方法操纵另一个类的对象
- 聚合 has-a ——类A的对象包含类b的对象
- 继承 is-a —-从父类继承,并且加入自身的方法。
- 使用预定义类
- 一个对象变量并没有实际包含一个对象,而是仅仅引用一个对象
- 用户自定义类
- 实例域:类的定义中例如int i, double j之类的变量,或者叫实例域
- 构造器
- 构造器只能伴随着new一起使用,而不能对一个已经存在的对象调用构造器。
- 构造器是没有返回值的
- 每个类中可以有一个以上的构造器
- 不能在构造器里定义与实例域重名的局部变量 常见错误
- 隐式参数与显式参数
- 例如public void raisesalary(double salary),隐式参数为调用该方法的Employee类,而显式参数则是salary.一般用this来代表隐式参数,this.salary = salary
- 封装的优点
- 组成部分:私有数据域+公有域访问器方法+公有域更改器方法
- 可以改变内部实现,除了该类的方法外,不会影响其他代码
- 更改器可以执行错误检查,从而避免薪资为负数的情况
-
不要编写返回可变对象的访问器方法
原因: 如果直接返回一个可变数据类型,可能出现外界的变量与对象实例域指向同一个位置,那么就使得可以在外部进行数据修改,从而导致错误
-
如果要返回一个可变数据类型应该怎么办呢?
方法: 返回一个可变数据类型的拷贝。例如return (Date) hireday.clone().
- 基于类的访问权限
- 一个方法可以访问所调用对象的私有数据
-
一个方法可以访问所属类的所有对象的私有数据。!!!!
- 私有方法
- 方法如果是私有的,那么就不必考虑外部的其他类操作调用的情况
- final实例域
- 实例域定义为final后,构建对象时必须初始化这样的域,必须确保在每个构造器执行之后,这个域的值被设置,且后续不能对其进行修改。
- 一般应用于基本类型域或者是不可变类型域。如果对可变类的域使用,那么仅仅表示存储在变量中的对象引用不会指向其他的对象。
突然发现static final 定义在main函数外面!!!!而且String 的equals 也是比较其内容而不是存放的位置。
- 静态域与静态方法
- 静态域
- 每个类中只有一个,即使没有对象,也依旧存在,它属于类。调用方法如下: Employee.nextId(nextId即为静态域)
- 静态常量
- 直接属于类,例如PI,调用方法:Math.Pi
- 每个类对象都可以对公有域进行修改OK
- 静态方法
- 不能向对象实施操作的方法,及 没有隐式的参数
- 静态方法只能访问静态的域,即为该类自身所有,而与对象无关的域。
- 使用条件
- 一个方法不需要访问状态对象
- 一个方法只需要访问类的静态域即可
- 工厂方法(factory method)??
- 工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品。
- main 方法-->静态方法
- 方法参数
- 按值调用:方法接受的是调用者提供的值
- 按引用调用: 方法接受的是调用者提供的变量地址
- Java是按值调用的,无法该变参数值的大小(这和C不是一样的吗??),但是和C里的指针一样,Java是可以改变引用的值的大小的。(拷贝对象的引用,得到的依旧是对象的引用)
- 一个方法是不能让对象参数指向一个新的对象的!!!!!!!!!
- 对象构造
- 重载:多个方法名字相同,但是参数不同,产生重载
- tips: 方法签名包括方法名以及参数类型,这使得不存在同名同参返回值不同的方法
- 默认域初始化:
- 自动赋值出现在没有显示赋值的情况下,数值=0,布尔值=false,对象引用=null
- 无参构造器:
- 无参构造器是默认提供的当且仅当没有其他构造器,但是如果有了一个带参数的构造器但没有自己写一个无参构造器,再使用无参构造器会发生报错。
- 显式域初始化:
简单的java类与对象的总结
原文:https://www.cnblogs.com/jimmyLearning/p/9193186.html