Java与C/C++的比较(转)
原文链接:Java和c++比较
总结一下Java的小知识,只是想稍微提醒一下自己这些基础的东西,放在这里,随时可以阅览和添加一下,以免走错了方向。
1.面向对象程序设计
面向对象程序设计语言可以直观的反映客观世界的真实表象,使软件开发人员可运用人类认识事物所采用的一般思维方式来进行软件开发,与自然语言差距最小,是当今软件开发与应用的主流技术。Java是纯面向对象的编程语言。
2.几个概念
a.JavaApplication–用来开发命令行程序、窗体程序、服务器端程序等。
b.JavaApplet–是一种嵌入到Web页面的网络应用程序,由浏览器内部的Java解释器来解释运行,这个其实我觉得现在用得很少。
c.JavaServlet–运行于Web服务器端的Java程序,可以与客户端的Applet或者HTML页面进行交互。
d.JSP–用于生成动态网页,基于Servlet技术,在HTML文件中加入Java程 序片段(Scriptlet)和JSP标记。可实现程序与页面格式控制的分离。
3. 多线程机制
a.线程又被称为轻量进程,是比传统进程更小的并且可以并发执行的单位。多个线程可以共用一个内存区域,共享同一组系统资源,其间通信和切换的系统开销要远远小于进程。
b.Java环境本身就是多线程的,若干个线程运行,负责必要的无用单元回收,系统维护等系统级操作;
c.Java提供了一个Thread类和一组内置方法对线程进行实时并发控制。
4.Java与C/C++的比较
1) 概述
Java其实也是由C++发展而来,保留了C++的大部分内容,其编程方式类似于C++,但是摒弃了C++的诸多不合理之处,从根本上解决了C++的固有缺陷。使得Java句法更清晰,规模更小,更易学,同时更趋于健壮性,安全性和平台无关性。
a.全局变量:C++将函数和变量定义为全局的,而不加封装,增加了程序的负担 ,并且往往会由于使用不当而造成系统的崩溃。
b.Java是完全面向对象的语言,类将方法和数据封装在其内,不能在所 用的类之外定义程序的全局变量,只能通过在一个类中定义public static的变量来实现一个全局变量,使得其它类可以访问和修改该变量。这种完善的包装保证了系统的安全性。
2) goto语句
a.goto语句一般用于无条件转移子程序和多结构分支技术,是C++中的合法语句,造成了程序结构的混乱,不易理解。
b.Java不提供goto语句,使得程序更简洁易读,增强了程序的健壮性。
3) 指针
a.指针是C++语言中最灵活也最容易出错的数据类型,易出现由于指针误操作而导致的系统崩溃,同时指针操作内存时也经常出错。
b.Java没有指针的概念,更有利于程序的安全。
4) 内存管理
a.C++语言中必须通过程序释放内存资源,增加了程序设计者的负担,再次释放已释放的内存块或释放未分配的内存块会造成系统崩溃,忘记释放不再使用的内存块也会逐渐耗尽系统资源。
b.Java自动进行内存回收操作,当一个对象不再被用到时,无须使用内存回收器,只需要给它加上标签以示删除。无用内存的回收器在后台运行,利用空闲时间工作,保证了系统资源的完整性,避免了内存管理不周而引起的系统崩溃。
5) 数据类型的一致性
a.在C++语言中,不同的平台上,编译器对简单数据类型分别分配不同的字节数,导致了代码数据的不可移植性。
b.在Java中,采用基于IEEE标准的数据类型,无论任何硬件平台上对数据类型的位数分配总是固定的。
6) 类型转换
a.在C++中,会出现数据类型的隐含转换,涉及到自动强制类型转换,使得不安全因素大大增加。
b.Java中系统要对对象的处理进行严格的相容性检查,防止不安全的转换。如果需要,必须由程序显式进行强制类型转换。
7) 头文件
a.在C++语言中使用头文件声明类的原型和全局变量及库函数等,使得在大系统中对头文件的维护非常困难。
b.Java不支持头文件,类成员的类型和访问权限都封装在类中,运行时 系统对访问进行控制,防止非法访问。
8) 结构和联合
a.C++中用结构和联合来表示一定的数据结构,其成员的公有性带来了安全隐患。
b.Java不支持结构和联合,通过类把数据结构及对该数据的操作封装在类中。
9) 预处理
a.C++在编译过程中都有一个预编译阶段,即预处理器,为开发人员提供了方便,但也增加了编译的复杂性。
b.Java允许预处理,但不支持预处理器功能,提供import语句实现类似 的功能。
10) 多重继承
a.C++支持多重继承,允许许多父类派生一个子类,虽然功能强大,但使用复杂,而且会引起许多麻烦,编译程序实现也很不易。
b.Java不支持多重继承,但允许一个类实现多个接口,即实现了C++的多重继承功能,又避免了C++的缺陷。
11) 操作符重载
a.操作符重载被认为是C++的突出特征。
b.为了保持Java语言尽可能的简单,Java不支持操作符重载。
12) 函数
a.在C中,代码组织在函数中,函数可以访问程序的全局变量; C++增加了类,提供了类方法,但由于C++仍然支持C,所以C++程序中仍然可以使用C的函数,结果导致函数和方法混合使用,使得程序比较混乱 。
b.Java没有函数。作为一种比C++更纯的面向对象的语言,强迫开发人员把所有例行程序包括在类中,可以更好的组织编码。
13) 字符串
a.C++不支持字符串变量,使用“Null”终止符代表字符串的结束。
b.Java字符串类作为Java语言的一部分定义,而不是作为外加的延伸部分,在整个系统中建立字符串和访问字符串元素的方法是一致的。
Java与C/C++的比较(转)的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- Java多线程基础学习(二)
9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...
- Java多线程基础学习(一)
1. 创建线程 1.1 通过构造函数:public Thread(Runnable target, String name){} 或:public Thread(Runnable target ...
- c#与java的区别
经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...
随机推荐
- 电脑同时安装Python2和Python3以及virtualenvwrapper(转)
电脑同时安装Python2和Python3以及virtualenvwrapper https://www.jianshu.com/p/d22f19496e03 windows: 1 下载地址:P ...
- Python3 turtle安装和使用教程
Python3 turtle安装和使用教程 Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数 ...
- 使用Ajax方式POST JSON数据包(转)
add by zhj: 用ajax发送json数据时注意两点, 第一,使用JSON.stringify()函数将data转为json格式的字符串,如下 data: JSON.stringify({ ...
- JAVA死锁的写法
在java开发中,避免不了要加锁控制程序逻辑,但加锁有可能导致死锁,造成线程永远卡死在等待释放锁,后面的代码得不到执行: 在java里,一般是通过synchronized关键字加锁,在jdk1.5版本 ...
- 配置https域名
https://help.aliyun.com/knowledge_detail/95505.html?spm=5176.11065259.1996646101.searchclickresult.6 ...
- 006.SMB之用户管理
一 用户添加 注意: 1 添加samba密码必须已经是系统用户,才能添加为samba用户. 2 samba账户密码可以和系统账号密码不一致(建议设为不同密码). 1.1 smbpasswd [root ...
- PHP PSR 代码规范基本介绍
PSR 是 PHP Standard Recommendation 的简写,即PHP推荐标准. 目前通过的规范有 PSR-0(Autoloading Standard).PSR-1(Basic Cod ...
- Mysql update case
UPDATE table SET total = CASE WHEN total = '1' THEN total- 1 ELSE total = '2' END WHERE id = 17
- WICED SDK 3.3.1
7/20/2015 UPDATE: After installing the IDE you may not see all the APPs. Press F5 in Eclipse to ref ...
- ASP.Net中关于WebAPI与Ajax进行跨域数据交互时Cookies数据的传递
本文主要介绍了ASP.Net WebAPI与Ajax进行跨域数据交互时Cookies数据传递的相关知识.具有很好的参考价值.下面跟着小编一起来看下吧 前言 最近公司项目进行架构调整,由原来的三层架构改 ...