今日内容
面向对象的概念
类与对象
封装
构造方法
面向对象的概念
面向过程:强调的是过程(步骤),关注的是“我该如何做”,所有完成功能的步骤和过程都是自己亲力亲为
面向对象:强调的是对象,关注的是“谁来帮我做”,其中的“谁”指的就是对象
面向对象是基于面向过程的
面向对象的优点:
(1)更符合人们的思维习惯,懒人思想
(2)将复杂的事情简单化
(3)从任务的执行者变成了指挥者
类与对象
学习编程语言为了解决现实世界的实际问题,使现实世界实现信息化
在Java语言中我们使用类来描述现实世界的事物
类 事物
成员变量 属性:特点
成员方法 行为:能够做什么
类:是对象的抽象描述,是一系列属性和行为的集合,它是模板
对象:是类的具体体现,它是根据模板创建的一个个具体事物
类只有一个,但是根据类可以创建出无数个对象
要创建对象,必须先有类
类根据作用不同可以分为很多种:
标准类(JavaBean):描述现实事物类
测试类:每个类都有主方法,都可以独立运行
使用一个类的步骤
(1)创建对象(导包)
类名 对象名 = new 类名();
举例:
Student stu = new Student();
(2)使用
成员变量
赋值
对象名.成员变量名 = 新值; // 这里“.”可以为“的”
举例:
stu.age = 18;
取值
数据类型 变量名 = 对象名.成员变量名;
举例:
int age = stu.age;
成员方法
调用格式:
对象名.成员方法名(参数);
举例:
stu.study();
类作为方法的形式参数
形式参数
数据类型
基本数据类型
引用数据类型
数组
类
JDK提供的:String
自定义的:Phone
接口
枚举
变量名
如果一个类作为方法的形式参数的类型,需要传递的是该类的对象,本质上其实传递的是该对象的内存地址值
类作为方法的返回值类型
类作为返回值类型,应该使用return返回的是该类的对象,本质上其实返回值的该对象的内存地址值
局部变量和成员变量的区别(面试题)
(1)定义的位置
局部变量:在方法的小括号或者大括号
成员变量:在类中方法外
(2)作用域(范围)
局部变量:只能在所在的方法中
成员变量:在整个类中
(3)默认值
局部变量:没有默认值,使用之前必须先赋值,否则就报错
成员变量:有默认值
(4)内存中的位置
局部变量:跟着方法进入栈内存
成员变量:跟着对象进入堆内存
(5)生命周期
局部变量:随着方法的进栈而存在,随着方法的出栈而消失,立刻回收
成员变量:随着对象的创建而存储,随着对象被垃圾回收机制回收而消失,在合适的时候回收
面向对象的三大特征
封装
继承
多态
封装
简单说,拿一个箱子装起来,密封起来,让其中的东西对外界不可见
隐藏实现的细节问题,对外不可见,但是要提供公共(public)的访问方式。
封装的体现:
(1)方法
(2)private修饰成员变量
private
是一个关键字,被private修饰的成员变量只能在本类中使用,其他类中不能用
以后我们都必须用private修饰成员变量,同时提供一对getter和setter方法
this关键字
this:代表的是当前对象的引用,谁来调用方法,当前对象就是谁,每一个非静态(不是static修饰)方法内部都有一个this
作用:
(1)通过this.成员变量的方法调用本类的成员变量
当局部变量和成员变量同名的时候,通过this.成员变量的方式区分这是一个成员变量
构造方法
用于创建对象,并给成员变量赋值
格式:
public 类名(参数列表){
// 方法体
return;
}
格式的特点:
(1)没有返回值,当然也没有返回值类型,连void都没有
(2)构造方法名和类名一致,大小写也相同
(3)return;可以省略
给成员变量赋值的方式
方式一:
对象名.成员变量名 = 新值;
不推荐使用,原因是学习了封装之后,所有的成员变量都会用private修饰
修饰之后,这种方式用不了了
方式二:
通过setter方法
Student stu = new Student();
stu.setName("张三");
方式三:
有参构造
Student stu = new Student("张三", 30);
今日目标:
能够编写一个标准的类
4个组成部分
(1)使用private修饰成员变量
(2)给每一个成员变量提供getter和setter方法
(3)无参构造
(4)全参构造
快捷键:
alt+insert
+ Constructor 生成构造方法
+ Getter & Setter 生成getXxx和setXxx方法
在测试类中使用标准的类
(1)创建对象(导包)
(2)使用成员变量
取值
数据类型 变量名 = 对象名.getXxx();
赋值
a:setXxx()方法
b:有参构造
(3)使用成员方法