【类与对象、封装、构造方法】

【类与对象、封装、构造方法】

一. 面向对象思想概述

1. 面向过程和面向对象

  • 面向过程: 强调过程(强调做一件事其中的每一个步骤)
  • 面向对象: 做一件事, 不自己做, 而是利用对象来完成

举例

  • 面向过程: 拿盆子 >> 放衣服 >> 放洗衣粉 >> 倒水 >> 泡 >> 搓 >> 漂洗 >> 拧干 >> 晾起来

  • 面向对象: 衣服放到洗衣机 >> 放洗衣粉 >> 按下开关 >> 晾起来

    ​ 叫女朋友来帮我洗

二. 类与对象

1. 什么是类和对象

  • 类: 一类事物属性行为的集合.
  • 对象: 该类事物的具体体现.

2. 如何定义类

  • 类: 就是Java中使用class定义出来的类.
    • 属性(成员变量): 定义格式和以前的变量是一样的, 只是位置发生了改变, 在类中方法外.
    • 行为(成员方法): 定义格式和以前基本相同, 只是去掉了static.
public class Person {


    // 类中方法外
    // 姓名
    String name;

    // 年龄
    int age;

    // 方法
    // 吃饭
    public void eat() {
        System.out.println("人要吃饭");
    }

    // 睡觉
    public void sleep() {
        System.out.println("人要睡觉");
    }

}

3. 如何创建对象和使用对象

创建和使用对象, 在测试类中的主方法中去创建和使用.

(1) 创建对象

// 类名 对象名 = new 类名();
// 创建了一个Person对象, 对象名是p
Person p = new Person();

(2) 使用对象

// 使用属性: 对象名.属性名
p.name;
// 使用行为: 对象名.方法名()

在一个类中想使用另一个类中的内容, 需要先创建对象.

/**
 * 测试类
 */
public class PersonTest {
    public static void main(String[] args) {
        // 写代码, 模拟各种场景,
        // 来测试功能类中的内容是否正确

        // 创建了一个Person对象, 对象名是p
        Person p = new Person();

        // 对象名.属性名
        p.name = "杨超越";
        p.age = 20;

        // 打印
        System.out.println("姓名是: " + p.name + ", 年龄是: " + p.age);

        p.eat();
        p.sleep(8);



    }
}

4. 成员变量和局部变量

[外链图片转存失败(img-8gJ7xiRe-1566980415899)(assets/1563502911445.png)]

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

描述 位置不同 作用域(所在的大括号)不同 默认值不同
局部变量 方法中或者方法声明上(参数列表) 所在的方法中 没有默认值
成员变量 类中方法外 所在的类中 有默认值

局部变量在使用前, 必须赋值

数据类型 默认值
整型(byte, short, int, long) 0
浮点型(float, double) 0.0
布尔(boolean) false
字符(char) ‘\u0000’
引用数据类型 null

三. 创建对象的内存图

四. 封装【重点】

1. 封装的原则和格式

private: 可以修饰成员变量和成员方法, 作用: 被private修饰的内容, 只能在本类中被访问.

  • 隐藏属性: 将属性使用private修饰
  • 对外提供公共的访问方式: get/set方法

2. 优化1- this

  • 在set方法中出现了, 成员变量和局部变量同名.

    • 此时要遵循就近原则, 就出现了赋值语句变成了: 局部变量赋值给局部变量

    age = age; name = name;

this: 能够解决什么问题?

  • 当成员变量和局部变量同名的时候, 使用this.变量名 获取到的是成员变量.

3. 优化2-构造方法

  • 目标: 创建对象的同时, 给成员变量赋值.

构造方法

  • 格式:
修饰符 构造方法名(参数列表) {}

- 没有返回值类型, 连void都没有
- 构造方法的名字和类名相同

// 空参构造/ 无参构造
public 类名() {

}

// 有参构造/ 全参构造/ 满参构造
public 类名(参数列表) { // 小括号中有参数, 参数依据类中所有成员变量来写
	this.属性名 = 参数列表中局部变量的名字;
}

作用

  1. 用来创建对象(创建对象时, 一定调用了构造方法)
  2. 对类中的成员进行初始化(赋值)

注意事项:

  1. 如果类中没有手动给出任何的构造方法, 系统会默认提供空参构造
  2. 如果类中手动给出了任意一个构造方法, 系统将不会默认提供这个空参构造

案例

学生类

package com.demo.practice.homework6;

public class Student {
//    学生类Student
//    属性:语文成绩chinese,数学成绩math,英语成绩english
//    行为:求总成绩的方法getSum()
        private int chinese;
        private int math;
        private int english;
        public Student(){

        }
        public Student(int chinese,int math,int english){
            this.chinese = chinese;
            this.math = math;
            this.english = english;
        }
        public void setChinese(int chinese){
            this.chinese = chinese;
        }
        public void setMath(int math){
            this.math = math;
        }
        public void setEnglish(int english){
            this.english = english;
        }
        public int getChinese(){
            return chinese;
        }
        public int getMath(){
            return math;
        }
        public int getEnglish(){
            return english;
        }
        public int getSum(){
            return chinese+math+english;
        }

}

测试类

package com.demo.practice.homework6;

public class Test {
    public static void main(String[] args) {
    Student s = new Student(70,60,90);
        System.out.println("chinese:"+s.getChinese()+" math:"+s.getMath()+" english:"+s.getEnglish());
        System.out.println("总分:"+s.getSum());
    }

}

总体知识点总结

ps:!!!
还是上传照片方便

上一篇:安装Ubuntu服务器版


下一篇:day02.2