小白日更第五十五天->Java语言的特点(超详细)

先看一下百度百科对Java的简单介绍
在这里插入图片描述
网上关于Java的话题也不少,可能很多小伙伴也已经熟练的掌握了Java的一些操作了,比如集合反射多线程等等。
那今天我们静下心来,好好了解一下我们天天使用的Java这门语言,它的特点到底是什么,不要在面试的时候只知道OOP了,嘿嘿。当然这也是Java编程语言的其中一大特点,下面我们一起学习~
在这里插入图片描述

Java语言特点

1、简单性
2、面向对象
3、分布式
4、健壮性
5、安全性
6、体系结构中立
7、可移植性
8、解释型
9、高性能
10、多线程
11、动态性

简单性

人们希望构建一个无须深奥的专业训练就可以进行编程的系统, 并且要符合当今的标准惯例。 因此, 尽管人们发现 C++ 不太适用, 但在设计 Java 的时候还是尽可能地接近 C++, 以便系统更易于理解 , Java 剔除了 C++ 中许多很少使用、 难以理解、 易混淆的特性.:, 在目前看来, 这些特性带来的麻烦远远多于其带来的好处。 的确, Java 语法是 C++ 语法的一个**“ 纯净”** 版本。这里没有头文件、 指针运算(甚至指针语法、) 结构、 联合、 操作符重载虚基类等。然而,设计者并没有试图清除 C++ 中所有不适当的特性。例如, switch 语句的语法在 Java 中就没有改变。 如果你了解 C++ 就会发现可以轻而易举地转换到 Java 语法 。Java 发布时,实际上 C++ 并不是最常用的程序设计语言。很多开发人员都在使用 VisualBasic 和它的拖放式编程环境。 这些开发人员并不觉得 Java 简单。很多年之后 Java 开发环境才迎头赶上如今,Java 开发环境已经远远超出大多数其他编程语言的开发环境简单的另一个方面是小。 Java 的目标之一是支持开发能够在小型机器上独立运行的软件。 基本的解释器以及类支持大约仅为 40KB ; 再加上基础的标准类库和对线程的支持(基本上是一个自包含的微内核) 大约需要增加 175KB,在当时,这是一个了不起的成就。当然,由于不断的扩展,类库已经相当庞大了。 现在有一个独立的具有较小类库的 Java 微型版(Java Micro Edition), 这个版本适用于嵌人式设备。

※面向对象

简单地讲, 面向对象设计是一种程序设计技术。 用木匠打一个比方, 一个“ 面向对象的” 木匠始终关注的是所制作的椅子, 第二位才是所使用的工具;一个**“ 非面向对象的”** 木匠首先考虑的是所用的工具。在本质上,Java 的面向对象能力与 C++ 是一样的。开发 Java 时面向对象技术已经相当成熟。 Java 的面向对象特性与 C++ 旗鼓相当。Java与 C++ 的主要不同点在于多重继承, 在 Java 中, 取而代之的是更简单的接口概念。与 C++相比,Java 提供了更丰富的运行时自省功能

分布式

Java 有一个丰富的例程库, 用于处理像 HTTPFIT 之类的 TCP/IP 协议。Java 应用程序能够通过 URL 打开和访问网络上的对象, 其便捷程度就好像访问本地文件一样。如今,这一点已经得到认可,不过在 1995 年, 主要还是从 C++ 或 Visual Basic 程序连接Web 服务器。Java设计成支持在网络上应用,既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,所以用户可以产生分布式的客户机和服务器。网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运行。

健壮性

Java 的设计目标之一在于使得 Java 编写的程序具有多方面的可靠性.:, Java 投入了大量的精力进行早期的问题检测、 后期动态的 (运行时)检测, 并消除了容易出错的情况… … Java 和 C++ 最大的不同在于 Java 采用的指针模型可以消除重写内存和损坏数据的可能性。Java 编译器能够检测许多在其他语言中仅在运行时才能够检测出来的问题。 至于第二点,对于曾经花费几个小时来检查由于指针 bug 而引起内存冲突的人来说, 一定很喜欢 Java的这一特性。

安全性

Java 适用于网络 / 分布式环境。 为了达到这个目标, 在安全方面投入了很大精力。 使用 Java 可以构建防病毒防篡改的系统。从一开始,Java 就设计成能够防范各种攻击,其中包括:
•运行时堆栈溢出。 如蠕虫和病毒常用的攻击手段。
•破坏自己的进程空间之外的内存。
•未经授权读写文件。
原先,Java 对下载代码的态度是“ 尽管来吧!”。不可信代码在一个沙箱环境中执行,在这里它不会影响主系统。用户可以确信不会发生不好的事情, 因为 Java 代码不论来自哪里,都不能脱离沙箱。不过,Java 的安全模型很复杂。Java 开发包( Java Development Kit, JDK) 的第一版发布之后不久,普林斯顿大学的一些安全专家就发现一些小 bug 会允许不可信的代码攻击主系统。最初,安全 bug 可以快速修复。遗憾的是,经过一段时间之后, 黑客已经很擅长找出安全体系结构实现中的小漏洞。Sun 以及之后的 Oracle 为修复 bug 度过了一段很是艰难的曰子。4 Java 核心技木遭遇多次高调攻击之后, 浏览器开发商和 Oracle 都越来越谨慎 _ Java 浏览器插件不再信任远程代码,除非代码有数字签名而且用户同意执行这个代码。

体系结构中立

