JAVA语 言 的 特 点

Java到 底 是 一 种 什 么 样 的 语 言 呢? Java是 一 种 简 单 的 面 象 对 象 的 分 布 式 的 解 释 的 健 壮 的 安 全 的 结 构 中 立 的 可 移 植 的 性 能 很 优 异 的 多 线 程 的 动 态 的 语 言。

[1]    简 单

  Java最 初 是 为 对 家 用 电 器 进 行 集 成 控 制 而 设 计 的 一 种 语 言, 因 此 它 必 须 简 单 明 了。Java语 言 的 简 单 性 主 要 体 现 在 以 下 三 个 方 面: 1. Java的 风 格 类 似 于C++, 因 而C++程 序 员 是 非 常 熟 悉 的。 从 某 种 意 义 上 讲,Java语 言 是C及C++语 言 的 一 个 变 种, 因 此,C++程 序 员 可 以 很 快 就 掌 握Java编 程 技 术。 2. Java摒 弃 了C++中 容 易 引 发 程 序 错 误 的 地 方, 如 指 针 和 内 存 管 理。 3. Java提 供 了 丰 富 的 类 库。

[2]    面 向 对 象

  面 向 对 象 可 以 说 是Java最 重 要 的 特 性。Java语 言 的 设 计 完 全 是 面 向 对 象 的, 它 不 支 持 类 似C语 言 那 样 的 面 向 过 程 的 程 序 设 计 技 术。Java支 持 静 态 和 动 态 风 格 的 代 码 继 承 及 重 用。 单 从 面 向 对 象 的 特 性 来 看,Java类 似 于SmallTalk, 但 其 它 特 性、 尤 其 是 适 用 于 分 布 式 计 算 环 境 的 特 性 远 远 超 越 了SmallTalk。

[3]    分 布 式

  Java包 括 一 个 支 持HTTP和FTP等 基 于TCP/IP协 议 的 子 库。 因 此,Java应 用 程 序 可 凭 借URL打 开 并 访 问 网 络 上 的 对 象, 其 访 问 方 式 与 访 问 本 地 文 件 系 统 几 乎 完 全 相 同。 为 分 布 环 境 尤 其 是Internet提?copy;动 态 内 容 无 疑 是 一 项 非 常 宏 伟 的 任 务, 但Java的 语 法 特 性 却 使 我 们 很 容 易 地 实 现 这 项 目 标。

[4]    健 壮

  Java致 力 于 检 查 程 序 在 编 译 和 运 行 时 的 错 误。 类 型 检 查 帮 助 检 查 出 许 多 开 发 早 期 出 现 的 错 误。Java自 已 操 纵 内 存 减 少 了 内 存 出 错 的 可 能 性。Java还 实 现 了 真 数 组, 避 免 了 覆 盖 数 据 的 可 能。 这 项 功 能 特 征 大 大 缩 短 了 开 发Java应 用 程 序 的 周 期。 Java提 供Null指 针 检 测 数 组 边 界 检 测 异 常 出 口 字 节 代 码 校 验

[5]    结 构 中 立

  另 外, 为 了 建 立Java作 为 网 络 的 一 个 整 体,Java将 它 的 程 序 编 译 成 一 种 结 构 中 立 的 中 间 文 件 格 式。 只 要 有 Java运 行 系 统 的 机 器 都 能 执 行 这 种 中 间 代 码。 现 在,Java运 行 系 统 有Solaris2.4(SPARC),Win32系 统(Windows95和Windows NT)等. Java源 程 序 被 编 译 成 一 种 高 层 次 的 与 机 器 无 关 的byte-code格 式 语 言, 这 种 语 言 被 设 计 在 虚 拟 机 上 运 行, 由 机 器 相 关 的 运 行 调 试 器 实 现 执 行。

