总结笔记七

01-面向对象介绍

  • 问题 : 什么是面向对象 ?

    • Java 万物皆对象

    • 面向对象并不是一个技术, 而是一种指导思想

      • 以什么形式去组织代码

      • 以什么形式去解决问题

      • 生活中解决问题, 就是通过一个个的对象在一起打交道, 从而解决了问题

      • 代码如果也能按照生活中的这套思想, 程序就会变得很简单, 代码也会更加方便让人理解.

  • 举例 :

    • 想要解决键盘录入 --- Scanner对象

    • 想要解决随机数 --- Random对象

    • 创建一个窗体 --- JFrame对象

  • 面向对象我们重点学习的是什么 ?

    • 自己如何设计对象

    • 学习已有的对象如何进行使用

02-类和对象

  • 问题 : 什么是类 ?

    • 类是一组相关属性和行为的集合 , 可以将其理解为是对象的 [ 设计图 ]

      • 类是对象的设计图 , 因此, 在创建对象之前, 就需要先有类的存在

  • 问题 : 类和对象的关系 ?

    • 依赖关系 : 需要根据类去创建对象

    • 数量 : 一对多的关系, 根据一个类, 可以创建出多个对象.

03-类的组成

  • 属性 (名词的描述 --- 姓名, 年龄, 品牌, 价格...)

    • 成员变量 : 成员变量的定义格式跟之前一样, 只不过位置发生了改变

      • 类中, 方法外

  • 行为 (动词的描述 --- 吃饭, 学习, 打电话, 发短信...)

    • 成员方法 : 成员方法跟之前定义方法的格式一样, 只不过去掉了 static 关键字

    基础班的编写:

    在带有 main 方法的测试类中, 编写方法, 都带 static
    反之, 都不带 static

04-对象的创建和使用

public class Student {
String name;
int age;

public void show(){
...
}
}
  • 创建对象 :

    • 类名 对象名 = new 类名();

    Student stu = new Student();

    - 细节: 打印对象名, 会看到对象的内存地址
       
    全类名@十六进制地址值
       
    com.itheima.oop.Student@233a4f1
  • 调用成员变量 :

    • 对象名.变量名;

    stu.name = "张三";
    System.out.println(stu.name);  

    - 细节: 当我们创建对象之后, 没有给成员变量赋值, 而是直接打印 --> 看到成员变量的默认初始化值.
  • 调用成员方法 :

    • 对象名.方法名(实际参数);

    stu.show();

     

05-对象的内存图

  • 单个对象内存图

  • 两个对象内存图

  • 两个引用指向相同内存图

    • 不要求自己会画, 一定要打开ppt, 将流程梳理清楚

06-成员变量和局部变量的区别

类中位置不同 :

成员变量: 方法外
局部变量: 方法内

初始化值不同 :

成员变量: 有默认初始化值
局部变量: 没有默认初始化值, 使用之前必须赋值, 才能使用

内存位置不同 :

成员变量: 堆内存
局部变量: 栈内存

生命周期不同 :

成员变量: 随着对象的创建而存在, 随着对象的消失而消失.
局部变量: 随着方法的调用而存在, 随着方法的弹栈而消失.

作用域 :

都在自己所归属的大括号中有效.

07-this关键字

  • 介绍 : 代表当前类对象的引用 (地址)

    • 哪一个对象调用的方法, 方法中的this, 就代表的是哪一个对象

    • stu1.method() ----> this ---> stu1

    • stu2.method() -----> this ---> stu2

  • 情况 : 如果局部变量和成员变量重名, Java会根据就近原则, 优先使用局部变量

    • 如果非要使用成员变量的话, 可以使用this.进行区分

08-构造方法

  • 问题 : 什么是构造方法(构造器) ?

    • 在创建对象的时候, 一定会执行的方法

  • 问题 : 构造方法的格式 ?

    • 方法名与类名相同, 大小写也必须一致

    • 没有返回值类型, 连void 都没有

    • 没有具体的返回值 (不能通过return语句带回结果数据)

  • 问题 : 构造方法的执行时机 ?

    • 在创建对象的时候, 被系统自动调用执行

    • 每创建一次对象, 就会执行一次构造方法

    • 且不能手动调用 --- stu.Student() ; 错误 !!!

  • 问题 : 构造方法的作用 ?

    • 本质作用 : 创建对象

    • 结合执行时机 : 在创建对象的时候, 直接给成员变量赋值

    Student stu = new Student("张三",23);
  • 构造方法的细节 :

    • 如果一个类中, 没有编写任何构造方法, 系统将会提供一个 [默认的] [无参数的] 构造方法

    • 如果手动编写过构造方法, 系统将不会再提供那个默认的无参构造构造

    • 建议 : 无参 \ 带参构造全部手动给出

09-封装

  • 面向对象三大特征 : 封装 , 继承 , 多态

  • 封装概述 : 隐藏实现细节, 仅对外暴露公共的访问方式

  • 封装在代码中常见的体现 :

    • 将属性抽取到类中, 这是对 [数据] 进行的封装

      • 要是没有类和对象, 用户的数据, 就是一些零散的变量

      • 有了类和对象, 将数据封装到对象里面, 所面向的就是一堆整体的对象了

    • 将代码抽取到方法中, 这是对 [代码功能] 进行的封装

      • printArray () -- 方法的编写者, 对代码功能进行了封装

      • 我们作为使用者, 不需要关注内部的实现, 只需要关心如何使用即可

10-权限修饰符

  • 权限修饰符可以修饰 :

    • 成员变量

    • 成员方法

    • 构造方法

  • private : 同一个类

  • 默认的 : 同一个类, 同一个包下

  • protected : 明天讲

  • public : 任意位置

今后用的最多的 : private public

11-标准的 JavaBean 类 (重中之重)

  • 所有成员变量 private 私有

  • 提供空参 \ 带参构造方法

  • 提供对应的 setXxx 和 getXxx方法

12-窗体的绘制

package com.itheima.test;

import javax.swing.*;

public class JFrameTest {
   public static void main(String[] args) {
       // 创建窗体对象
       JFrame frame = new JFrame();
       // 设置窗体的大小 单位: 像素点
       frame.setSize(514,595);
       // 设置窗体居中
       frame.setLocationRelativeTo(null);
       // 设置窗体置顶
       frame.setAlwaysOnTop(true);
       // 设置窗体标题
       frame.setTitle("石头迷阵单机版v1.0");
       // 设置窗体的关闭模式
       frame.setDefaultCloseOperation(3);
       // 设置窗体可见 - 这句代码请在最后进行编写.
       frame.setVisible(true);
  }
}