【Java】学习日记 Day13

本文介绍了Java中的类与对象概念,包括它们的关系、初始化过程,以及对象内存布局的详细分析。通过实例演示和思考题,深入理解对象的创建和内存分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

image-20220702163210840
作者|Rickyの水果摊

时间|2022年7月15日


🌈 今日知识点总结

1. 类与对象介绍

1.1 面向对象的基本概念

」:类是 抽象的,代表一类事物,比如人类,猫类,是程序员自己定义的数据类型

对象」:对象是 具体的,代表一个具体事物,程序员 通过「类」来 创建(实例化)一个 「对象」

两者关系」:对象是类的实例,类是对象的模板。

1.2 面向对象的优点
  • 易维护
  • 易扩展
  • 模块化
  • 方便建模

2. 类与对象的初始化

2.1 类的定义
class Person {    //定义一个 Person类
    String name;  //Person类 包含 String类型的name属性
    int age;
    String major;
}

🍉 PS1:定义 时,无需添加小括号 (),否则会报错。💦

image-20220714222833398

2.2 对象的创建
public class ObjectInit {
    public static void main(String[] args){
        Person p1 = new Person();  //new 一个 Person类对象 p1
      
        p1.name = "Ricky";        //给 p1的属性赋值
        p1.age = 20;
        p1.major = "CS";
        System.out.println(p1.name);  //输出 p1的name属性值
    }
}

3. 对象的内存布局

3.1 Java 内存的结构分析

」: 一般存放 基本数据类型(局部变量)

」: 存放 对象、数组

方法区」:常量池(常量,比如字符串)、类加载信息


3.2 Java 创建对象的流程简单分析
Cat cat1 = new Cat();
cat1.name = "小白";
cat1.age = 12;
cat.color = "白色";
  1. 先在「方法区」加载 Cat 类信息(属性和方法信息,只会加载一次
  2. 在「」中分配空间,进行默认初始化(若属性中有 String 类型,则在「常量池」中分配相应空间)
  3. 在「」把地址赋给 catcat 指向创建的对象
  4. 进行指定初始化, 比如 cat.name = "小白"cat.age = 12cat.color = "白色"

内存分配图

image-20220715094245466

【视频讲解】对象的内存布局—B站(韩顺平老师)


3.3 思考题
📝 思考题1

根据下面一段代码,求输出值,并且画出相应的内存分配图。

Person p1 = new Person();
p1.age = 10;
pl.name = "小明";
Person p2 = p1; 
System.out.println(p2.age);

☘️ 参考答案与视频解析

第 5 行输出值为:10

image-20220715094415984

【视频讲解】思考题1的内存图绘制过程—B站(韩顺平老师)


📝 思考题2

根据下面一段代码,求输出值,并且画出相应的内存分配图。

Person a = new PersonO;
a.age = 10;
a.name = "小明”;
Person b;
b = a;
System.out.println(b.name);
b.age = 200;
b = null;
System.out.printin(a.age); 
System.out.println(b.age)//重点

☘️ 参考答案与视频解析

第 6 行输出值为:小明

第 9 行输出值为:200

第 10 行输出值为:抛出异常 Exception in thread "main" java.lang.NullPointerException

image-20220715094559393

【视频讲解】思考题2的内存图绘制过程—B站(韩顺平老师)


✏️ 今日随记

学习 Java 的 第 13 天。⏰

今天主要整理了 面向对象 的一些基本概念,重点是理清 对象的内存布局,收获颇丰。☘️

今日摘录:

It is a great thing to have a beginner’s mind 」— Steve Jobs


相关博客

【Java】学习日记 Day12

【Java】学习日记 Day11

【Java】学习日记 Day10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值