[6]    安 全

  Java的 安 全 性 可 从 两 个 方 面 得 到 保 证。 一 方 面, 在Java语 言 里, 象 指 针 和 释 放 内 存 等C++功 能 被 删 除, 避 免 了 非 法 内 存 操 作。 另 一 方 面, 当Java用 来 创 建 浏 览 器 时, 语 言 功 能 和 一些浏 览 器 本 身 提 供 的 功 能 结 合 起 来, 使 它 更 安 全。 Java语 言 在 你 的 机 器 上 执 行 前, 要 经 过 很 多 次 的 测 试。 它 经 过 代 码 校 验, 检 查 代 码 段 的 格 式, 检 测 指 针 操 作, 对 象 操 作 是 否 过 分 以 及 试 图 改 变 一 个 对 象 的 类 型。

[7]    Byte-code校 验

  如 果byte-code通 过 代 码 校 验, 没 有 返 回 错 误, 我 们 可 知 道: 代 码 没 有 堆 栈 上 溢 出 和 下 溢 出 所 有 操 作 代 码 参 数 类 型 都 是 正 确 的 没 有 发 生 非 法 数 据 转 换, 如 将 整 数 转 换 成 指 针。 访 问 对 象 操 作 是 合 法 的

[8]    类 装 载

  Class Loader通 过 将 本 机 类 与 网 络 资 源 类 的 名 称 分 开, 来 保 持 安 全 性。 因 为 调 入 类 时 总 要 经 过 检 查, 这 样 避 免 了 特 洛 伊 木 马 现 象 的 出 现。 从 网 络 上 下 载 的 类 被 调 进 一 个 与 源 相 关 的 私 有 的 名 字 域。 当 一 个 私 有 类 访 问 另 一 个 类 时,build-in(本 机 类)首 先 被 检 查, 然 后 检 查 相 关 的 类。 这 样 就 避 免 了 破 坏 本 机 类 情 况 的 出 现。

[9]    可 移 植 的

  同 体 系 结 构 无 关 的 特 性 使 得Java应 用 程 序 可 以 在 配 备 了Java解 释 器 和 运 行 环 境 的 任 何 计 算 机 系 统 上 运 行, 这 成 为Java应 用 软 件 便 于 移 植 的 良 好 基础。 但 仅 仅 如 此 还 不 够。 如 果 基 本 数 据 类 型 设 计 依 赖 于 具 体 实 现, 也 将 为 程 序 的 移 植 带 来 很 大 不 便。 例 如 在Windows 3.1中 整 数(Integer)为16bits, 在Windows 95中 整 数 为32bits, 在DEC Alpha中 整 数 为64bits, 在Intel 486中 为32bits。 通 过 定 义 独 立 于 平 台 的 基 本 数 据 类 型 及 其 运 算,Java数 据 得 以 在 任 何 硬 件 平 台 上 保 持 一 致。Java语 言 的 基 本 数 据 类 型 及 其 表 示 方 式 如 下: byte 8-bit 二 进 制 补 码 short 16-bit 二 进 制 补 码 int 32-bit 二 进 制 补 码 long 64-bit 二 进 制 补 码 float 32-bit IEEE 754浮点 数 double 32-bit IEEE 754浮点 数 char 16-bit Unicode字 符。

  在 任 何Java解 释 器 中, 数 据 类 型 都 是 依 据 以 上 标 准 具 体 实 现 的。 因 为 几 乎 目 前 使 用 的 所 有CPU都 能 支 持 以 上 数 据 类 型、8~64位 整 数 格 式 的 补 码 运 算 和 单/双 精 度浮点 运 算。 Java编 译 器 本 身 就 是 用Java语 言 编 写 的。Java运 算 系 统 的 编 制 依 据POSIX方 便 移 植 的 限 制, 用ANSI C语 言 写 成。Java语 言 规 范 中 也 没 有 任 何\"同 具 体 实 现 相 关\"的 内 容。

[10]  解 释 的

  Java解 释 器(运 行 系 统)能 直 接 运 行 目 标 代 码 指 令。 链 接 程 序 通 常 比 编 译 程 序 所 需 资 源 少, 所 以 程 序 员 可 以 在 创 建 源 程 序 上 花 上 更 多 的 时 间。

