java 之 面向对象
今日内容:
-
面向对象
-
类与对象
-
三大特征---封装
-
构造方法
学习目标
-
能够理解面向对象的编程思想
-
能够明确类与对象的关系
-
能够掌握类的定义格式
-
能够掌握创建对象的格式,并访问类中的成员
-
能够根据类与对象的关系定义相关的事物
-
能够理解对象的内存图解
-
能够说出成员变量与局部变量的异同点
-
能够理解private关键字的含义
-
能够说出this关键字可以解决的问题
-
能够理解构造方法的含义
-
能够用封装的思想定义一个标准类
-
面向对象思想
面向对象思想概述:
-
Java 语言是一门面向对象的程序设计语言,面向对象思想是一种程序的设计思想,我们在面向对象思想的指引下,使用Java 语言去设计程序、开发计算机程序。这里的【对象】泛指现实中的一切事物,每种事物都有自己的【属性】和【行为】。面向对象思想就是在程序设计过程中,参照现实中的事物,将事物的属性特征、行为特征抽离出来,描述成计算机事件的一种设计思想。它是区别于面向过程,强调是事物的行为去一步步执行的功能
【物以类聚,人以群分】
举例:
吃饭:
面向过程:到菜市场买菜----》返回家洗菜--------》切菜-----》炒菜-----》吃菜-----》洗碗刷锅
面向对象:网上点菜app-------》吃菜
区别:
面向过程:强调步骤
面向对象:强调对象,这里的对象是【app】
特点:
面向对象思想更符合人类的思考习惯,站在领导者的角色上。它可以将复杂的事情简单化
并将我们从事情的执行者转变成指挥者。
面向对象的语言中,包含了三大基本特征:封装,继承,多态。
类与对象
#### 什么是类
-
类:是一组相关【属性】和【行为】的集合. 可以把类看成一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。
-
现实中,描述一类事物:
属性: 描述该类事物的一种【状态】信息
行为: 描述该类事物具备的功能,能够做什么。
什么是对象
-
对象: 就是这一类事物的具体体现。对象是类的一个【实例】,必然具备该类事物的属性特征和行为特征。
类与对象的关系
-
类是对一类事物的描述,是【抽象的】。
-
对象是一类事物的【实例】,是【具体的】。
-
类是对象的模板,而对象是类的实体。
类的定义
#### 事物与类的对比
现实中的一类事物:
属性: 事物的状态信息
行为: 事物能够做什么,具备的功能
java中的类描述事物也是如此:
成员变量: 对应事物的属性
成员方法: 对应事物的行为
类的定义格式
public class ClassName{
// 成员变量
// 成员方法
}-
定义类: 定义类的成员,包括但不限制于 成员变量和成员方法
-
成员变量:和之前定义变量的格式一摸一样,只不过位置不同,变量位于 类中 方法外
-
成员方法: 定义的时候需要去掉static关键字
对象的使用
#### 对象的创建格式:
类名 对象名 = new 类名();
适用对象访问类中的成员信息:
对象名.成员变量名;
对象名.成员方法();类的练习
定义一个类,用来模拟手机事物,属性:品牌,价格,颜色; 行为: 打电话,开关机,群发短信
测试访问手机的属性和行为
类的内存分析
备注: 在栈内存当中运行的方法 遵循“新进后出,后进先出”原则,此时对象名称指向堆内存当中的 空间 ,寻找方法信息,执行该方法。
#### 两个对象调用同一个方法内存
关键字 new 开辟 堆(heap)内存空间
成员变量和局部变量的区别
-
变量根据定义的【位置】不同,我们给变量起了不同的名字
public class People{
String name"校花"; // 成员变量
public void eat(){
String food = "炒拉条"; // 局部变量
System.out.println(name+"我中午吃的是:" + food);
}
}-
在类中定义的位置不同 【重点】
-
成员变量 定义在 类中 方法外
-
局部变量 定义在 方法中
-
-
-
作用范围不同 【重点】
-
成员变量: 类中
-
局部变量: 方法中
-
-
初始值不同 【重点】
-
成员变量: 有默认值
-
局部变量: 没有默认值,需要 赋值
-
-
在内存存储的位置不同 【了解】
-
成员变量:堆内存中
-
局部变量:栈内存中
-
-
生命周期不同 【了解】
-
成员变量:随着对象的创建而存在,随着对象的消失而消失
-
局部变量: 随着方法的调用而存在,随着方法调用结束而消失
-
-
修饰符不同 【了解】
-
成员变量: 可以使用修饰符
-
局部变量: 不可以使用修饰符
-
-
## 封装
### 封装:
面向对象编译语言模拟客观世界,客观世界里的成员变量都是隐藏在对象内部的,外界是无法直接操作和修改的。
封装可以认为是一个保护屏障,防止该类的代码和数据被其他类随意的访问和修改。若要访问该类的数据必须通过指定的方式才可以进行访问,适当的封装,可以让我们的代码更容易维护和理解,也加强了代码的安全性
#### 原则:
就是将【属性隐藏】起来,如果想要访问类中某个属性,提供【公共的方法】对其访问
封装步骤
-
使用private 关键字 来修饰 成员变量
-
对需要访问的成员变量,提供对应的 一对 setXxx() 和 getXxx()方法。
封装的操作-----------》 private 关键字
private 含义:
-
private 是一个权限修饰符,代表最小的权限,最严格权限
-
可以修饰成员变量 也可以修饰成员方法
-
被private修饰后的成员变量 和成员方法 只能在本类中访问,
public class Man{
// 使用private 进行封装
private String name;
private int age;
// 提供对应的setXxx() 和 getXxx() 方法 可以访问类中的成员变量
public String getName(){
return name;
}
public void setName(String name1){
name = name1;
}
}封装优化1------》this关键字
我们发现setXxx() 方法当中形参名字不符合我们标识符的命名规范--见名知意,如果修改成和成员变量名字相同,会触发java程序当中的就近原则,会把方法内的变量统统设定为形参变量,会导致赋值失败,我们可以采用【this】关键字来解决变量重名问题
this的含义: this 表示 【当前】
this代表 所在类的当前对象的引用(地址值),即对象自己的引用
备注:意思方法被哪个对象调用,方法中的this 就代表那个对象,谁调用this就是谁。
this 的使用格式:
this.成员变量名
// 使用this关键字 修饰方法中的成员变量。解决成员变量被隐藏的问题
public void setName(String name){
this.name = name;
}备注: 方法中若只有一个变量名,this可以省略不写
封装优化2---构造方法 ( 是方法就可以重载)
当一个对象被创建出来的时候,构造方法用来初始化对象,给对象的成员变量赋初始值
备注: 无论你是否在类中定义构造方法,当类被定义出来的时候,系统会自动给该类分配一个无参的构造方法, 一旦在类中显式的定义的构造方法,Java自动提供的默认无参构造方法就会失效(被收回)
构造方法的定义格式:
-
修饰符 构造方法名 (参数列表){
// 方法体内容
}
// 构造方法 没有返回值,构造方法名和类名完全一致 不需要void
练习构造方法的使用
public class Dog{
private String name;
private int age;
private String brand;
private String color;
//优化封装 构造方法
public Dog(){}
public Dog(String name,int age,String brand,String color){
this.name = name;
this.age = age;
this.brand = brand;
this.color = color;
}
}
练习Person 类,成员变量: 姓名,年龄,体重,民族
public class Person{
private String name;
private String weight;
private String nation;
private int age;
public Person(){}
public Person(String name, String weight,String nation,int age){
}
}
注意事项:
-
构造方法名称必须和所在的类名称完全一摸一样
-
构造方法不用声明返回值类型,连void也不需要
-
构造方法不能用return一个具体的返回值
-
如果定义类时没有显式定义构造方法,系统会提供一个默认的无参构造方法
-
一旦自定义了构造方法 ,那么编译器将会收回默认提供的构造方法
-
构造方法 可以重载,方法名称相同,参数列表不同
标准类----JavaBean
JavaBean: 是Java语言编写类的一种标准规范,符合JavaBean的类,通常包含四部分:
-
所有的成员变量都需要使用 private关键字修饰
-
为每一个成员变量 提供 一对公共的 setter() 和getter()方法
-
编写一个无参的构造方法
-
最好再提供一个全参的构造方法
像这种的类就叫 JavaBean