- 今日内容
- 一、面向对象概念
- 二、类和对象
- 三、类的设计
- 四、封装
- 五、构造器
- 六、JavaBean标准类
今日内容
- 面向对象
- 类与对象
- 三大特征——封装
- 构造器
一、面向对象概念
面向对象程序设计: (核心: 设计)
简称: OOP (Object Oriented Programming)
面向对象思想的分类:
第一阶段: 面向对象基础思想(JavaSe阶段, JDBC, Web阶段), 掌握时间: 前一个月 第二阶段: 面向接口思想(Web阶段, 框架, 项目), 掌握时间: 前6个月 第三阶段: 面向切面思想(Spring框架源码), 掌握时间: 至少5-8年
面向过程思想:
代表语言: C语言 核心单位: 函数(其实就是Java中方法) 思想体系: 比喻"执行者"身份, 强调的是"过程", 偏重事情"怎么做"
面向对象思想:
代表语言: Java语言 核心单位: 类 思想体系: 比喻"指挥者"身份, 强调的是"对象", 偏重事情"找谁做"
思想的实际应用:
● 如果解决一些较小的问题, 往往选择"面向过程思想"; ● 如果解决一些较大的问题, 往往选择"面向对象思想"; ● 无论是面向对象思想还是面向过程思想没有好坏之分, 都是人们解决问题的思考习惯;
面向对象三大特征:
封装, 继承, 多态
二、类和对象
类:
含义: 事务在程序中抽象的表现形式 举例: 人类, 猫类, ...... 属性: 事务的属性信息 例如: 人类: 姓名, 年龄, 身份证号, 地址, ...... 行为: 事务的行为动作 例如: 人类: 吃, 睡, 喝, 玩, 工作, 学习, ......
对象:
含义: 是这一类事务的具体体系 属性: 例如: 人类: 小明, 18, 410101159985484, 河南, ...... 行为: 例如: 人类: 怎么吃, 怎么睡, ......
类与对象的关系:
● 类是对象的抽象, 模板; ● 对象是类的实例, 实体; ● 对象是通过类创建的, 先有类, 后有对象;
三、类的设计
类的分类:
● API系统中提供好的类 ● 程序员自行设计类(自定义的类)
类的设计:
步骤: 1.根据事务的属性和方法设计最基础的"模板类"; 2.在模板类的基础上添加封装思想 3.根据实际需求, 加入构造器, 完成最基础的JavaBean标准类的设计 4.根据实际需求, 加入静态的概念 5.根据实际需求, 加入继承思想 6.根据实际需求, 加入抽象概念 7.根据实际需求, 加入"最终"概念 8.根据实际需求, 加入接口概念 9.根据实际需求, 加入内部类的概念 10.根据实际需求, 加入枚举的概念 11.根据实际需求, 加入注解概念 12.根据实际需求, 加入构造器代码块 13.根据实际需求, 加入静态代码块
设计模板:
成员: 类作为模板的一部分 例如: 字段(成员量)、成员方法、成员内部类 内容: 写在类中, 但不会作为模块的一部分, 只作为工具进行使用 例如: 构造器、构造器代码块、静态代码块
类的成员:
成员量(归属于: 属性) 含义: 类中成员变量和成员常量的统称 成员方法(归属于: 行为) 成员内部类(归属于: 暂不涉及)
**成员量(属性): ** 声明在类中代码块外的变量, 包含"实例变量"和"静态变量"
成员变量/常量: 实例变量/常量: 没有static关键字修饰的成员变量, 实例变量归属于"对象"; 静态变量/常量: 被static关键字修饰的成员变量, 静态变量归属于"类";
成员方法(行为): 声明在类中的方法, 包含"实例方法"和"静态方法"
成员方法: 实例方法: 没有static关键字修饰的成员方法, 实例方法归属于"对象"; 静态方法: 被static关键字修饰的成员方法, 静态方法归属于"类";
成员内部类():
暂不涉及
类的设计格式:
public class 类名{
//实例变量
//实例方法
}
**练习: **学生类的设计
public class Student{
//实例变量
String name;
int age;
//实例方法
public void show(){
System.out.println("我叫" + name + ", 今年" + age + "岁了!");
}
}
对象的创建和使用:
创建格式: 类名 对象名 = new 类名(实参); 使用格式: 对象名.实例变量; 对象名.实例方法(实参);
练习: 创建和使用学生类
public class Test{
public static void main(String[] agrs){
//创建学生对象
Student s1 = new Student();
System.out.println(s1);
//给s1进行赋值
s1.name = "小明";
s1.age = 13;
//获取s1对象的姓名和年龄
System.out.println(s1.name);
System.out.println(s1.age);
//调用s1对象的方法
s1.show();
}
}
对象使用的内存图解:
实例变量和局部变量的区别:
● 实例变量: 声明在类中代码块外, 且没有static关键字修饰符的成员变量 ● 局部变量: 声明在代码块内或者方法声明上的变量 变量根据定义位置的不同,我们给变量起了不同的名字。 ● 代码中的位置不同: ○ 实例变量:类中,方法外 ○ 局部变量:方法内部或者方法声明上(形参列表) ● 内存中的位置不同 ○ 实例变量:堆内存 ○ 局部变量:栈内存 ● 默认值不同 ○ 实例变量:有默认值 ○ 局部变量:没有默认值 ● 代码中的作用域不同 ○ 实例变量:类中(静态成员除外) ○ 局部变量:所属方法中 ● 内存中的生命周期不同 ○ 实例变量:随着对象的创建而加载,随着对象的消亡而消失 ○ 局部变量:随着方法的调用而加载,随着方法的出栈而消失 ● 加载方式和次数不同 ○ 实例变量:随着对象的创建而加载,每创建一次对象就会加载一次 ○ 局部变量:随着方法的调用而加载,每调用一次方法就会加载一次 ● 修饰符的使用不同 ○ 实例变量:程序中各种修饰符可以根据需求进行修饰 ○ 局部变量:只能使用final进行修饰
**this关键字的第一种使用方法: **
场景: 子类的构造器中或子类的实例方法 格式: this.实例变量名; this.实例方法名(实参); 作用: 用来区分同一个类中同名的实例变量和局部变量 含义: 哪个对象调用了this关键字所在的构造器或实例方法, this关键字就代表哪个对象
四、封装
封装:
含义: 在程序中给不同的声明内容添加不同的权限访问级别, 使之提高程序的安全性和访问性 核心: 四种权限访问级别
权限访问级别:
分类(按照从小到大): private < 缺省(sheng, 什么都不写) < protected < public
private关键字
含义: 私有的 修饰: 实例变量, 静态变量, 实例常量, 静态常量, 实例方法, 静态方法, 实例成员内部类, 静态成员内部类 特点: 被private修饰的内容, 只能在本类中进行访问和使用, 在本类之外无法进行使用
私有实例变量
含义: 被private关键字修饰的实例变量 特点: 被private修饰的内容, 只能在本类中进行访问和使用, 在本类之外无法进行使用 格式: private 数据类型 变量名; 步骤: 1.将"模板类"中所有的实例变量进行私有化 2.针对每个被private修饰的变量对外提供一对公共访问方式(getXxx()和setXxx()) setXxx()的两个明确: 返回类型: void 形参列表: 存储数据的数据类型 变量名 getXxx()的两个明确: 返回类型: 获取数据的数据类型 形参列表: 空
练习: 封装学生类
public class Student{
private String name; //学生姓名
private int age; // 学生年龄
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}
注意: IDEA快速创建Get和Set方法: Alt + insert 选择"Getter And Setter" IDEA快速创建构造方法: Alt + insert 选择"Constructor" IDEA快速创建toString()方法: Alt + insert 选择 "toString()"
五、构造器
构造器 (构造方法)
含义:
1.关键字new会通过构造器对对象进行堆内存区域的开辟
2.针对对象的成员进行实例初始化
3.如果是有参的构造器可以针对对象的属性进行赋值操作
格式:
修饰符 构造器名() {}
特点:
1.构造器的名字必须与类名相同
2.构造器没有返回类型, 而且连void都没有
3.构造器的格式和方法类似, 也叫做构造方法; 构造器有若干方法, 构造器中的内容共有三个部分
第一部分(暂不涉及): 隐式或显示的super(参数)或显式的this(实参);
第二部分(暂不涉及): 隐式加载实例成员和构造代码块
第三部分: 构造器中除this(实参)或super(实参)的显示代码
注意: 这三部分执行优先顺序 第一部分 > 第二部分 > 第三部分
4.当一个类没有任何的构造器时, JVM的编译器会在编译时自动补全一个public的无参构造器, 供其
进行创建对象时初始化成员;
5.构造器支持方法的重载
注意:
setXxx和构造器的区别:
1.setXxx()只有赋值操作, 有参构造器除了赋值操作外, 也有初始化对象成员的作用
2.setXxx()可以反复调用多次, 构造器只能在创建对象时使用唯一的一次
六、JavaBean标准类
含义 + 内容
含义: 在实际开发中没有上级的特殊说明情况下, 程序员设计类的约定俗称的规范 内容: 必须有: 1.类的声明必须由public修饰 2.一个.java文件中只允许包含一个类 3.无参构造器 4.所有的成员量必须进行私有化 5.针对每个被私有化的成员量提供一对的公共访问方式(setXxx()和getXxx()) 可以有: 1.根据实际情况需求添加合适有参构造 2.根据实际需求添加构造器代码块(暂不涉及) 3.根据实际需求添加静态代码块(暂不涉及) 4.根据实际需求添加toString()、hashCode()、equals()(暂不涉及) 5.根据实际需求添加内部类
标准格式
public class 类名{
//实例变量
//构造器
//无参构造器【必须】
//有参构造器【建议】
//实例方法
//getXxx()
//setXxx()
}