[11]  高 性 能

  如 果 解 释 器 速 度 不 慢,Java可 以 在 运 行 时 直 接 将 目 标 代 码 翻 译 成 机 器 指 令。Sun用 直 接 解 释 器 一 秒 钟 内 可 调 用300,000个 过 程。 翻 译 目 标 代 码 的 速 度 与C/C++的 性 能 没 什 么 区 别。

[12]  多 线 程

Java提?copy;的 多 线 程 功 能 使 得 在 一 个 程 序 里 可 同 时 执 行 多 个 小 任 务。 线 程 - - 有 时 也 称 小 进 程 - - 是 一 个 大 进 程 里 分 出 来 的 小 的 独 立 的 进 程。 因 为Java实 现 的 多 线 程 技 术, 所 以 比C和C++更 键 壮。 多 线 程 带 来 的 更 大 的 好 处 是 更 好 的 交 互 性 能 和 实 时 控 制 性 能。 当 然 实 时 控 制 性 能 还 取 决 于 系 统 本 身(UNIX,Windows,Macintosh等), 在 开 发 难 易 程 度 和 性 能 上 都 比 单 线 程 要 好。 任 何 用 过 当 前 浏 览 器 的 人, 都 感 觉 为 调 一 副 图 片 而 等 待 是 一 件 很 烦 恼 的 事 情。 在Java里, 你 可 用 一 个 单 线 程 来 调 一 副 图 片, 而 你 可 以 访 问HTML里 的 其 它 信 息 而 不 必 等 它。

[13]  动 态

  Java的 动 态 特 性 是 其 面 向 对 象 设 计 方 法 的 发 展。 它 允 许 程 序 动 态 地 装 入 运 行 过 程 中 所 需 要 的 类, 这 是C++语 言 进 行 面 向 对 象 程 序 设 计 所 无 法 实 现 的。 在C++程 序 设 计 过 程 中, 每 当 在 类 中 增 加 一 个 实 例 变 量 或 一 种 成 员 函 数 后, 引 用 该 类 的 所 有 子 类 都 必 须 重 新 编 译, 否 则 将 导 致 程 序 崩 溃。Java从 如 下 几 方 面 采 取 措施来 解 决 这 个 问 题。Java编 译 器 不 是 将 对 实 例 变 量 和 成 员 函 数 的 引 用 编 译 为 数 值 引 用, 而 是 将 符 号 引 用 信 息 在 字 节 码 中 保 存 下 传 递 给 解 释 器, 再 由 解 释 器 在 完 成 动 态 连 接 类 后, 将 符 号 引 用 信 息 转 换 为 数 值 偏 移 量。 这 样, 一 个 在 存 储 器 生 成 的 对 象 不 在 编 译 过 程 中 决 定, 而 是 延 迟 到 运 行 时 由 解 释 器 确 定 的。 这 样, 对 类 中 的 变 量 和 方 法 进 行 更 新 时 就 不 至 于 影 响 现 存 的 代 码。 解 释 执 行 字 节 码 时, 这 种 符 号 信 息 的 查 找 和 转 换 过 程 仅 在 一 个 新 的 名 字 出 现 时 才 进 行 一 次, 随 后 代 码 便 可 以 全 速 执 行。 在 运 行 时 确 定 引 用 的 好 处 是 可 以 使 用 已 被 更 新 的 类, 而 不 必 担 心 会 影 响 原 有 的 代 码。 如 果 程 序 连 接 了 网 络 中 另 一 系 统 中 的 某 一 类, 该 类 的 所 有 者 也 可 以 自 由 地 对 该 类 进 行 更 新, 而 不 会 使 任 何 引 用 该 类 的 程 序 崩 溃。 Java还 简 化 了 使 用 一 个 升 级 的 或 全 新 的 协 议 的 方 法。 如 果 你 的 系 统 运 行Java程 序 时 遇 到 了 不 知 怎 样 处 理 的 程 序, 没 关 系,Java能 自 动 下 载 你 所 需 要 的 功 能 程 序。

