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

【JAVA】十、基础知识“类和对象”干货分享~(一)

目录

1. 初识面向对象

2. 类定义和使用 

2.1 认识类

2.2 类的定义格式

🔥 注意事项

3. 类的实例化

3.1 什么是实例化?

举例说明


1. 初识面向对象

        什么是面向对象呢?在刚开始学习java时我便思考过这个问题,官方的解释是:面向对象(Object-Oriented,简称OO)是一种软件设计和编程范式,其核心思想是通过对现实世界的抽象,将程序组织为一系列相互关联的“对象”(Object)。每个对象代表一个实体或概念,包含数据属性)和操作数据的方法行为,并通过消息传递实现交互。

        换个说法理解,面向对象就像搭积木:每个积木块都是独立的小世界,自带说明书,能自己干活儿。举个生活例子:

你家洗衣机就是个"对象":

  • 属性(内在):容量10kg、白色、滚筒式、某一个品牌
  • 方法(功能):开机()、选择各种模式(洗衣模式)、排水()

你不用知道洗衣机的涡轮到底怎么转,但只需按【开始】按钮(封装)进行运转就好

        就像现实世界:每个事物都是自带能力的独立个体,我们通过简单的"交互"完成复杂任务,而不是自己处理所有细节。

        总结一下:面向对象不是一种语言,而是一种解决问题的方法~


2. 类定义和使用 

2.1 认识类

        类是用来对一个实体(对象)进行描述的主要描述该实体(对象)具有哪些本身的属性(比如之前的洗衣机的外观尺寸品牌等等),哪些本身功能(洗衣机各种洗衣模式),在描述完后,计算机就可以识别。

        其实Java中的类就像现实世界的“设计图纸”,它是用代码去描述一种事物的一个模板。


2.2 类的定义格式

        基础的定义语法格式如下:

        举一些简单的例子,对象是一只猫和对象是一部手机:

class  Cat {//访问修饰符 + class + 类名(首字母大写)
    //成员变量(属性):描述对象的特征
    public String name;
    public String color;
    public int age;
    //成员方法(行为):描述对象的行为
    public void wag(){// // 无返回值方法用 void
        System.out.println(name+"摇尾巴~");
    }
    public void eat(){
        System.out.println(name="吃东西~");
    }
}
class Phone{//访问修饰符 + class + 类名(首字母大写)
    //成员变量(属性):描述对象的特征
    public String color;//手机颜色
    public int price;//手机价格
    public String functions;//手机功能
    //成员方法(行为):描述对象的行为
    public void doHomework() {
        System.out.println("用手机查资料");
    }
}

🔥 注意事项

  • 类名首字母必须大写(Cat正确,cat错误)。
  • 方法名/变量名首字母小写(驼峰式 doHomework)。
  • public修饰的类必须要和文件名相同。
  • main方法修饰的类必须要和文件名相同。


3. 类的实例化

3.1 什么是实例化?

        类的实例化是指通过类创建具体对象的过程。类本身是一个模板或蓝图,而实例化是根据这个模板创建一个具体的对象,对象会占用内存并可以操作类中定义的属性和方法。

举例说明

1. 定义一个 Person 类

// 定义一个Person类
public class Person {
    // 成员变量(属性)
    String name; // 姓名
    int age;     // 年龄

    // 构造方法:用于初始化对象
    public Person(String name, int age) {
        this.name = name; // 使用this关键字区分成员变量和参数
        this.age = age;
    }

    // 成员方法:描述对象的行为
    public void introduce() {
        System.out.println("大家好,我叫" + name + ",今年" + age + "岁。");
    }
}

2. 实例化 Person 类

使用 new 关键字调用构造方法创建对象,具体步骤:

  1. 声明对象变量:定义一个变量来引用对象

  2. 分配内存new 关键字在堆内存中分配空间

  3. 初始化对象:调用构造方法初始化成员变量

  4. 返回引用:将对象的内存地址赋值给变量

