.Net,Java与C/C++语言的比较(配合代码实现,继续更新中......)
来源:互联网 发布:java写的计算器 编辑:程序博客网 时间:2024/03/29 14:40
1. 下列.Net,Java与C/C++语言的比较(配合代码实现)
以下示例:
C/C++是在Dev C++ Version 4.9.92 调试通过;
Java是在MyEclipse 5.5.1调试通过;
.Net是在Microsoft Visual Studio .NET 2003调试通过;
C/C++是在Dev C++ Version 4.9.92 调试通过;
Java是在MyEclipse 5.5.1调试通过;
.Net是在Microsoft Visual Studio .NET 2003调试通过;
a.全局变量
java(.net)程序不能定义程序的全局变量,而类中的公共、静态变量就相当于这个类的全局变量。这样就使全局变量封装在类中,保证了安全性,而在C/C++语言中,由于不加封装的全局变量往往会由于使用不当而造成系统的崩溃。
java(.net)程序不能定义程序的全局变量,而类中的公共、静态变量就相当于这个类的全局变量。这样就使全局变量封装在类中,保证了安全性,而在C/C++语言中,由于不加封装的全局变量往往会由于使用不当而造成系统的崩溃。
示例(c/c++):
#include <cstdlib>
#include <iostream>
int t_int = 2;(全局变量)
int main(int argc, char *argv[])
{
printf("t_int value: %d/n",t_int);
system("PAUSE");
return EXIT_SUCCESS;
}
示例(java):
package Wstudy;
publicclassproject2 {
public String s;
public project2()
{
s= "s is in project2.java";
}
}
**************************************
package Wstudy;
import java.util.*;
publicclass project1 {
publicstaticvoid main(String arge[])
{
project2 object = new project2();
System.out.println(object.s);
}
}
b.条件转移指令
C/C++语言中用goto语句实现无条件跳转,而java语言没有goto语言,通过例外处理语句try、catch、finally来取代之,提高了程序的可读性,也增强了程序的鲁棒性。
C/C++语言中用goto语句实现无条件跳转,而java语言没有goto语言,通过例外处理语句try、catch、finally来取代之,提高了程序的可读性,也增强了程序的鲁棒性。
示例(c/c++):
#include <string>
#include <iostream>
class B{
public:
B(){
cout << "BBBBBBBBBBBB" <<endl;
};
~B(){
cout << "SHB" << endl;
};
protected:
private:
};
int func(...){
cout << "EN";
return 0;
};
int main (int argv,char* argc[]){
while(1)
{
B b;
goto HEIHEI;
//屏蔽掉goto 和开启goto 看看 B的析构函数是怎么跑的,能正确析构吗?goto都干了什么。
}
HEIHEI: int ABC = 0;
return 0;
}
c.指针
指针是C/C++语言中最灵活,但也是最容易出错的数据类型。用指针进行内存操作往往造成不可预知的错误,而且,通过指针对内存地址进行显示类型转换后,可以类的私有成员,破坏了安全性。在java(.net)中,程序员不能进行任何指针操作,同时java(.net)中的数组是通过类来实现的,很好的解决了数组越界这一C/C++语言中不做检查的缺点。但也不是说JAVA没有指针,虚拟机内部还是使用了指针,只是外人不得使用而已。这有利于Java程序的安全。
指针是C/C++语言中最灵活,但也是最容易出错的数据类型。用指针进行内存操作往往造成不可预知的错误,而且,通过指针对内存地址进行显示类型转换后,可以类的私有成员,破坏了安全性。在java(.net)中,程序员不能进行任何指针操作,同时java(.net)中的数组是通过类来实现的,很好的解决了数组越界这一C/C++语言中不做检查的缺点。但也不是说JAVA没有指针,虚拟机内部还是使用了指针,只是外人不得使用而已。这有利于Java程序的安全。
d.内存管理
在C语言中,程序员使用库函数malloc()和free()来分配和释放内存,C++语言中则是运算符new和delete。再次释放已经释放的内存块或者释放未被分配的内存块,会造成系统的崩溃,而忘记释放不再使用的内存块也会逐渐耗尽系统资源。在java(.net)中,所有的数据结构都是对象,通过运算符new分配内存并得到对象的使用权。无用内存回收机制保证了系统资源的完整,避免了内存管理不周而引起的系统崩溃。Java程序中所有的对象都是用new操作符建立在内存堆栈上,这个操作符类似于c++的new操作符。下面的语句由一个建立了一个类Read的对象,然后调用该对象的work方法:
在C语言中,程序员使用库函数malloc()和free()来分配和释放内存,C++语言中则是运算符new和delete。再次释放已经释放的内存块或者释放未被分配的内存块,会造成系统的崩溃,而忘记释放不再使用的内存块也会逐渐耗尽系统资源。在java(.net)中,所有的数据结构都是对象,通过运算符new分配内存并得到对象的使用权。无用内存回收机制保证了系统资源的完整,避免了内存管理不周而引起的系统崩溃。Java程序中所有的对象都是用new操作符建立在内存堆栈上,这个操作符类似于c++的new操作符。下面的语句由一个建立了一个类Read的对象,然后调用该对象的work方法:
Read r=new Read();
r.work();
语句Read r=new Read();在堆栈结构上建立了一个Read的实例。Java自动进行无用内存回收操作,不需要程序员进行删除。而c++中必须由程序释放内存资源,增加了程序设计者的负担。Java中当一个对象不被再用到时,无用内存回收器将给它加上标签以示删除。JAVA里无用内存回收程序是以线程方式在后台运行的,利用空闲时间工作。
示例(c/c++):
#include <cstdlib>
#include <iostream>
char *string;
char *str1 = "abcdefghi";
char *str2 = "ABCDEFGHI";
int main(int argc, char *argv[])
{
string = new char[10];
strcpy(string, str1);
printf("%s/n", string);
delete []string;
string = new char[10];
strcpy(string, str2);
printf("%s/n", string);
system("PAUSE");
return EXIT_SUCCESS;
}
e.数据类型的一致性
在C/C++语言中,不同的平台上,编译器对简单的数据类型如int、float等分别分配不同的字节数。例如:int在IBM PC上为16位,在VAX-11上就为32位,导致了代码数据的不可移植。在java中,对数据类型的位数分配总是固定的,而不管是在任何的计算机平台上。因此就保证了java数据的平台无关性和可移植性。
在C/C++语言中,不同的平台上,编译器对简单的数据类型如int、float等分别分配不同的字节数。例如:int在IBM PC上为16位,在VAX-11上就为32位,导致了代码数据的不可移植。在java中,对数据类型的位数分配总是固定的,而不管是在任何的计算机平台上。因此就保证了java数据的平台无关性和可移植性。
f.类型转换
在C/C++语言中,可以通过指针进行任意的类型转换,不安全因素大大增加。而在java(.net)语言中系统要对对象的处理进行严格的相容性检查,防止不安全的转换。在c和c++中有时出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在c++中可将一浮点值赋予整型变量,并去掉其尾数。Java不支持c++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。
在C/C++语言中,可以通过指针进行任意的类型转换,不安全因素大大增加。而在java(.net)语言中系统要对对象的处理进行严格的相容性检查,防止不安全的转换。在c和c++中有时出现数据类型的隐含转换,这就涉及了自动强制类型转换问题。例如,在c++中可将一浮点值赋予整型变量,并去掉其尾数。Java不支持c++中的自动强制类型转换,如果需要,必须由程序显式进行强制类型转换。
示例(c/c++):
#include <cstdlib>
#include <iostream>
char *string;
char *str1 = "abcdefghi";
char *str2 = "ABCDEFGHI";
int main(int argc, char *argv[])
{
int i=0;
if(i)
{
printf("%d/n", i);
}
}
但是如果在java(.net)中使用,将提示错误:不能将int型 转换成 Boolean 型
g.头文件
在C/C++语言中使用头文件声明类的原型和全局变量及库函数等,在大的系统中,维护这些头文件是非常困难的。java不支持头文件,类成员的类型和访问权限都封装在一个类中,运行时系统对访问进行控制,防止非法的访问。同时,java(.net)中用import(using)语句与其它类进行通信,以便访问其它类的对象。
在C/C++语言中使用头文件声明类的原型和全局变量及库函数等,在大的系统中,维护这些头文件是非常困难的。java不支持头文件,类成员的类型和访问权限都封装在一个类中,运行时系统对访问进行控制,防止非法的访问。同时,java(.net)中用import(using)语句与其它类进行通信,以便访问其它类的对象。
h.结构和联合
C/C++语言中用结构和联合来表示一定的数据结构,但是由于其成员均为公有的,安全性上存在问题。java不支持结构和联合,通过类把数据结构及对该数据的操作都封装在类里面。
C/C++语言中用结构和联合来表示一定的数据结构,但是由于其成员均为公有的,安全性上存在问题。java不支持结构和联合,通过类把数据结构及对该数据的操作都封装在类里面。
i.预处理
C/C++语言中有宏定义,而用宏定义实现的代码往往影响程序的可读性,而java不支持宏定义。
j.多重继承
c++支持多重继承,这是c++的一个特征,它允许多父类派生一个类。尽管多重继承功能很强,但使用复杂,而且会引起许多麻烦,编译程序实现它也很不容易。Java不支持多重继承,但允许一个类继承多个接口(extends+implement),实现了c++多重继承的功能,又避免了c++中的多重继承实现方式带来的诸多不便
k. 字符串
c和c++不支持字符串变量,在c和c++程序中使用Null终止符代表字符串的结束,在Java中字符串是用类对象(strinR和stringBuffer)来实现的,这些类对象是Java语言的核心,用类对象实现字符串有以下几个优点:
(1)在整个系统中建立字符串和访问字符串元素的方法是一致的;
(2)J3阳字符串类是作为Java语言的一部分定义的,而不是作为外加的延伸部分;
(3)Java字符串执行运行时检空,可帮助排除一些运行时发生的错误;
(4)可对字符串用“十”进行连接操作。
- .Net,Java与C/C++语言的比较(配合代码实现,继续更新中......)
- C语言与Java语言的比较
- java与c语言的比较!
- java与c语言的比较
- 数据结构中栈与队列的c语言代码实现
- 本篇记录c语言中error的用法,学习中后面会继续更新
- C语言与JAVA语言中基本数据类型长度的比较
- Keil中C语言汇编代码比较
- 配合Dijkstra算法的Hash表实现文件C语言
- 配合Dijkstra算法的二叉堆实现文件C语言
- 配合Kruskal算法的二叉堆实现文件C语言
- C语言中与零值的比较
- C语言/C++中与“0”的比较
- C#(.Net) 配合WQL实现并口读写
- java 与 C 的比较
- 不同语言中事件的实现(VB6,VB.Net,C#,Java)
- 快速排序的Java语言与C语言实现
- C++,C#与JAVA实现多态的比较
- 什么是面向对象与过程编程?两者有什么区别(Java学习之一)
- KB939373、KB942830、KB942831补丁,影响XP(SP2)IIS正常启动。
- 配置MyEclipse+Tomcat时的问题及解决
- FlashObject 相关
- 如何在winform的 DataGridView 中捕捉 CheckBox ( DataGridViewCheckBoxCell ) 列的状态改变
- .Net,Java与C/C++语言的比较(配合代码实现,继续更新中......)
- 最大化 AIX 上的 Java 性能,第 2 部分: 速度需求
- 最大化 AIX 上的 Java 性能,第 2 部分: 速度需求
- oracle中与子程序(函数或过程)相关的几个视图
- Memory Ordering in Modern Microprocessors, Part I
- c# 泛型集合Dictionary
- 【成长】【转贴】百日造就游戏制作人——王世颖作
- 三种Statement区别
- Memory Ordering in Modern Microprocessors, Part II