java与c++的区别

来源:互联网 发布:软件架构名词解释 编辑:程序博客网 时间:2024/05/21 10:46

 

C++Java除了一些比较少见的情况之外和C语言相容没有对任何之前的语言向前相容。但在语法上受 C/C++ 的影响很大一次编写多处编译一次编写多处运行允许程序式程式设计和面向对象程序设计鼓励(或者说必须)面向对象的程式设计方式允许直接调用原生的系统库要通过JNI英语Java Native Interface调用, 或者 JNA英语Java Native Access能直接使用底层系统接口在一个保护模式下的虚拟机中运行只提供物件的类型和类型名是反射的, 允许元程式设计和运行时的动态生成代码有多种二进制相容标准 (例如:微软和Itanium/GNU)一种二进制相容标准,允许运行时库的正确性检查可选的自动边界检查. (例如:vectorstring 这两个容器的 at() 方法)一般都有做边界检查。HotSpot (java)(Sun 的虚拟机实现) 可以去掉边界检查支持原生的无符号数学运算不支持原生的无符号数学运算对所有的数字类型有标准的范围限制,但字节长度是跟实现相关的。标准化的类型可以用 typdef 定义 (uint8_t, ..., uintptr_t)在所有平台上对所有的基本类型都有标准的范围限制和字节长度支持指针,引用,传值调用基本类型总是使用传值调用。物件以可以为空的参考的方式传递(相当于在C++里使用指向 class 或者 struct 参数的指标)。[1]显式的内存管理,但有第三方的框架可以提供垃圾搜集的支持。支持析构函式。自动垃圾搜集(可以手动触发)。没有析构函式的概念,对 finalize() 的使用是不推荐的支持类class,结构struct,联合union,可以在堆栈或者栈里为它们动态分配内存只支持类别,只在堆栈中为物件分配内存。Java SE 6在栈为一些物件分配内存的使用了逃逸分析英语escape analysis的优化方法允许显式的覆盖(也叫重写)类型严格的类型安全,除了变宽的类型转换。Java 1.5 开始支持自动类型包装和解包装(Autoboxing/Unboxing)C++函式库包括:语言支持,诊断工具,常用工具,字符串,本地化,容器,算法,迭代器,数值,输入/输出,C函式库。Boost库提供了更多的功能,包括执行绪和网络I/O。使用者必须在一大堆(大部分互相不相容)第三方GUI或者其他功能库中进行选择函式库在每次 Java 发布新版本的时候都会更新并增强功能。1.6版本支持:本地化,日志系统,容器和迭代器,算法,GUI 程式设计(但没有用到系统的GUI),图形,多执行绪,网络,平台安全,自省机制,动态类别加载,阻塞和非阻塞的I/O,对于XML、XSLT、MIDI也提供了相关接口或者支持类别,数据库,命名服务(例如LDAP),密码学,安全服务(例如Kerberos),打印服务,WEB 服务。SWT 提供了一个系统相关的GUI的抽象大部分运算符可以运算符重载运算子的意义一般来说是不可变的,例外是 + 和 += 运算子被字符串多载了完全的多重继承,包括虚拟继承类别只允许单继承,需要多继承的情况要使用接口支持编译期模板泛型英语Generics in Java被用来达到和C++模板类似的效果,但由于类型消除英语Type Erasure它们不能在编译期间从代码被编译成字节码支持函式指标,函式物件,lambda(C++11)和接口没有函式指标机制。替代的概念是接口,Adapter 和 Listener也是被广泛使用的没有标准的代码内嵌文档机制。不过有第三方的软件(例如 Doxygen)Javadoc 标准文档生成系统const 关键字用来定义不可改变的常量和成员函式final 提供了一个限制版本的 const,等价于 type* const 的物件指标或者const的基本类型数据。没有 const 成员函式,也没有const type* 指标的等价物支持 goto 语句支持循环标签(label)和语句块源代码可以写成平台无关的(可以被 Windows、BSD、Linux、Mac OS X、Solaris 等编译,不用修改),也可以写成利用平台特有的特性。通常被编译成原生的机器码被编译成Java虚拟机的字节码。和Java平台相关,但是源代码一般来说是不依赖操作系统特有的特性的
原创粉丝点击