类和对象
一、学习目标
①理解类和对象之间的关系(难点)
②掌握面向对象设计基本步骤(重点)
③掌握定义类和创建对象
④使用构造方法实例化对象
⑤掌握封装的概念及其使用(重点)
二、基本概念
2.1 类(class)
类是构造对象的模板或蓝图。
2.2 实例(instance)
由类构造对象的过程称为创建类的实例。
2.3 实例域(field)
对象中的数据。
2.3 方法(method)
操纵数据的过程。
2.4 状态(state)
对于每个特定的类实例(对象)都有一组特定的实例域值。这些值得集合就是这个对象当前状态。
2.5 对象
对象的三个特性:
行为(behavior):可以对对象施加的操作,即方法。
状态(state):当对对象施加方法时,对象如何响应。
标识(identity):辨别具有相同行为与状态的不同对象。
四、类之间的关系
4.1 依赖(dependence)
即"uses-a"关系。如果一个类的方法操纵另一个类的对象,我们就说这个类依赖于所操纵的那个类。
类之间的依赖度,就是指的耦合度。
4.2 聚合(aggregation)
即"has-a"关系,聚合关系意味着一个类的对象包含另一个类的对象。
4.3 继承(inheritance)
即"is-a"关系,一般而言,如果一个类拥有从另一个类中继承过来的属性和方法,并且这个类拥有自己独特的属性和方法。
三、自定义类
在用户自定义类时,一般由三个部分组成:
①实例域
②构造方法
③方法
//演员类 public class Actor{ //实例域,即类的共有特征:姓名、性别、职业、年龄 public String name; public char sex; public String job; public int age; //构造方法,一般是public + 类型 + 参数列表 + 大括号 //无参构造 public Actor(){ } //带参构造,参数个数不定,可以有多个带参构造 public Actor(String name1 ,char sex1 ,String job1 ,int age1){ name = name1; sex = sex1; job = job1; age = age1; } //方法:共有行为:吃饭、表演 public void eat(){} public void performs(){} }
四、构造方法
①没有返回值类型
②名称与类名一致
③可以指定参数及实现重载
④注意隐式构造和参数化构造不能共存
⑤构造器总是伴随着new操作一起调用
⑥可以不写构造方法,JVM会自动帮我们生成一个无参构造。但如果我们定义了一个构造方法,无论构造方法是否有参数,JVM均不会再自动给我们生成一个无参构造。
五、 封装
6.1 概念
在类型的内部对于数据使用访问权限修饰符进行隐藏,给外部定义访问或者设置通道,即相应的getter和setter方法。
6.2 语法结构
①一个私有的数据域;
②一个公有的域访问器方法;
③一个公有的域更改器方法。
public class 类{ //属性私有化 private 类型 属性名; //公有的域更改器方法 public void setXX(类型 参数名){ this.属性名 = 参数名: } //公有的域访问器方法 public 类型 getXX(){ return 属性名: } }
使用封装的缺陷:
隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别。
六、JavaBean
6.1 概念
java官方标准对象的定义规范
6.2 javaBean的标准定义
1.如果有一个叫做xxx的属性,通常会定义getXxx[getter方法]或者setXxx[setter方法]两个方法,因为大多数工具或者框架会去掉get或set字母去掉然后将方法名剩余部分如Xxx中的首字母小写,将其作为我们的属性名。
2.如果属性的类型是boolean,获取方法可以书写为get,但是通常情况下使用is替代get
3.对于其他的普通方法在命名上没有约束,通常情况下要求使用public对方法进行修饰。
4.通常情况下用public修饰构造方法,必须携带一个无参构造方法,因为很多框架会使用反射调用对象的无参构造,如果没有无参构造可能会导致框架创建对象时发生异常。
七、this关键字
7.1 this.xx中this
说明:
this指代当前的对象(我的),在单独书写类的时候this不能指代其他任何内容,只有在创建对象时或者创建对象后,对象调用方法的时刻this指代的是当前你调用方法的这个对象。
7.2 this()在构造方法中调用
说明:
1.this() 可以帮助我们执行其他构造方法中的代码,便于当前构造方法的执行
2.this()调用构造方法必须放在有效代码的第一行
语法结构:
构造(){
this(参数1,参数2);
}
构造(参数1,参数2){
......
}
构造(参数){
this();
}
示例:
public Student(){
this("许可", 18);
}
public Student(String name, int age){
this.name = name;
this.age = age;
}
九、java中创建对象的初始化过程
1.将所有的属性进行初始化,基本类型的值为0或false,引用类型的值是null
2.检查是否有针对属性给默认值,如果有,对属性执行第二次初始化
3.执行构造方法的代码,进行相关处理