为什么 Java 不是纯粹的面向对象语言?

简介: 为什么 Java 不是纯粹的面向对象语言?

Pure Object Oriented Language 或 Complete Object Oriented Language 是完全面向对象的语言,它支持或具有将程序内部的一切视为对象的特性。它不支持原始数据类型(如 int、char、float、bool 等)。纯面向对象的编程语言需要满足七个品质。他们是:

  1. 封装/数据隐藏
  2. 遗产
  3. 多态性
  4. 抽象
  5. 所有预定义类型都是对象
  6. 所有用户定义的类型都是对象
  7. 对对象执行的所有操作都必须仅通过在对象上公开的方法进行。

示例:Smalltalk

为什么 Java 不是纯粹的面向对象语言?

Java 支持属性 1、2、3、4 和 6,但不支持上面给出的属性 5 和 7。Java 语言不是纯面向对象语言,因为它包含以下属性:

  • 原始数据类型例如。int、long、bool、float、char 等作为对象:  Smalltalk 是一种“纯”面向对象的编程语言,与 Java 和 C++ 不同,因为对象值和原始类型值之间没有区别。在 Smalltalk 中,整数、布尔值和字符等原始值也是对象。
    在 Java 中,我们将类型预定义为非对象(原始类型)。


int a = 5; 
System.out.print(a);
  • static 关键字: 当我们将类声明为静态时,它可以在不使用 Java 对象的情况下使用。如果我们使用静态函数或静态变量,那么我们不能通过使用 dot(.) 或类对象来调用该函数或变量,这违背了面向对象的特性。
  • Wrapper 类:  Wrapper 类提供了将原始类型转换为对象和将对象转换为原始类型的机制。在 Java 中,你可以使用 Integer、Float 等代替 int、float 等。我们可以在不调用对象方法的情况下与对象进行通信。前任。使用算术运算符。
String s1 = "ABC" + "A" ;

即使使用 Wrapper 类也不会使 Java 成为一种纯粹的 OOP 语言,因为它在内部会使用诸如 Unboxing 和 Autoboxing 之类的操作。因此,如果你创建而不是 int Integer 并对其进行任何数学运算,那么在底层 Java 将仅使用原始类型 int。

public class BoxingExample
{
    public static void main(String[] args)
    {
        Integer i = new Integer(10);
        Integer j = new Integer(20);
        Integer k = new Integer(i.intValue() + j.intValue());
        System.out.println("Output: "+ k);
    }
}

在上面的代码中,Java 无法作为纯 OOP 工作有两个问题:

  1. 在创建 Integer 类时,你使用的是原始类型“int”,即数字 10、20。
  2. 在做加法时,Java 使用原始类型“int”。
目录
相关文章
|
2月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
91 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
27天前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
14天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
18 1
|
26天前
|
JavaScript 前端开发 Java
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。如果你从我的文章中受益,欢迎关注我,我将持续更新更多优质内容。你的支持是我前进的动力!🎉🎉🎉
23 0
还不明白面向对象? 本文带你彻底搞懂面向对象的三大特征(2024年11月Java版)
|
1月前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
51 4
|
1月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
32 2
|
2月前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
57 3
|
2月前
|
移动开发 Java 大数据
深入探索Java语言的核心优势与现代应用实践
【10月更文挑战第10天】深入探索Java语言的核心优势与现代应用实践
88 4
|
3月前
|
Java 编译器
封装,继承,多态【Java面向对象知识回顾①】
本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
封装,继承,多态【Java面向对象知识回顾①】
|
2月前
|
存储 Java 数据安全/隐私保护
Java中的域,什么是域?计算机语言中的域是什么?(有代码实例)
文章解释了Java中域的概念,包括实例域、静态域、常量域和局部域,以及它们的特点和使用场景。
73 2