public class Main{
    public static void main(String[] args) {
        // 1. 声明对象变量:person1将引用一个Person对象
        Person person1;
        // 2. 实例化对象:使用new关键字调用构造方法
        person1 = new Person("张三", 25); // 此时对象被创建并初始化
        // 3. 访问对象的方法和属性
        person1.introduce(); // 此时会输出:大家好,我叫张三,今年25岁。
    }
}

也可以将注释中的1和2合并成一行:

public class Main {
    public static void main(String[] args) {
        // 合并为一行
        Person person2 = new Person("李四", 30);
        // 3. 访问对象的方法和属性
        System.out.println(person2.name); // 此时会直接输出:李四
    }
}

          可以这样理解:Person person2 = new Person();是通过new关键字,实例化了一个Person对象,person2是一个引用,指向了Person对象。 

  • 对于上述图的理解:
  • person2是局部变量,首先为局部变量在栈上申请了一块内存
  • 然后通过new关键字生成的对象在堆上,堆为实例化的对象分配了一块内存
  • 对象的地址是0x8
  • 用箭头指向的意思是,person2这个引用存储了这个对象的值
  • 然后成员属性就会存储于对象当中(如String name;int age
  • 即这个person2指向了这个对象,对象里面有name还有age
  • 我们知道name和age是对象的属性,那么如何访问?
  • 我们通过对象的引用,来访问对象的属性,即System. out.println(person2 . name);就可以访问对象的name属性,或者是System. out.println(person2 . age);

上述代码中是在Person person2 = new Person("李四", 30);中进行了赋值,也可以改成

Person person2 = new Person();

person2.name = "李四";

System.out.println(person2.name);
  • 此时会通过这个点"."也就将李四赋值给了name,此时对象的属性就赋值完了
  • person1和person2是一样的,又会有一块地址0x9,又会在堆上开辟一块内存。
  • 即每次new一个对象,都会开辟一块内存,通过new关键字可以实例化无数个对象。

 最后总结一下

  • new关键字用来创建一个对象的实例
  • 我们使用 . 来访问对象中的属性和方法
  • 同一个类可以创建多个实例(person1,person2)

 相信看到这里大家对类有了更好的理解,类是抽象出来的,是根据现实中一个实体抽象出来的,然后这个类要在程序中表现成一个具体的实体,要通过new关键字来实例化成一个程序中的人或者猫之类的。


制作不易,感谢友友们的点赞收藏关注~~如有问题欢迎批评指正,祝友友们生活愉快,学习工作顺顺利利!更多内容加载中~

相关文章:

  • 香港理工视觉语言模型赋能智能制造最新综述!基于视觉语言模型的人机协作在智能制造中的应用
  • secure keyboard entry is enabled because another app has turned it on.
  • 阿里通义千问发布全模态开源大模型Qwen2.5-Omni-7B
  • 鸿蒙阔折叠Pura X外屏开发适配
  • MySQL的备份及还原
  • C++多线程的性能优化
  • 怎样配置windows云主机不关闭显示器
  • 小程序中跨页面组件共享数据的实现方法与对比
  • platform总线驱动简单示例
  • 探索新一代大模型代理(LLM agent)及其架构
  • AI Agent创新10大前沿方向与落地实践分析
  • 如何使用CUDA Graphs,如何更新Graphs中kernel函数参数
  • 利用 Chrome devTools Source Override 实现JS逆向破解案例
  • 矿山边坡监测预警系统设计
  • Qt | 电脑音频采集曲线Charts
  • 限制 某个容器服务的内存使用
  • Keepalived+LVS+nginx高可用架构
  • 后端开发 SpringBoot 工程模板
  • 【蓝桥杯】第十五届C++B组省赛
  • 【3. 软件工程】3.1 软件过程模型
  • 中方在世贸组织对美国“对等关税”表达关注,呼吁维护多边主义
  • 马上评|纠偏“左行右立”,并排站不必有道德压力
  • 深圳南山法院回应“执行款未到账”:张核子公司申请的执行异议成立
  • 斗鱼一季度直播收入降近三成,语音社交服务推高广告等收入,称将持续打击涉赌行为
  • 人民日报今日谈:科技赋能,继续把制造业搞好
  • 著名古人类学家高星获推选为国际史前与原史研究院院士