文章目录
- 1.类
- 2.对象
- 3.类和对象的关系
- 4.类的创建使用
- 5.对象在内存中的存储过程
- 6.对象创建过程分析
1.类
- java最基本的单位就是类,可以理解为类型
- 类是一类事物的抽象
- 可以理解为模板或者设计图纸
注意:类在现实世界并不存在,它只是一种对象的数据类型。例如乌鸦,鸽子等都是飞禽类,飞禽本身是并不存在的,它只是用来描述这一类动物的的一种类型。
2.对象
每个对象有三个特点,对象的状态,对象的行为和对象的标识。
- 对象的状态用来描述对象的基本特征
- 对象的行为用来描述对象的功能
- 对象的标识是指对象在内存中都有一个唯一的地址值用来和其他对象区分开来
3.类和对象的关系
计算机语言通过属性 + 行为来描述现实世界中的事物,在java语言中,我们可以通过类来描述一类事物,用成员变量描述事物的属性,用方法描述事物的行为。
其中:
- 我们先创建类,再通过类创建出对象
- 我们可以通过一个类创建出多个对象
- 类是一类事物的抽象,对象是具体的实现
4.类的创建使用
在编写代码之前,我们需要分析下需求:
比如我们要把手机这一类事物抽象成代码:
那么这个事物的类型就是"手机",可以用类来描述.
类中包含的就是手机抽取出来的共性的属性与功能.
手机的属性:颜色,尺寸,品牌,价格
手机的功能功能:打电话,发短信,听音乐
对象:除此之外,我们还可以创建对象,就相当于是照着图纸制造出来的一个个的手机,比如1号手机对象,包含特有的成员变量和方法
我们通过class关键字创建类,通过new关键字创建对象。
接下来我们开始编码吧!
打开idea,在之前的工程下创建新的包partTwo,并在包下创建类TestPhone.java
package partTwo;
/**
* 本类用于面向对象的入门案例
* 用来设计收集这一类事物
*/
//1.在同一个java文件中,可以定义多个class,但是被public修饰的公共类只能有一个
// 并且要求这个公共类的名字就是当前java文件的名字
public class TestPhone {
public static void main(String[] args) {
//4.在main()方法中,通过new关键字创建Phone的对象
Phone p = new Phone();
//5.可以通过手机类的对象p来调用方法
p.call();
p.message();
p.video();
//6.可以通过手机类的对象p来查看属性
System.out.println(p.brand); //null
System.out.println(p.color); //null
System.out.println(p.size); //0.0
System.out.println(p.price); //0.0
//7.通过new关键字创建手机类的对象p2
Phone p2 = new Phone();
//8.通过p2对象设置值
p2. brand = "华为";
p2. color = "五彩斑斓的黑";
p2. price = 88888.88;
p2. size = 5.6;
//9.通过p2对象查看属性值
System.out.println(p2.price);
System.out.println(p2.brand);
System.out.println(p2.color);
System.out.println(p2.size);
}
}
//1.通过class关键字创建手机类--用来描述手机这一类事物
//2.类似抽象的,类抽象的描述一类事物的特征/属性
// 特征:品牌 价格 颜色 尺寸
// 行为:打电话 发短信 看直播
class Phone{
//2.通过成员变量描述一类事物的特征/属性/字段/成员变量--位置:类里方法外
String brand; //品牌
double price; //价格
String color; //颜色
double size; //尺寸
//3.通过方法描述一类事物的功能
//方法的格式:修饰符,返回值类型,方法名(参数列表){方法体}
public void call(){
System.out.println("正在打电话*");
}
public void message(){
System.out.println("正在发短信!");
}
public void video(){
System.out.println("正在看直播~");
}
}
5.对象在内存中的存储过程
Java把内存分成5大区域,我们重点关注栈和堆。
- 一般来讲局部变量存在栈中,方法执行完毕内存就被释放
- 对象(new出来的东西)存在堆中,对象不再被使用时,内存才会被释放
- 每个堆内存的元素都有地址值
- 对象中的属性都是有默认值的
TIPS: 栈与队列指的是一种数据的结构。
栈:先进后出(FILO – First In Last Out)
队列:先进先出(FIFO – First In First Out)
创建对象时,内存经历了什么:
- 创建对象时,会在堆中开辟好空间:break,price等,存放引用类型p,并把p放入栈底;
- 在堆内存中开辟一块空间,存放Phone对象
- 完成对象的初始化,并赋值默认值
- 给初始化完毕的对象赋予唯一的地址值
- 把地址值交给引用类型变量p来保存
6.对象创建过程分析
比如:Phone p = new Phone();这句话在内存中发生了什么?
- 可以在堆内存中开辟一块空间用来存放映像
- 这个对象需要进行初始化
- 初始化完毕以后就会为这个对象生成一个唯一的地址值
- 在栈内存中开辟一块空间用来存放引用类型Phone类型的变量p
- 将堆内存中对象的地址值交给引用类型的变量p来保存
- 后续就可以根据p中保存的地址,找到堆中的对象,并对对象做操作