JavaSE—4.面向对象设计思想

对象和类的概念

  • 对象用计算机语言对问题域中事物的描述,对象通过“属性(attribute)"和”方法(method)“来分别对应事物所具有的静态属性和动态属性。
  • 类是用于描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性。
  • 类可以看成一类对象的模板,对象可以看成该类的一个具体实例。

类和类的关系

  1. 关联关系(较弱)
  2. 继承关系(一般和特殊)
  3. 聚合关系(整体和部分)
  4. 实现关系
  5. 多态

面向对象设计步骤

  1. 具有什么类和对象
  2. 每个类和对象应该具有什么属性和方法
  3. 类和类之间具有什么样的关系

Java与面向对象

  • 对象是Java程序的核心,在Java程序中“万事万物皆对象”。
  • 对象可以看成静态属性(成员变量)和动态属性(方法)的封装体。
  • 类是用来创建同一类型的对象的模板,在一个类中定义了该类对象所应具有的成员变量以及方法。
  • JDK提供了很多类供程序员使用,程序员也可以定义自己的类。

成员变量与局部变量

  • 在定义成员变量时可以对其其初始化,如果不对其初始化,java使用默认的值对其初始化。
  • 局部变量必须对其初始化。

引用

  • Java语言除了基本类型之外的变量类型都称之为引用类型
  • Java中的对象是通过引用对其操作的
  • 基本类型占用一块内存
  • 引用类型占用两块内存
/*
* 声明了一个String类型的引用变量
* 但没有使它指向一个对象
*/
String s;
/*
* 使用new语句创建了一个String
* 类型的对象并用s指向它以后可以通过s完成对其的操作
*/
s = new String("hello world");

在这里插入图片描述

如何在内存中区分类和堆

  • 类是静态的概念,放在代码区。
  • 对象是new出来的,位于堆内存(动态分配),类的每个成员变量在不同的对象中都有不同的值(除了静态变量)而方法只有一份,执行的时候才占用内存。

类和对象的关系

在这里插入图片描述

构造方法

  • 使用new+构造方法创建一个新的对象
  • 构造函数是定义在Java类中的一个用来初始化对象的函数
  • 构造函数与类同名且没有返回值
  • 当没有指定构造函数时,编译器为类自动添加形如类名() { }的构造函数(无参构造函数)
  • 当指定了有参构造函数后,编译器不会自动添加无参构造函数
public class Person() {
    int id;
    int age;
    
    Person(int ids, int ages) {
        id = ids;
        age = ages;
    }
    
    public static void mian() {
        Person tom = new Person(1, 25);
    }
}

在内存中的实现过程
在这里插入图片描述

  1. Person tom,tom是一个局部变量,所以会在栈内存中
  2. new Person的时候会调用Person的构造方法,而ids和ages是构造函数的局部变量,所以在开始调用构造方法的时候,ids和ages也会在栈内存中,并向变量传值
  3. new Person的时候会在堆内存中new一个实际Person对象,该对象有两个成员变量(id和age),调用构造方法的时候分别将值传给成员变量
  4. 在方法调用完成后,栈内存为它分配的空间全部消失,方法的局部变量消失,也就是stack中1和2消失
  5. 通过tom可以找到堆内存里面的内容

内存解析

猜你喜欢

转载自blog.csdn.net/qq_32661327/article/details/83034813