对象和类的概念
- 对象用计算机语言对问题域中事物的描述,对象通过“属性(attribute)"和”方法(method)“来分别对应事物所具有的静态属性和动态属性。
- 类是用于描述同一类形的对象的一个抽象的概念,类中定义了这一类对象所应具有的静态和动态属性。
- 类可以看成一类对象的模板,对象可以看成该类的一个具体实例。
类和类的关系
- 关联关系(较弱)
- 继承关系(一般和特殊)
- 聚合关系(整体和部分)
- 实现关系
- 多态
面向对象设计步骤
- 具有什么类和对象
- 每个类和对象应该具有什么属性和方法
- 类和类之间具有什么样的关系
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);
}
}
在内存中的实现过程
- Person tom,tom是一个局部变量,所以会在栈内存中
- new Person的时候会调用Person的构造方法,而ids和ages是构造函数的局部变量,所以在开始调用构造方法的时候,ids和ages也会在栈内存中,并向变量传值
- new Person的时候会在堆内存中new一个实际Person对象,该对象有两个成员变量(id和age),调用构造方法的时候分别将值传给成员变量
- 在方法调用完成后,栈内存为它分配的空间全部消失,方法的局部变量消失,也就是stack中1和2消失
- 通过tom可以找到堆内存里面的内容