1、面向对象和面向过程的思想对比

  • 面向过程编程(POP)
    是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现的。
  • 面向对象编程(OOP)
    是一种以对象为中心的编程思想,通过指挥对象实现具体的功能。

对象:指客观存在的事物
小结:

  1. 客观存在的任何一种事物,都可以看做为程序中的对象
  2. 使用面向对象思想可以将复杂的问题简单化
  3. 将我们从执行者的位置,变成了指挥者

    2、类和对象

    类是对现实生活中一类具有共同属性和行为的事物的抽象。
    【类】是对事物,也就是对象的一种描述,可以将类理解为一张设计图,根据设计图,可以创建出具体存在的事物。
    根据类去创建对象

    类的组成:

  • 属性
    该事物的各种特征
  • 行为
    该事物存在的功能(能够做的事情)

    类和对象的关系

    类:类是对现实生活中一具有共同属性和行为的事物的抽象
    对象:是能够看得到摸得着的真实存在的实体
    类是对象的描述
    对象是类的实体

    3、类的定义

    类的组成:属性和行为

  • 属性:在代码中通过成员变量来体现(类中方法外的变量)

  • 行为:在代码中通过成员方法来实现(和前面的方法相比去掉static关键字即可)

类的定义步骤:

  1. 定义类
  2. 编写类的成员变量
  3. 编写类的成员方法 ```java public class Student { //成员变量 String name; int age;

    //成员方法 public void study(){

    1. System.out.println("学习");

    } }

```

4、对象的创建和使用

创建对象格式:类名 对象名 = new 类名();
对象的调用格式:
调用成员变量:对象名.变量名
调用成员方法:对象名.方法名();
全类名(包名 + 类名)
打System.out.println(stu);
�得到:
com.itheima.object1.Student@2f92e0f4
@ :分隔符
com.itheima.object1.Student : 全类名(包名 + 类名)
2f92e0f4:十六位内存地址

5、单对象内存图

单个对象内存图.png
创建同一个类的多个对象时,不用重新加载类到方法区。
多个对象成员方法使用的是同一个类里的方法。
多个对象成员变量都是单独的。
多个对象内存图
多个对象内存图.png
多个引用指向同一对象时,两个引用变量指向同一块堆内存,任何一个引用,对成员变量进行更改,都会导致另一个也发生变化。

6、垃圾回收

注意:当堆内存中,对象或者数组产生的地址,通过任何方式都不能被找到之后,就会被判定为内存中的“垃圾
垃圾会被java垃圾回收器,空闲的时候自动进行清理。

7、成员变量和局部变量

成员变量:类中方法外的变量
局部变量:方法中的变量
区别:

区别 成员变量 局部变量
类中位置不同 类中方法外 方法内或者方法声明上(形参)
内存中位置不同 堆内存 栈内存
生命周期不同 随着对象的存在而存在,随着对象的消失而消失 随着方法的调用而存在,随着方法的调用完毕而消失
初始化值不同 有默认的初始化值 没有默认的初始化值,必须先定义,赋值,才能使用

8、封装

外部无法直接访问类内部的成员变量,需要使用get和set方法来访问

private关键词

  • 是一个权限修饰符
  • 可以修饰成员(成员变量和成员方法)
  • private修饰的成员只能在本类中才能访问

针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作

  • 提供“get变量名()”方法,用于获取成员变量的值,方法用public修饰
  • 提供“set变量名(参数)”方法,用于设置成员变量的值,方法用public修饰

    this关键字

    当局部变量和成员变量发生重名的时候,会采用就近原则。
    可以使用this关键字标识为成员变量。
    作用:this关键字可以调用本类的成员(成员变量,成员方法)
    解决局部变量和成员变量的重名问题。
    this:代表所在类的对象引用
    方法被哪个对象调用,this就代表哪个对象

    this内存原理

    this内存原理.png

    封装的思想

  • 面向对象三大特征之一(封装,继承,多态)

  • 隐藏实现细节,仅对外暴露公共的访问方式
  • 私有是封装的一种体现
  • 封装的常见的体现:
       1. 私有成员变量,提供setXxx和getXxx方法
       1. 将代码抽取到方法中,这是对代码的一种封装
       1. 将属性抽取到类中,这是对数据的一种封装
    
  • 封装的好处:
       1. 提高了代码的安全性
       1. 提高了代码的复用性
    

    构造方法

    创建、创造对象的时候所调用的方法。
    格式:
  1. 方法名与类名相同,大小写也要一致
  2. 没有返回值类型,连void都没有
  3. 没有具体的返回值(不能由return带回结果数据)

执行时机:

  1. 创建对象的时候调用,每创建一次对象,就会执行一次构造方法
  2. 不能手动调用构造方法

构造方法的作用:用于给对象的数据(属性)进行初始化。
注意事项:
1.构造方法的创建

  • 如果没有定义构造方法,系统将给出一个默认的无参构造方法
  • 如果定义了构造方法,系统将不再提供默认的构造方法

2.构造方法的重载

  • 如果自定义了带参构造方法,还要使用无参数构造方法,就必须再写一个无参数构造方法

3.推荐的使用方式

  • 无论是否使用,都手动书写无参数构造方法,和带参数构造方法