5、面向对象(一)

38 阅读4分钟

面向对象

1、面向对象入门

先熟悉类和对象的创建与使用

学生类

// 学生类
public class Student {
    // 成员变量(类的属性)
    String name;
    double chinese;
    double math;

    // 成员方法
    // 计算总分
    public void sumScore(){
        System.out.println(name + "总分为:" + (chinese + math));
    }

}

测试类

public class TestDemo {
    public static void main(String[] args) {
        // 新建对象
        Student student = new Student();
        // 为对象的属性赋值
        student.name = "熊大";
        student.chinese = 100;
        student.math = 98;
        // 调用对象的成员方法
        student.sumScore();

    }
}
2、面向对象思想

面向对象有什么好处?

  • 符合人类思维,编程更简单、直观。

程序中的对象是什么?

  • 对象是一种特殊的数据结构

对象是怎么出来的?

  • 对象是用类new出来的,有了类就可以创建出对象。
3、对象在计算机中的执行原理(内存)
  • 类存放在方法区中
  • 对象的数据放在堆中,包含成员变量的 值和类的地址
  • 方法运行在栈中
  • 创建对象 new 类名();时,在堆中创建一块区域存放成员变量的值类的地址 并返回在堆中的地址
  • 为成员变量赋值时,是根据对象的地址找到堆中的位置并存储。
  • 调用成员方法时,先根据对象的地址找到堆中的数据,在根据堆中存放的类的地址在方法区中找到对应的类并根据方法名找到对应成员方法并在栈中执行
4、类和对象的一些注意事项
  • 类名建议用英文单词,首字母大写,满足驼峰模式,且要有意义,比如:Student、Car…
  • 类中定义的变量也称为成员变量(对象的属性),类中定义的方法也称为成员方法(对象的行为)。
  • 成员变量本身存在默认值,同学们在定义成员变量时一般来说不需要赋初始值(没有意义)。
  • 一个代码文件中,可以写多个class类,但只能一个用public修饰,且public修饰的类名必须成为代码文件名。
  • 对象与对象之间的数据不会相互影响,但多个变量指向同一个对象时就会相互影响了。
  • 如果某个对象没有一个变量引用它,则该对象无法被操作了,该对象会成为所谓的垃圾对象。
5、this关键字

this就是一个变量,可以在成员方法中,拿到当前对象 主要应用场景

  • 避免变量名冲突问题
  • 在成员方法中,拿到当前对象的变量并进行操作
6、构造器

类在设计时,如果不写构造器,Java是会为类自动生成一个无参构造器的。

在创建对象的时候,对象会默认调用构造器

构造器的使用:

// 学生类
public class Student {
    // 成员变量(类的属性)
    String name;
    double chinese;
    double math;

    // 无参构造器
    public Student() {
    }
    
    // 有参构造器
    public Student(String name, double chinese, double math) {
        this.name = name;
        this.chinese = chinese;
        this.math = math;
    }

    // 成员方法
    // 计算总分
    public void sumScore(){
        System.out.println(name + "总分为:" + (chinese + math));
    }
}
public class TestDemo {
    public static void main(String[] args) {
        // 新建对象(无参构造器)
        Student student = new Student();
        // 为对象的属性赋值
        student.name = "熊大";
        student.chinese = 100;
        student.math = 98;
        // 调用对象的成员方法
        student.sumScore();

        // 新建对象(无参构造器)可以直接对对象属性赋值
        Student student1 = new Student("熊二",60,66);
        student1.sumScore();
    }
}
7、封装

核心思想:合理隐藏,合理暴露

权限修饰符(四个):public(公共的)、protected(保护的)、(缺省)、private(私有的);

get和set方法,用于隐藏成员变量,并暴露get和set方法用于成员变量的获取与编辑

// 学生类
public class Student {
    // 成员变量(类的属性)
    String name;
    double chinese;
    double math;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getChinese() {
        return chinese;
    }

    public void setChinese(double chinese) {
        this.chinese = chinese;
    }

    public double getMath() {
        return math;
    }

    public void setMath(double math) {
        this.math = math;
    }
}
8、实体Javabean

什么是实体类?

  • 只有私有的成员变量了,对外提供get和set方法
  • 提供一个公共的无参构造器

实体类的作用

  • 只负责对象数据的存取
  • 所有业务相关的验证交给另外一个类完成
9、成员变量和局部变量的区别
区别成员变量局部变量
类中的位置类中方法外方法内
初始化值不同有默认值时,不初始化没有默认值,使用前必须初始化
内存位置不同堆内存栈内存
生命周期与对象共存亡随着方法的调用而生,方法的结束而亡