为什么 Java 不是纯面向对象语言?
什么是纯面向对象语言?
纯面向对象语言或完全面向对象语言是指完全面向对象的语言,它支持或具有将程序内的所有内容视为对象的功能。它不支持原始数据类型(如 int,char,float,bool 等)。编程语言满足七种标准可以就可以称为纯粹的面向对象语言,他们是:
- 封装 / 数据隐藏
- 继承
- 多态性
- 抽象化
- 所有预定义类型都是对象
- 所有用户定义的类型都是对象
- 对对象执行的所有操作必须仅通过对象公开的方法
为什么 Java 不是纯面向对象语言?
Java 支持属性 1,2,3,4 和 6 但不支持上面给出的属性 5 和 7. Java 语言不是纯面向对象语言,因为它包含以下属性:
原始数据类型例如对象:
Smalltalk 是一种 “纯粹的” 面向对象的编程语言,与 Java 和 C++ 不同,因为作为对象的值和作为基本类型的值之间没有区别。在 Smalltalk 中,原始值,例如整数,布尔值和字符也是对象。在 Java 中,我们将预定义类型作为非对象(基本类型)。
int a = 5;
System.out.print(a);
static 关键字:
当我们将一个类声明为 Static 时,可以在不使用 Java 中的对象的情况下使用它。
包装类:
包装类提供了将基元转换为对象和对象转换为基元的机制。在 Java 中,您可以使用 Integer,Float 等代替 int,float 等。我们可以在不调用其方法的情况下与对象使用算术运算符。
即使使用 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 一样工作:
- 在创建 Integer 类时,您使用的是基本类型 “int”,即数字 10,20。
- 在使用加法时,Java 使用原始类型 “int”( jdk1.5 需要拆箱操作,jdk1.5 及以后添加了新特性:自动装箱和拆箱)。
“不积跬步,无以至千里”,希望未来的你能:有梦为马 随处可栖!加油,少年!
正是金九银十跳槽季,为大家收集了 2019 年最新的面试资料,有文档、有攻略、有视频。
有需要的同学可以来在公众号【Java 知己】,发送【面试】领取最新面试资料攻略!

为什么 Java 不是纯面向对象语言?的更多相关文章
- Java到底是不是一种纯面向对象语言?
本文由码农网 – Dee1024原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! Java——是否确实的 “纯面向对象”?让我们深入到Java的世界,试图来证实它. 在我刚开始学习 J ...
- 你见过老外的 Java 面试题吗 (上)?
前言 最近无聊的在逛某 tube 网站,本来想看看大家是怎么吐槽川普的,结果无意间点进了一个老外面试 Java 的视频,对于常年面试被吊打的我瑟瑟发抖,于是决定进去一探究竟. 毕竟不是专业的后台开发, ...
- Java对象和多态
Java对象和多态 (面向对象) 面向对象基础 面向对象程序设计(Object Oriented Programming) 对象基于类创建,类相当于一个模板,对象就是根据模板创建出来的实体(就像做月饼 ...
- Scala详解
1 快速入门... 4 1.1 分号... 4 1.2 常变量声明... 4 1.2.1 val常量... 4 1.2.2 ...
- 【es6】class
class是es6引入的最重要特性之一.在没有class之前,我们只能通过原型链来模拟类. 基本用法 如果你用过java这样的纯面向对象语言,那么你会对class的语法非常熟悉. class Peop ...
- 怎样才能快速成为JavaScript高手
如何快速成为JavaScript高手?之前我拿这个问题问过我的同事,也问过国内的一些JavaScript高手. 最近,我一直在拿这个问题问自己.之所以会有这个问题,我基于两个前提:第一.我自认为自己不 ...
- <2014 04 15> C++语言回顾精要(原创By Andrew)
C++语言回顾精要 <Visual C++程序设计>张岳新,这本书是很多学校的本科生C++教学用书,今天重新拿来翻了一遍.跟很多国人写的技术书籍一样,写书并不是为了让初学者看懂入门,而是为 ...
- JavaSE-万字长文-加载时间长-小白文
Java语法规范 所有的Java语句必须以;结尾! 无论是().[]还是{},所有的括号必须一一匹配! 主方法的代码只能写在{}中! Java基础语法(面向过程) 在学习面向对象之前,我们需要了解面向 ...
- JDBC:加载数据库驱动、连接数据库(详细讲解)
加载数据库驱动: 1)由于Java是一个纯面向对象语言,任何事物在其中都必须抽象成类或者类对象,数据库也不例外,JDBC同样也把数据库抽象成面向对象的结构: 2)JDBC将整个数据库驱动器在底层抽象成 ...
随机推荐
- linux 安装redis服务
下载地址:http://redis.io/download,下载最新稳定版本. 本教程使用的最新文档版本为 2.8.17,下载并安装: $ wget http://download.redis.io/ ...
- python总结【来自Runoob】
test.py #!/usr/bin/python print "Hello, Python!"; $ chmod +x test.py # 脚本文件添加可执行权限 $ ./tes ...
- (办公)记事本_通过xshell连接Liunx服务器
任务:需要用xshell连接到Liunx服务器,装配环境,放置项目,查看日志,以后就要做,磁盘扩容,均衡负载,以及病毒错误. 第一步,先连接上: 1.xshell新建会话,刚才买的liunx的公网地址 ...
- cordova+vue混合式开发App
应要求第一次使用cordova打包了一下vue写的app项目,期间遇到了不少问题,整理一下流程并记录一下常见问题吧. cordova打包项目需要的环境配置啥的就不具体讲啦,百度一下很多教 ...
- 2019-2020-1 20199305《Linux内核原理与分析》第七周作业
进程的描述与创建 (一)进程的描述 (1)操作系统内核实现操作系统的三大管理功能(进程管理最为核心) 进程管理 内存管理 文件系统 (2)在Linux内中用一个数据结构struct task_stru ...
- Java之Date类
Date类的概述 java.util.Date类 表示特定的瞬间,精确到毫秒.毫秒:千分之一秒 1000毫秒=1秒.特定的瞬间:一个时间点,一刹那时间. 常用构造方法 public Date():分配 ...
- JAVA描述算法和数据结构(01):稀疏数组和二维数组转换
本文源码:GitHub·点这里 || GitEE·点这里 一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反, ...
- 以太坊智能合约开发 Solidity学习
1. pragma solidity >=0.4.22 <0.6.0;//版本号,头文件 contract BooleanTest { bool _a;//默认返回false int nu ...
- [browser srceen]、很多未知望大神告知、简单写了个拖拽
未知作用的有.如果也有像我1样好奇的小伙伴了解了麻烦告知 // console.log(window.screen.availWidth);//未知效果 // console.log(window.s ...
- Unrecognized header format %
<VirtualHost *:*> RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME} </ ...