【java】今天你有 new “对象”吗

简介: 【java】今天你有 new “对象”吗

前言

大家好呀,很抱歉断更了一个多星期,上篇说的要更新C++array也一直没更新,为什么呢?因为上周我确定了自己的方向:java,所以我上周一直在疯狂学习java,也没能及时更新博客,但没关系,我这周又回来了,我来更新我的java学习笔记了。

7a469e0cd1a845ee898a967a86598260.jpg

一、类和对象的概念

和我们之前学的面向过程的C语言不同,java是一种面向对象的高级程序语言?那么什么是对象呢?此对象非彼对象,这里对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。对象有以下特点


对象具有属性和行为。

对象具有变化的状态。

对象具有唯一性。

对象都是某个类别的实例。

一切皆为对象,真实世界中的所有事物都可以视为对象。


想要理解对象就绕不开类这个概念,实质上可以将类看作对象的抽象,它定义了对象所具有的属性(成员变量)和方法(函数)

a88bcc0dfd6c4ea6a495f987abfb2d07.gif

当然看了这些抽象的概念,你可能对类和对象还不是太清楚😂,没关系我们接下来从不同的角度阐述什么是类什么是对象😎


1、从生活逻辑的角度

人这个生物可以看作是一个类,人有名字、性别、年龄,这可以看作是类的属性(成员变量),人要吃饭、休息、学习、工作,这可以看作类的行为(方法或函数)但这些属性和行为无疑是抽象的,因为你不可能给一个人类大群体都起一个具体的名字,比如都叫张三,那全世界就有70多亿个张三了,可能吗?


所以我们提到的人的名字、年龄和他们的吃饭工作的行为都是都是一个抽象的概念,是不具体的。

af3cc2f2794c4bb9ac68f0075a0e14c4.gif

而每个人都是一个独立的个体,每个人都有他自己的名字等具体的属性,每个人都有他自己要干的事(行为或称方法),这些针对每个人的属性(成员变量)、行为(方法)无疑都是具体的,比如:李四、性别男、今年19岁、正在去餐厅吃晚饭。


人这个生物群体就是一个类,而具体的每个人:小王、小红、小强就人这个类所对应的一个个实例化的对象,如下图所示:

image.png


2、从编程语言的角度

类可以看作是自定义的数据类型

对象可以看作是类所对应的数据类型的变量


二、类与对象的定义和和简单使用

类的定义

在Java中定义类,使用关键字class完成。语法如下:


class 类名称 {

        属性 (变量) ;

        行为 (方法) ;

}


比如定义一个学生类


class Student {
    String name;   //学生类的属性
    int age;
    public void eat() {
        System.out.println(name + "在吃饭");   // 学生类的行为(方法)
    }
}


那么类定义好了,我们该怎样使用类呢,能直接用吗?当然不行了,我们前面也说了类只是一个抽象的概念,要想使用类中的属性和方法,还要有该类所对应的实例化对象才行😅。

2bdd2adfeace415bb0bb75e9872d8e6c.gif

对象的实例化

那么由于类属于引用数据类型,所以对象的产生格式(两种格式)如下:


1)格式一:声明并实例化对象


类名称 对象名称 = new 类名称 () ;


(2)格式二:先声明对象,然后实例化对象:


1 类名称 对象名称 = null ;

2 对象名称 = new 类名称 () ;


引用数据类型与基本数据类型最大的不同在于:引用数据类型需要内存的分配和使用。所以,关键字new的主要功能就是分配内存空间,也就是说,只要使用引用数据类型,就要使用关键字new来分配内存空间。


当一个实例化对象产生之后,可以按照如下的方式进行类的操作:


对象.属性:表示调用类之中的属性;

对象.方法():表示调用类之中的方法;



比如调用我们刚才创建的学生类:


class Student {
    String name;   //学生类的属性
    int age;
    public void eat() {
        System.out.println(name + "在吃饭");   // 学生类的行为(方法)
    }
}
public class TestDemo3 {
    public static void main(String[] args) {
        // 对象创建好后,该对象有类中全部的属性和(行为)方法
        Student student1 = new Student();    // 通过new关键字创建了一个对象student1
        student1.name = "张三"; // 给学生对象student1的姓名属性赋值
        student1.eat();        // 调用学生对象的方法(行为)
        Student student2 = null;  // 第二种定义方法
        student2 = new Student();
        student2.name = "小鱼儿"; // 给学生对象student2的姓名属性赋值
        student2.eat();
    }
}

代码输出

39089ca935f14fbbb4c5f5d37dc9a57e.png



可以看出这两种定义方式都是可以的,  我们在main方法中成功new(创建)了两个学生对象, 并通过"对象名.属性" 成功给他们赋了值,  通过"对象名.方法"成功的输出了类的行为:eat.


看到这, 你是不是觉得类和对象好像没什么难的?还挺简单的呀! 不不不, 现在我们只是刚刚知道了类和对象的基本概念和基本用法


还有很多用法我们还没提到, 不过不要着急, 让我们接下来一点点揭开类和对象他神秘的面纱,


我们下篇见c78f6188c87b489084f4a7de48209ba1.gif

相关文章
|
1月前
|
安全 Java 编译器
Java对象一定分配在堆上吗?
本文探讨了Java对象的内存分配问题,重点介绍了JVM的逃逸分析技术及其优化策略。逃逸分析能判断对象是否会在作用域外被访问,从而决定对象是否需要分配到堆上。文章详细讲解了栈上分配、标量替换和同步消除三种优化策略,并通过示例代码说明了这些技术的应用场景。
Java对象一定分配在堆上吗?
|
2月前
|
Java API
Java 对象释放与 finalize 方法
关于 Java 对象释放的疑惑解答,以及 finalize 方法的相关知识。
50 17
|
1月前
|
存储 安全 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
2月前
|
存储 Java 数据管理
Java零基础-Java对象详解
【10月更文挑战第7天】Java零基础教学篇,手把手实践教学!
30 6
|
2月前
|
Oracle Java 关系型数据库
重新定义 Java 对象相等性
本文探讨了Java中的对象相等性问题,包括自反性、对称性、传递性和一致性等原则,并通过LaptopCharger类的例子展示了引用相等与内容相等的区别。文章还介绍了如何通过重写`equals`方法和使用`Comparator`接口来实现更复杂的相等度量,以满足特定的业务需求。
29 3
|
2月前
|
存储 Java
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。
|
2月前
|
存储 Java 数据管理
Java零基础-Java对象详解
【10月更文挑战第3天】Java零基础教学篇,手把手实践教学!
29 1
|
2月前
|
Java 数据安全/隐私保护
java类和对象
java类和对象
26 5
|
1月前
|
存储 缓存 NoSQL
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
38 0
|
2月前
|
存储 前端开发 Java
你还没有对象吗?java带你创建一个吧
你还没有对象吗?java带你创建一个吧
13 0