开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
CWIKIUS.CN
一个有独立思考和温度的清新站
  1. Home
  2. Computer Science
  3. This article

Java 类和对象

2021年04月26日 717Browse 0Like 0Comments

上 Java 语言的第一课,相信很多老师都会解释一句话就是 Java 是一个纯面向对象的语言。

然后再加上一堆 Java 的历史,再加上一个经典的动物的例子。

比如说,我们要描述动物,不同品种的狗的例子,我们在这个基础上抽象出来一个 Class,这个就是我们说的类了。

为什么叫 Class

这个很多人可能都没有想过吧,其实 Class 这个单词在英语里面有分类的意思。在英语世界里面,会用 Class 来表示很多东西。

比如说 Class A Felony,这个在英语法典里面就是表示的是刑事重罪的 A 分类。

在计算机语言中,我们就使用了 Class 来表示一个类了。

Class 和 Object

对象在我们定义 Class 后,我们就可以得到了。

还是用这个经典狗的例子,我们在定义了狗这一类动物后,我们需要将这个定义的动物映射到一条具体的狗上面。这条狗可能你的,也可能是隔壁老王的。

在现实中,肯定是不可能有 2 条一模一样重复的狗,但是在计算机数据上是可以存在的。

将类映射到具体的对象上的过程就是叫做实例化。这个应该比较好理解吧,因为 Class 是抽象,现在我们不讨论抽象的狗了,我们讨论隔壁老王家的狗。

如果把 Class 的狗直接拿过来用是肯定不行的,因为我们不知道我们现在要讨论的狗是谁的狗。

因此我们需要使用关键字 new 一下我们定义的 Class 的这个对象。然后我们就知道我们需要讨论隔壁老王家的狗了。

 

article-080117092334

 

这个过程就叫做类的实例化。

因此,总结来说,对象就是实例化后的类。

创建对象

对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建一个对象需要以下三步:

  • 声明:声明一个对象,包括有对象类型和对象的名称
  • 实例化:使用关键字 new 来创建一个对象。
  • 初始化:使用 new 创建对象时,会调用构造方法初始化对象。

实际上我们可能并不是完全按照上面的 3 步来写代码。

实际上,你可以写出下面的代码是没有问题,也是可以编译通过的,你的 IDE 工具可能会提示你说下面的代码是重复的,你可以使用其他方法来避免重复。

String testStr = new String("COM.OSSEZ");

但是实际上,没有人这样写,绝大部分你看到的代码都是:

String testStr = "COM.OSSEZ";

这是因为 String 这个类在 JDK 中比较特殊,是字符串的对象,通常也是我们用得最多的有关的字符串的操作,因此 String 的对象是可以直接赋值的。

当你直接赋值后,其实 JDK 已经为你完成了上面的 3 步操作了。

有时候,你在定义好对象后,可能还暂时不知道要干什么,你可能就非常粗暴的直接 = null 到给定的对象上面了。

或者就先定义好,在使用的时候再初始化。

例如,你可以使用下面的代码来定义一个对象,但是不对这个对象进行任何操作。但是,随后你就马上要对这个对象进行操作了。

通常你的 IDE 工具会在这里提示要求你初始化这个变量。

这个时候你可以直接 new 一个 String,在你 new 一个 String 的时候,Java 就已经帮你完成了上面说的实例化了。

String testStr;
logger.debug("String Size - [{}]", ossezVariable.length());

上面的代码,在 IDE 中会提示错误的,在构建的时候也会提示定义的变量没有初始化错误。

当然,你也可以直接将 null 赋值给你的变量,这样的结果得到的就是空对象异常。

String testStr = null;
logger.debug("String Size - [{}]", ossezVariable.length());

空对象

在 Java 中,我们可以先定义一个对象,然后将 null 赋值给定义的对象。

考察下面的代码:

String testStr = null;
		logger.debug("String Size - [{}]", testStr.length());

在上面的代码中,我们将 null 赋值给了一个字符串对象 testStr ,但是我们并没有对这个对象进行任何后续的赋值。

 

java-object-01

 

因此这个对象是 null 的,如果这个时候你有代码尝试获得字符串的长度,但是字符串为 null,第二条语句肯定会出现空对象异常。

这在 Java 中非常常见。

https://www.ossez.com/t/java/13446/1

Tags: None
Last updated:2021年04月26日

HoneyMoose

有温度的人文和独立的思考

Like
< Previous
Next >

Comments

Cancel reply

Archives
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,362)
    • Confluence (663)
    • Gradle (12)
  • U.S. (482)
  • 文化旅游 (145)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1