当前位置: 首页 > news >正文

【Java学习笔记】类与对象

类与对象


什么是类?

知识迁移:类比 C 语言中的结构体

类的描述

类是一个对象的抽象,从字面意思就表示一个类的事物,类具有属性方法(行为)对象是类的一个具体表现

总结:对象抽象对象映射

实例理解:创建一个猫类

对象的引出

由这个类可以映射出不同的猫(对象),当属性方法变化时只需要在类中进行修改就可以映射到不同的类上,这也体现了类的便捷性

小结:类与对象的关系


快速入门

第一种方式:直接创建一个对象

public class hello{public static void main(String[] args){person person1 = new person();  //直接创建}
}
class person{int age;String name;double height;String[] job; //属性既可以基本数据类型,也可以是引用类型
}

第二种方式:先声明一个对象,之后创建

public class hello{public static void main(String[] args){//先声明一个对象,然后创建person person1;person1 = new person();}
}
class person{int age;String name;double height;String[] job; //属性既可以基本数据类型,也可以是引用类型
}

代码解析

person person1 = new person();

在 main 方法中使用 new 创建一个类,用一个数据类型为 person 这个类的一个对象接收

重点:对象在内存中的存在形式

请添加图片描述

分析

  • (1)当还没有创建 cat 这个类并用一个数据类型为 cat 这个类的一个对象接收时,cat 在栈空间中指向空

  • (2)类创建后

    • 1. 在堆空间中分配一段空间,存储类中的成员变量初始值为对应数据类型的默认值,最后把地址返回给 cat,使得cat 指向这个堆空间

    • 2. 在方法区加载类的属性和方法,只会加载一次

    • 3.String 是一个类,当成员变量中有 String 出现时,会把 String 放到方法区中的一个常量池里面,把这个地址返回给堆空间中的 String


类的要素一:属性

概念:成员变量 = 属性 =field(字段)

即成员变量是用来表示属性的

1. 简要提及访问修饰符

2. 使用细节

属性的访问方法:使用类.属性的方式,可以用一个变量接收结果

注意点:如果属性是String类型,即是一个类(引用类型),需要和类一样,需要创建一个对象接收

代码示例

public clas objectexercise{public static void main(String[] args){person person1 = new person();int age = person1.age = 18;double height = person1.height = 1.63;String name = person1.name = "jackson";person1.job = new String[] {"student","programmer"};String[] job = person1.jobSystem.out.println("age: " + age);System.out.println("height: " + height);System.out.println("name: " + name);System.out.print("job: ");for(int i = 0; i < person1.job.length; i++){System.out.print("第" + (i+1) + "份工作是:" + person1.job[i] + " ");}}
}
class person{int age;String name;double height;String[] job; //属性既可以基本数据类型,也可以是引用类型
}//输出结果
age: 18
height: 1.63
name: jackson
job:1份工作是:student 第2份工作是:programmer

深刻理解对象的内存分配机制

过程再回顾

person p = new person()
p.name = "jack"
p.age = 10;

练习一

Person p1 = new Person();
p1.age  = 10;
p1.name = "小明";Person p2 = p1;

P2的属性是否和P1一致?

首先明确一点,类是引用类型,在传值的过程中传的地址,代码中把P1的地址赋给了P2,即P1P2指向同一块堆空间,结果一致

练习二

// Person.java
public class Person {public int age;public String name;
}// Main.java
public class Main {public static void main(String[] args) {Person a = new Person();a.age = 10;a.name = "小明";Person b;b = a;System.out.println(b.name);  // 小明b.age = 200;b = null;System.out.println(a.age);  // 200System.out.println(b.age);  // 会抛出 NullPointerException}
}

相关文章:

  • 【文心快码】确实有点东西!
  • STM32标准库和HAL库SPI发送数据的区别-即SPI_I2S_SendData()和HAL_SPI_Transmit()互换
  • 计算机网络笔记(十四)——3.1数据链路层的几个共同问题
  • 03.使用spring-ai玩转MCP
  • ALTER TABLE 删除DROP表列的报错: 因为有一个或多个对象访问此列
  • 4.27 JavaScript核心语法+事件监听
  • 如何通过git删除某个文件的历史提交记录
  • 类-python
  • FISCO BCOS 智能合约开发详解
  • AlexNet网络搭建
  • 麒麟系统通过 Service 启动 JAR 包的完整指南
  • Lua 第12部分 日期和时间
  • Maven概述
  • 使用 Playwright 构建高效爬虫:原理、实战与最佳实践
  • Netfilter 与struct nf_hook_ops 相关
  • C++?动态内存管理!!!
  • Taro on Harmony :助力业务高效开发纯血鸿蒙应用
  • 【数据挖掘】时间序列预测-常用序列预测模型
  • I-CON: A Unifying Framework for Representation Learning
  • 23种设计模式-行为型模式之命令模式(Java版本)
  • 新一届中国女排亮相,奥运冠军龚翔宇担任队长
  • 国家发改委答澎湃:将指导限购城市针对长期摇号家庭和无车家庭等重点群体定向增发购车指标
  • 独家丨申万宏源研究所将迎来新所长:首席策略分析师王胜升任
  • 洗冤录·巴县档案|道咸年间一起家暴案
  • 魔都眼·上海车展⑥|周六客流超13.5万人次,创开展新高
  • 乌称泽连斯基与特朗普进行简短会谈