007_面向对象编程

面向对象编程

  • 对象
  • 对象在计算机中是啥
  • 类的基本语法
    • 类的分成:构造器
    • this
    • 封装
    • Javabean
    • static关键字
      • 成员变量按照有无static修饰,分为两种:
      • static 修饰方法
      • 静态方法的常见应用场景
      • 静态方法,实例方法访问的注意事项
      • main方法

对象

  • 对象是一种特殊的数据结构,可以用来记住一个事物的数据,从而代表该事物。
  • 对象本质上是一种特殊的数据结构
  • class也就是类,也称为对象的设计图(或者对象的模版)。

对象在计算机中是啥

public class Student {
    String name;// 姓名
    double chinese; // 语文成绩
    double math; // 数学成绩
    public void printTotalScore() {
        System.out.println(name + "的各科总分是:" + (chinese + math));
    }
    public void printAverageScore() {
        System.out.println(name + "的各科平均分是:" + (chinese + math) / 2.0);
    }
}

public class Test {
    public static void main(String[] args) {
        Student s1 = new Student();
        s1.name = "zhangsan";
        s1.chinese = 100;
        s1.math = 100;
        s1.printTotalScore();
        s1.printAverageScore();
        Student s2 = new Student();
        s2.name = "lisi";
        s2.chinese = 59 ;
        s2.math = 99;
        s2.printTotalScore();
        s2.printAverageScore();
    }
}
  • 栈内存
    • test类中的 main 在栈内存中
    • Student s1 = 内存地址
    • Student s2 = 内存地址
  • 堆内存
    • new 出来的都在堆内存中,进行初始化
    • new Student();
      • String name
      • double chinese
      • double math
  • 方法区
    • 类的加载(类中的变量和方法)都在方法区,进行实例化
      • Test.calss
        • main
      • Student.class
        • 变量:name、chinese、math
        • 方法1:printTotalScore()
        • 方法2:printAverageScore()
  • 初始化和实例化
    • 类的初始化是指类加载过程中的初始化阶段对类变量按照程序猿的意图进行赋值的过程。
      -而类的实例化是指在类完全加载到内存中后创建对象的过程。
  • 面向对象编程这种套路
  • 万物皆对象,谁的数据谁存储。

类的基本语法

类的分成:构造器

  • 构造器
public class Student {
    /** 构造器 */
    public Student() {
    ...
    }
}
  • 特点:创建对象时,对象会去调用构造器。
  • 构造器常见的应用场景
    • 创建对象时,同时弯沉对对象成员变量(属性)的初始化赋值。
  • 类默认就自带了一个无参构造器。
  • 如果为类定义有参构造器,类默认的无参构造器就没有了,此时如果还想用无参数构造器,就必须自己手写一个无参数构造器出来。

this

  • this就是一个变量,可以用在方法中,来拿到对象。
  • this主要用来解决,变量名称冲突问题的。

封装

  • 面向对象的三大特性:封装、继承、多态。
  • 类就是一种封装。
  • 封装的设计要求:合理隐藏、合理暴露。
    • 公开成员,使用 public 进行修饰。
    • 隐藏成员:使用 private 进行修饰。

Javabean

  • Javabean是一种特殊类,类中要如下需求
    • 类中的成员变量全部私有,并提供public修饰的getter/setter方法
    • 类中需要提供一个无参数构造器,有参数构造器可选
public class Person {
    private String name;
    private int age;
    public Person() {}
    public Person(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;
        }
}
  • 应用场景:实体类的对象只负责数据存取,而对数据的处理交给其他类的对象来完成,以实现数据和数据业务处理相分离。

static关键字

  • static叫静态,可以修饰成员变量,成员方法。

成员变量按照有无static修饰,分为两种:

  • 静态变量(类变量):有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享。
  • 实例变量(对象变量):无static修饰,属于每个对象的。
  • 成员变量的执行原理
public class Student { 
    //类变量
    static String name;
    //实例变量(对象变量)
    int age;
}



public class Test {
    public static void main(String[] args) 
        // 1、类变量的用法
        //类名.静态变量(推荐)
        Student.name = “袁华”;
        // 对象.静态变量(不推荐)
        Student s1 = new Student();
        s1.name = "马冬梅";
        Student s2 = new Student();
        s2.name = "秋雅";
        System.out.println(s1.name);        // 秋雅
        System.out.println(Student.name);   // 秋雅
        // 2、实例变量的用法
        // 对象.实例变量
        s1.age = 23;
        s2.age = 18;
        System.out.println(s1.age); // 23
        //System.out.println(Student.age); // 报错
    }
}
  • 栈内存
    • Test类中main方法
    • Student s1 = 内存地址 01
    • Student s1 = 内存地址 02
  • 堆内存
    • 01
      • int age
        • 23
          类的地址 011
    • 02
      • int age
        • 18
      • 类的地址 011
    • static String name;(直接指向方法区中的 static String name)
      • 秋雅
  • 方法区
    • Test.class
      • main
    • Studentl.class
      • static String name
      • int age;
  • 静态变量:属于类,与类一起加载一次,在内存中只有一份,可以被类和类的所有对象共享。
  • 实例变量:属于对象,每个对象中都有一份,只能用对象访问。

static 修饰方法

  • 静态方法:有static修饰的成员方法,属于类。
  • 实例方法:无static修饰的成员方法,属于对象。

静态方法的常见应用场景

  • 最工具类
    • 工具类中的方法都是一些静态方法,每个方法用来完成一个功能,以便供给开发人员直接使用。
  • 工具类中用静态方法的好处
    • 实例方法需要创建对象来调用,此时对象只是为了调用方法,对象占内存,这样会浪费内存。
    • 静态方法,直接用类名调用即可,调用方便,也能节省内存
  • 工具类没有创建对象的需求,建议将工具类的构造器进行私有。

静态方法,实例方法访问的注意事项

  • 静态方法中可以直接访问静态成员,不可以直接访问实例成员。
  • 实例方法中既可以直接访问静态成员,也可以直接访问实例成员。
  • 实例方法中可以出现this关键字,静态方法中不可以出现this关键字的。

main方法

public class Test {
    public static void main(String[] args) {
        ...	
    }
}
  • mian方法是类方法(静态方法)
  • 用类名.main()直接运行
    -类名.main(…)也可以添加参数。

你可能感兴趣的:(JavaSE,java)