编译器生成一个体系结构中立的目标文件格式,这是一种编译过的代码, 只要有Java 运行时系统, 这些编译后的代码可以在许多处理器上运行。Java 编译器通过生成与特定的计算机体系结构无关的字节码指令来实现这一特性。 精心设计的字节码不仅可以很容易地在任何机器上解释执行, 而且还可以动态地翻译成本地机器代码。当时, 为“ 虚拟机” 生成代码并不是一个新思路。 诸如 Lisp、 Smalltalk 和 Pascal 等编程语言多年前就已经采用了这种技术。当然, 解释虚拟机指令肯定会比全速运行机器指令慢很多。 然而, 虚拟机有一个选项,可以将执行最频繁的字节码序列翻译成机器码,这一过程被称为即时编译Java 虚拟机还有一些其他的优点。它可以检测指令序列的行为, 从而增强其安全性。

※可移植性

与 C 和 C++ 不同,Java 规范中没有**“ 依赖具体实现”** 的地方基本教据类型的大小以及有关运算都做了明确的说明 例如,Java 中的 int 永远32 位的整数,而在 C/C++ 中, int 可能是 16 位整数、 32 位整数, 也可能是编译器提供商指定的其他大小。唯一的限制只是 int 类型的大小不能低于 short,int, 并且不能高于 long int。在 Java 中, 数据类型具有固定的大小, 这消除了代码移植时令人头痛的主要问题。 二进制数据以固定的格式进行存储和传输, 消除了字节顺序的困扰。字符串是用标准的 Unicode 格式存储的。作为系统组成部分的类库, 定义了可移植的接口例如, 有一个抽象的 Window类, 并给出了在 UNIX、 Windows 和 Macintosh 环境下的不同实现。选择 Window 类作为例子可能并不太合适。 凡是尝试过的人都知道, 要编写一个在Windows、 Macintosh 和 10 种不同风格的 UNIX 上看起来都不错的程序有多么困难 Java 1.0 就尝试着做了这么一个壮举,发布了一个将常用的用户界面元素映射到不同平台上的简单工具包。 遗憾的是, 花费了大量的心血,却构建了一个在各个平台上都难以让人接受的库。原先的用户界面工具包已经重写, 而且后来又再次重写,不过跨平台的可移植性仍然是个问题。不过,除了与用户界面有关的部分外,所有其他 Java 库都能很好地支持平台独立性。 你可以处理文件、 正则表达式、 XML、 日期和时间、 数据库、 网络连接、 线程等, 而不用操心底层操作系统。不仅程序是可移植的,Java API 往往也比原生 API 质量更高。

解释型

Java 解释器可以在任何移植了解释器的机器上执行 Java 字节码。 由于链接是一个增量式且轻量级的过程, 所以, 开发过程也变得更加快捷, 更加具有探索性。这看上去很不错。用过 Lisp、Smalltalk 、 Visual Basic、Python、R 或 Scala 的人都知道“ 快捷而且具有探索性” 的开发过程是怎样的。 你可以做些尝试, 然后就能立即看到结果。 Java开发环境并没有将重点放在这种体验上。

高性能

尽管对解释后的字节码性能已经比较满意, 但在有些场合下还需要更加高效的性能。 字节码可以(在运行时刻 )动态地翻译成对应运行这个应用的特定 CPU 的机器码。使用 Java 的头几年,许多用户不同意这样的看法:性能就是**“ 适用性更强”。然而,现在的即时编译器已经非常出色, 以至于成了传统编译器的竞争对手。在某些情况下,甚至超越了传统编译器, 原因是它们含有更多的可用信息。 例如, 即时编译器可以监控经常执行哪些代码**并优化这些代码以提高速度。更为复杂的优化是消除函数调用(即“ 内联”)。即时编译器知道哪些类已经加载。 基于当前加载的类集, 如果特定的函数不会被覆盖,就可以使用内联。必要时,还可以撤销优化。

多线程

多线程可以带来更好的交互响应和实时行为。如今,我们非常关注并发性, 因为摩尔定律行将完结。我们不再追求更快的处理器, 而
是着眼于获得更多的处理器, 而且要让它们一直保持工作。不过,可以看到,大多数编程语言对于这个问题并没有显示出足够的重视。
Java 在当时很超前。 它是第一个支持并发程序设计的主流语言。从白皮书中可以看到,它的出发点稍有些不同。当时, 多核处理器还很神秘, 而 Web 编程才刚刚起步,处理器要花很长时间等待服务器响应, 需要并发程序设计来确保用户界面不会“ 冻住”。并发程序设计绝非易事,不过 Java 在这方面表现很出色, 可以很好地管理这个工作。

动态性

从各种角度看, Java 与 C 或 C++ 相比更加具有动态性。 它能够适应不断发展的环境库中可以自由地添加新方法和实例变量, 而对客户端却没有任何影响。 在Java 中找出运行时类型信息十分简单。当需要将某些代码添加到正在运行的程序中时, 动态性将是一个非常重要的特性。一个很好的例子是: 从 Internet 下载代码,然后在浏览器上运行。 如果使用 C 或 C++, 这确实难度很大,不过 Java 设计者很清楚动态语言可以很容易地实现运行程序的演进。最终,他们将这一特性引入这个主流程序设计语言中。

总结

能坚持看到这的小伙伴应该花了15分钟不止了,前几天我也是在夜深人静的时候自己一个人在客厅看的,看完还是收获的,虽然是在书上copy下来的,我已经把重点加粗了。细扣的话还是有很多东西的,小伙伴们可以自行拓展。
比如沙箱安全机制、即时编译器(JIT)、多线程相关的、编译器、等等。

关于面向对象可以看我之前写的这篇博客
关于并发相关的可以从我的这篇博客开始简单学习一下
关于编译型语言和解释型语言可以看一下我对这篇博客

还是希望小伙伴多了解一些底层,历史之类的,可能短时间感觉对我们没什么帮助,但是会对我们的想法产生一些变化。比如我们可以了解一下java的23种设计模式,关于单例模式可以看一我的这篇博客。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值