原文地址:https://www.cnblogs.com/WLCYSYS/p/9704329.html

时间: 2024-08-09 04:24:26

JAVA语 言 的 特 点的相关文章

Java语言中String累的总结

String类 1.Java.lang包简介 java.lang包是java内置的一个基础包,其中包含了一系列程序中经常要用到的类: 在默认情况下,每个java程序都会自动导入该包,因此无需在程序中显式地声明. 2.String类 Java语言中,字符串是String类的对象: Java语言中,String是引用数据类型: 可以通过使用String类提供的方法来完成对字符串的操作: 创建一个字符串对象之后,将不能更改构成字符串的字符: 每当更改了字符串版本时,就创建了一个新的字符串对象,并在其内

java语言中的varargs

java语言中的varargs允许调用者传递数量不定的参数,并传入的数量不定的实参转化为数组形式的形参. 那么不传递任何参数,或者传入null时,形参的值是什么呢?下面是测试代码和运行结果: 1 private void test1(int... args) { 2 if (args != null) { 3 System.out.println("[test1] args.length = " + args.length); 4 } else { 5 System.out.print

javascript中模拟实现java语言中的map

//javascript中模拟实现java语言中的map 实现代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script type="text/javascript"> //private var obj={};//空的对象容器,用于承装键值对 function Map() { //put方法 th

Java语言中extend和implement的区别

Java语言并不支持多重继承,而只能继承一个类,不过我们可以使用implements来实现多个接口. extends继承的父类:不能声明为final或者定义为abstract: implements实现接口interface,用逗号分开就好: 如:class A extends B implements C, D, E interface的引入是为了部分地提供多继承的功能. 在interface中只需声明方法头,而将方法体留给实现的class来做. 这些实现的class的实例完全可以当作inte

Java语言中Object对象的hashCode()取值的底层算法是怎样实现的?

Java语言中,Object对象有个特殊的方法:hashcode(), hashcode()表示的是JVM虚拟机为这个Object对象分配的一个int类型的数值,JVM会使用对象的hashcode值来提高对HashMap.Hashtable哈希表存取对象的使用效率. 关于Object对象的hashCode()返回值,网上对它就是一个简单的描述:"JVM根据某种策略生成的",那么这种策略到底是什么呢?我有一个毛病,遇到这种含糊其辞的东西,就想探个究竟,所以,本文就将hashCode()本

浅谈Java语言中try{}catch{}和finally{}的执行顺序问题

浅谈Java语言中try{}catch{}和finally{}的执行顺序问题 2019-04-06  PM  13:41:46  1. 不管有没有出现异常,finally块中代码都会执行: 2. 当try和catch中有return时,finally仍然会执行: 3. finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的:

Java语言中:float、double数据类型在内存中是如何存储的

引用参考 https://www.cnblogs.com/chenmingjun/p/8415464.html#4291528 https://blog.csdn.net/yansmile1/article/details/70145416 java语言中,float类型数字在计算机中用4个字节(32位)来存储.double类型占用8个字节(64位). 从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储

Java语言中的Class类

基本概念 在Object类中定义了以下的方法,此方法将被所有子类继承 public final Class getClass() 这个方法的返回值类型是一个Class类,此类是Java反射的源头,是实际上所谓反射从程序的运行结果来看也很好理解,即:可以通过对象反射求出类的名称. 对象照镜子后可以得到的信息:某个类的属性.方法和构造器.某个类到底实现了哪些接口.对于每个类而言,JRE都为其保留一个不变的Class类型的对象.一个Class对象包含了特定某个结构(class.interface.en

Java 语言中 Enum 类型的使用介绍

Enum 类型的介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的定义相似.不过相比较常量类型,枚举类型可以为申明的变量提供更大的取值范围. 举个例子来说明一下,如果希望为彩虹描绘出七种颜色,你可以在 Java 程序中通过常量定义方式来实现. 清单 1. 常量定义 Public static class RainbowColor { // 红橙黄绿青蓝紫七种颜