java语言特性(相比C++)

一些常识

  • 计算机科学相关:
  • 程序=算法(代码)+数据结构(数据)

算法:一种有限的,确定的,有效的并且适合计算机程序来实现的解决问题是方法。
数据结构:便于算法操作的组织数据的方法。

  • 标准ASCII码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符,最高的那一位是校验位。

其最高位(b7)用作奇偶校验位。所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1

  • 计算机中用补码表示负数。
  • 最初的unicode编码是固定长度的,16位,也就是2两个字节代表一个字符,这样一共可以表示65536个字符。显然,这样要表示各种语言中所有的字符是远远不够的。Unicode4.0规范考虑到了这种情况,定义了一组附加字符编码,附加字符编码采用2个16位来表示,这样最多可以定义1048576个附加字符,目前unicode4.0只定义了45960个附加字符。Unicode只是一个编码规范,目前实际实现的unicode编码只要有三种:UTF-8,UCS-2和UTF-16,三种unicode字符集之间可以按照规范进行转换。
  • JAVA相关:
  • java不只是编程语言,也是开发环境,运行环境,部署环境。
  • 不能达到的代码=错误

面向对象的编程语言

主要与C语言相比,C语言是第一个真正由程序员来设计,实现,开发的编程语言,是面向过程的编程语言。

  • 处理复杂度能力。
    面向过程的编程语言处理复杂度的能力有限,不如面向对象的编程语言。
  • 强调什么
    面向过程:强调正在发生什么,即代码作用于数据。
    面向对象:强调谁将被影响,即数据控制对代码的访问。
  • 三个特性
  • 封装
    基本单元是类,内部隐藏了实现复杂性的机制。可以区别公有私有,可以保证不想发生的事情,一定不会发生。
  • 继承
    使用层级分类是抽象(复杂度)管理的有效方法。
    继承支持了按层级分类的概念,有效管理复杂度。
  • 多态
    一个接口,多个方法。
  • 互效作用
    层级管理为基础,方便复用。
    封装保证在不破坏依赖于类公共接口的代码的前提下,进行升级迁移。
    多态性有利于编写易懂易读易修改的程序。

与C/C++语言相比

  • 简单与健壮

  • c++ 里面内存要自己去管理,而java 里面有系统的垃圾回收器。

  • Java 中省去了对指针的操作,但并不是没有指针了,只是被封装了而已,代替指针的是种新的变量,叫做引用,这个引用里面也是保存的一个对象的地址,它和指针的差别就是比指针功能要弱化了,也更简单了。

  • 安全

  • 字节码的验证,c++ 中对指针的操作可能会导致内存栈的溢出,而在Java 里面不用我们去担心这些问题,这些统统有JVM 去替我们做。

  • Java 的跨平台性:用这个语言开发出来的程序可以在不同系统中运行。

  • 不同系统的Java 虚拟机之前的源码和字节码部分都是跨平台的,从虚拟机就不是跨平台的了。这样Java 的字节码就可以直接用来传播,而不用传播源码了。
    源码是怎样成为可执行代码:

源码--> 编译--> 目标码(二进制机器码)--> 连接--> 可执行文件

  由此看来,汇编、C 、C++ 等语言都是不跨平台的,因为他们的编译过程就直接与当前系统挂钩了

注意:C 和C++ 源码都是跨平台的,我们所指的跨平台是基于编译过程中的跨平台,以上几种语言在不同的系统中编译出来的目标码是不同的。

  Java 跨平台就是编译过程中的跨平台,怎么实现的呢,那就是Java 虚拟机,Java 的源码编译过程:

源码--> 编译--> 字节码--> 把字节码装载到虚拟机中运行--JAVA 虚拟机:JVM

   屏蔽掉了不同平台的差异,为上层的字节码提供了一个统一的运行环境,虚拟机是为了给字节码提供统一的执行平台,每种操作系统所用的虚拟机是不同的,是为了统一JAVA 字节码的解析执行方式,如果没有虚拟机,在一种操作系统上写了JAVA 代码,编译成字节码后只能在本操作系统上运行,但是换一个操作系统的话就要重新再写一遍JAVA 代码然后重新编译,所以虚拟机提高了代码的复用性,实现了一次编写,多处使用的优点。
  • Java对每种数据类型都分配固定长度,即没有sizeof()

  • 比如,在Java中,int类型总是32位的,而在C和C++中,对于不同的平台,同一个数据类型分配不同的字节数,同样是int类型,在PC机中为二字节即16位,而在VAX-11中,则为32位.这使得C语言造成不可移植性,而Java则具有跨平台性。

  • 类型转换不同.

  • 在C和C++中,可通过指针进行任意的类型转换,常常带来不安全性,而在Java中,运行时系统对对象的处理要进行类型相容性检查,以防止不安全的转换.

  • 结构和联合的处理.

  • 在C和C++中,结构和联合的所有成员均为公有,这就带来了安全性问题,而在Java中根本就不包含结构和联合,所有的内容都封装在类里面

主要特性

  • 健壮
  • 内存垃圾自动收集,应对(内存错误),异常处理机制应对(运行错误)。
  • 结构中立
  • 更新系统后,JVM仍然能让java程序运行。
原文地址:https://www.cnblogs.com/sargeles/p/6539281.html