day08 总结笔记 第七天没有笔记
01-面向对象介绍
- 介绍 : 面向对象是一种编程的指导思想
- 问题 : 为什么要学习面向对象这种思想 ?
这套思想来源于生活, 生活中解决问题的时候, 就是一个个的对象在一起打交道, 从而将问题解决
我们希望写代码的时候, 也能使用这套思想, 编程就会更加贴切于生活.
- 解决随机数的问题 --> 找来了Random对象
- 解决键盘录入的问题 --> 找到了Scanner对象
- 解决封装学生信息的问题 --> 找到了Student对象
- 面向对象重点学什么 ?
1. 学习自己如何设计对象
2. 学习已有的对象如何使用 --- API章节
02-类和对象
-
前提需知 : Java 中想要创建对象, 必须要先有类的存在
-
类的介绍 : 一组相关属性和行为的集合, 将其看做为是对象的设计图
- 类 : 设计图
- 对象 : 根据设计图创建出来的实体
-
类和对象 :
- 依赖关系 : 需要根据类, 创建对象
- 数量关系 : 一对多的关系
-
类的组成 :
- 属性(名词描述) :
属性在代码中, 使用成员变量表示, 成员变量跟之前定义变量的格式一样, 只不过位置发生了改变, 放在了类中, 方法外.- 行为(动词描述) :
行为在代码中, 使用成员方法表示, 成员方法跟之前定义方法的格式一样, 只不过去掉了static关键字public class Student { // 属性: 姓名, 年龄 String name; int age; // 行为: 学习, 吃饭 public void study(){ System.out.println("学习"); } public void eat(){ System.out.println("吃饭"); } }
03-对象的创建和使用
- 使用一个类 , 需要定义一个带有main方法的测试类
- 创建类的对象, 调用内部的成员变量, 成员方法
public class StudentTest {
public static void main(String[] args){
}
}
-
创建对象的格式 :
- 类名 对象名 = new 类名();
Student stu = new Student(); System.out.println(stu); // 打印对象名, 看到对象在内存中的地址值 -
使用成员变量的格式 :
- 对象名.变量名;
// 如果成员变量没有赋值, 直接打印, System.out.println(stu.name); // null System.out.println(stu.age); // 0 stu.name = "张三"; stu.age = 23; System.out.println(stu.name); // 张三 System.out.println(stu.age); // 23 -
使用成员方法格式 :
- 对象名.方法名(实际参数);
stu.study(); stu.eat();
04-对象内存图
- 务必打开ppt, 将内部的流程梳理清楚
05-成员变量和局部变量的区别
1. 类中位置不同 :
成员变量: 方法外
局部变量: 方法中
2. 初始化值不同 :
成员变量: 有默认初始化值
局部变量: 没有默认初始化值, 使用之前必须完成赋值
3. 内存位置不同 :
成员变量: 堆内存
局部变量: 栈内存
4. 生命周期不同 :
成员变量: 随着对象的创建而存在, 随着对象的消失而消失
局部变量: 随着方法的调用而存在, 随着方法的运行结束而消失
5. 作用域 :
都在自己所属的大括号中有效
06-this关键字
- 情况 : 成员变量和局部变量重名了, 在使用的时候, 会根据就近原则, 优先使用局部变量
public class Student {
int num = 10;
public void show(){
int num = 20;
System.out.println(num); // 20
}
}
public class Test {
public static void main(String[] args){
Student stu = new Student();
stu.show();
}
}
- 区分局部变量和成员变量的重名
public class Student {
int num = 10;
public void show(){
int num = 20;
System.out.println(this.num); // 10
}
}
public class Test {
public static void main(String[] args){
Student stu = new Student();
stu.show();
}
}
- this 的作用 :
- this可以使用点儿的形式调用本类的成员
- this.本类成员变量
- this.本类成员方法
省略规则:
1. this.本类成员方法 : 没有任何前提条件, this.可以直接省略掉
2. this.本类成员变量 : 需要保证变量名不重复(前提条件) this.才可以省略
- this 的介绍 :
- 代表当前类对象的地址, 哪一个对象调用的方法, 方法中的this, 代表的就是哪一个对象
stu1.show(); ---> this ----> stu1的地址
stu2.show(); ---> this ----> stu2的地址
07-构造方法
- 介绍 :
- 构造方法 | 构造器
- 创建对象的时候, 要执行的方法
- 格式 :
- 方法名与类名相同, 大小写也必须一致
- 没有返回值类型, 连void都没有
- 没有具体的返回值 (方法中, 不能通过return语句带回结果)
public class Student {
public Student(){
System.out.println("Student类的空参数构造方法...");
}
}
-
构造方法的执行时机 :
- 创建对象的时候被调用执行
Student stu = new Student(); Student(); ---> 单独看这句代码, 就是在调用构造方法- 每创建一次对象, 就会执行一次构造方法
-
构造方法的作用 :
- 本质作用 : 用于创建对象
- 结合执行时机 : 可以在创建对象的时候, 给成员变量赋值
- 你不是在创建对象的时候, 一定会执行吗, 那你执行的时候, 别闲着了, 帮我干点活, 给成员变量赋值
public class Student {
String name;
int age;
public Student(String name, int age){
this.name = name;
this.age = age;
}
}
Student stu = new Student("张三", 23);
-
构造方法的注意事项 :
- 如果一个类中, 没写任何构造方法, 系统将会提供一个 [默认的] [无参数的] 构造方法, 保证可以正常创建对象
public Student(){ } 因为默认提供的构造方法, 里面没有代码执行, 所以我们之前感受不到, 构造方法在执行- 如果一个类中, 手动编写过构造方法, 系统就不会再提供那个默认的无参构造了
- 建议 : 无参构造方法, 带参构造方法, 全部手动给出
- 构造方法, 不允许使用对象名.的形式调用
08-封装
-
面向对象三大特征
- 封装
- 继承
- 多态
-
封装思想 :
- 隐藏实现细节, 仅对外暴露公共的访问方式
-
封装在代码中常见的体现 :
- 将属性抽取到类中, 是对零散的数据, 进行了封装
用户信息: 001 张三 23 15611111111 北京 --------------------------------- 使用封装前: String id = "001"; String name = "张三"; int age = 23; String tel = "15611111111"; String address = "北京"; 使用的数据, 是零散的5个变量. --------------------------------- 使用封装后: class User { String id; String name; int age; String tel; String address; // 假设编写了构造方法 } User u = new User("001","张三",23,"15611111111","北京"); 使用的数据, 不再是零散的变量了, 而是存到了一个整体的对象中 -
将代码逻辑, 抽取到方法中, 是对代码进行的一种封装
程序员A : 编写了一个方法, printArray() 一个遍历打印数组的方法 程序员B : 只需要关心方法怎么调用即可, 不需要关系内部的逻辑 这就是程序员A, 对遍历打印数组的代码逻辑, 进行了封装.
09-权限修饰符
- private : 同一个类中
- (default) : 同一个类中, 同一个包中
- protected : 就业班学
- public : 可以在任意位置访问
10-标准JavaBean类
- 成员变量全部 private
- 提供空参, 带参构造方法
- 针对于私有的成员变量, 编写对应的 setXxx 和 getXxx 方法
package com.itheima.test;
/*
标准的JavaBean :
1. 成员变量全部私有
2. 提供空参, 带参构造方法
3. 针对于私有的成员变量, 编写对应的 setXxx 和 getXxx 方法
ptg插件
*/
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package com.itheima.test;
public class StudentTest {
/*
一般通过带参构造方法, 对数据做初始化 (第一次赋值)
后期如果需要修改, 调用setXxx即可
*/
public static void main(String[] args) {
// 1. 空参构造方法创建对象, setXxx完成赋值
Student stu1 = new Student();
stu1.setName("张三");
stu1.setAge(23);
System.out.println(stu1.getName() + "---" + stu1.getAge());
// 2. 带参构造方法创建对象, 创建的时候直接赋值
Student stu2 = new Student("李四",24);
stu2.setName("赵四");
System.out.println(stu2.getName() + "---" + stu2.getAge());
// 注意: getXxx方法, 是能够让你拿到真实的数据
for(int i = 1; i <= stu2.getAge(); i++){
System.out.println("祝:" + stu2.getName() + "生日快乐!");
}
}
}