1. 类的定义和类的使用 ---> 上午核心案例: 学会基础格式(定义格式和使用格式)
2. 类的封装性 ---> 今日重点案例: 定义一个标准类
1. 两者的区别:
A. 面向过程: 强调的是步骤,所有的事情都是自己去做
B. 面向对象: 强调的是对象,找人帮助你做事情(备注:对象具备有做事情的功能)
2. 例如:
打游戏上王者的操作。
面向过程: 自己辛辛苦苦打游戏,从黑铁到青铜到白银到黄金到白金到钻石到大师最后上王者,很辛苦
面向对象: 找个代练帮你上王者,前提是需要支付一定的酬劳
对象: 代练,他具备有 上王者的功能
现实世界 Java世界
========================================
手机设计图纸 ----------> 类 class Phone
具体华为P30手机 --------> 对象 Phone p = new Phone();
特征: 品牌,价格 --------> 成员变量 String pinpai; int jiage;
功能: 打电话,发信息 ----> 成员方法 public void call(){ .... } public void send(){ .... }
1. 类的定义(类里面有什么)
A. 成员变量: 写在类中,方法外的变量
B. 成员方法: 以前的方法,去掉了 static 关键字
2. 类的使用(8个字"创建对象,调用成员")
A. 创建对象
a.格式:
类名称 对象名称 = new 类名称();
b.例如:
Student stu = new Student(); //Student是类名称,stu是对象名称
B. 调用成员
a. 调用成员变量: 对象名称.成员变量名称 //例如: stu.name stu.age
b. 调用成员方法: 对象名称.方法名称(参数); //例如: stu.eat(); stu.sleep();
1. 代码位置不同
A. 局部变量: 写在方法中 或者 方法的小括号当中
B. 成员变量: 写在类中 方法外
2. 内存位置不同
A. 局部变量: 存在于栈内存,跟着方法走。方法在,局部在;方法亡,局部亡。(栈当中没有 默认值)
B. 成员变量: 存在于堆内存,跟着对象走。对象在,成员在;对象亡,成员亡。(堆当中存在 默认值)
1. 面向对象的三大特征:
A. 封装性 (今天课程学习)
B. 继承性 (Day09课程学习)
C. 多态性 (Day10课程学习)
2. 封装的含义:
将一些细节的部分,隐藏起来,外界不可见。你只需调用即可,不要去操心具体的细节。
1. 为什么需要使用 private 关键字?
如果不采用 private 关键字,会导致'数据安全问题' 给年龄赋值的时候,可以赋值为负数。例如: stu.age = -28;
不符合现实逻辑的情况,就是'数据安全问题' 解决方案就是采用 private 关键字,给年龄加上 private int age;
这样写完之后,会存在问题: 正常的年龄也不能赋值成功。怎么解决?提供一组 getter 和 setter 方法,能够存取值
getter 方法用于取值'取钱',setter方法用于存值'存钱'。
2. 生活实例:
我们现在在外面,都要租房子,租房子要找小区的房子,为啥?因为有门禁更安全。
所有的人都不能直接进出,需要找物业帮你办理进出的门禁卡,例如: 刷脸。
1. 含义(了解即可)
通过谁调用的方法,谁就是 this. //具体的含义在 Day09 当中讲解。
2. 作用:
区分成员变量和局部变量重名的问题。
如果是 this.变量名称 表示的是 成员变量
如果是 变量名称 表示的是 局部变量
3. 今天课程的使用场景
A. 在 setter 方法当中会使用 this
B. 在构造方法当中会使用 this
1. 构造方法的格式:
A. 格式:
修饰符 类名称(参数列表){
}
B.例如: //学生类 class Student 的构造方法
public Student(){
}
2. 构造方法调用的时机:(什么时候会调用到构造方法)
在创建对象的时候,就是调用构造方法的时候。 //问题: 成员方法和构造方法,谁先调用? 构造方法先调用
3. 构造方法有什么作用,为什么要使用构造方法?
A. 创建对象(无参构造和全参构造都可以创建对象)
B. 给成员变量赋值(主要是全参构造帮你去赋值)
4. 构造方法的注意事项
A. 格式的注意: 构造方法没有返回值类型,不要写 void , 方法名称和类名称必须完全相同。
B. 系统默认赠送无参构造,作用给你创建对象使用。如果你写出了构造方法,系统不再赠送构造方法。
标准类的定义
//英雄类(标准类的定义 JavaBean)
//[1]成员变量 private 修饰
//[2]成员方法 getter 和 setter
//[3]构造方法 无参构造 和 全参构造
public class Hero {
//成员变量,private 修饰
private String name;
private int age;
//构造方法: 无参构造
public Hero() {
}
//构造方法: 全参构造
public Hero(String name, int age) {
this.name = name;
this.age = age;
}
//成员方法 getter 对于Name进行取值操作
public String getName() {
return name;
}
//成员方法 setter 对于Name进行存值操作
public void setName(String name) {
this.name = name;
}
//成员方法 getter 对于Age进行取值操作
public int getAge() {
return age;
}
//成员方法 setter 对于Age进行存值操作
public void setAge(int age) {
this.age = age;
}
}
标准类的使用
//测试类(类的使用: 创建对象,调用方法)
public class Test {
public static void main(String[] args) {
//【1】无参构造+ setXxx()方法的使用
//---------------
//创建对象
Hero one = new Hero();
//调用方法,调用 setXxx 方法,进行存值操作
one.setName("盖伦");
one.setAge(20);
//调用方法,调用 getXxx 方法,进行取值操作
String name1 = one.getName();
int age1 = one.getAge();
//打印输出结果
System.out.println("name1 = " + name1); //name1 = 盖伦
System.out.println("age1 = " + age1); //age1 = 20
System.out.println("===========================");
//【2】全参构造 的使用
//---------------
//创建对象
Hero two = new Hero("赵信",22);
//调用方法,调用getXxx 方法,进行取值的操作
String name2 = two.getName();
int age2 = two.getAge();
//打印输出结果
System.out.println("name2 = " + name2); //name2 = 赵信
System.out.println("age2 = " + age2); //age2 = 22
}
}