当前位置: 首页 > news >正文

【JAVA与C\C++】JAVA与C\C++ 的不同|JDK、JRE、JVM的区别

JDK、JRE、JVM的区别
JDK=JRE+开发工具集(例如javac编译工具等)
JRE=JVM+java SE标准类库

原文:http://www.douban.com/group/topic/3350253/

int intArray[];
声明了一个整型数组,数组中的每个元素为整型数据。与C ?C++不同,Java在数组的定 义中并不为数组元素分配内存,因此[]中不用指出数组中元素? 个数,即数组长度,而且对于 如上定义的一个数组是不能访问它的任何元素的。我们必须?它分配内存空间,这时要用 到运算符new,其格式如下:
arrayName=new type[arraySize];
其中,arraySize指明数组的长度。如:
intArray=new int[3];

为一个整型数组分配3个int型整数所占据的内存空间。
通常,这两部分可以合在一起,格式如下:
type arrayName=new type[arraySize];
另外,与C、C++中不同,Java对数组元素要进行越界检查以保? 安全性。同时,对于每个 数组都有一个属性length指明它的长度,例如:intArray.length指明数 ?intArray的长度。

for(i=a.length-1;i>=0;i--)
System.out.println("a["+i+"]="+a[i]);
——————————————————————————————————————————————

对高维数组来说,分配内存空间有下面几种方法:
1直接为每一维分配空间,如:
int a[][]=new int[2][3];
2从最高维开始,分别为每一维分配空间,如:
int a[][]=new int[2][];
a[0]=new int[3];
a[1]=new int[3];
完成1中相同的功能。这一点与C、C++是不同的,在C、C++中? 须一次指明每一维的 长度。

———————————————————————————————————————————————
在C++中支持多重继承,即一个类可以继承多个父类,这使得 象的实现变得非常复杂 且不可预料(设想多个父类拥有某些相同的变量和方法)。Java? 只支持单一继承,大大降低 了复杂度。在Java中通过接口可以实现多重继承,但接口的概念 ?简单,使用更方便,而且不 仅仅限于继承,它使多个不相关的类可以具有相同的方法。
———————————————————————————————————————————————

2008-06-03 18:27:46 克洛泽大地 (DREG)

第六章 对象、类、包和接口
在前面几章中,我们对Java的简单数据类型、数组、运算符 作了详细的介绍。从现在开始,我们要深入到面向对象的编程 地方。本章中,我们首先讲述面向对象程序设计的基本概念及 点,然后讨论Java中的类、 对象、包和接口,最后进行小结,给出一个完整的Java文件的格? 。
§6.1面向对象的程序设计
面向过程的程序设计方法从解决问题的每一个步骤入手,? 适合于解决比较小的简单 问题。C语言采用面向过程的程序设计模型,但是由于C本身几? 没有支持代码重用的语言 结构,并且缺乏统一的接口,使得当程序的规模达到一定程度时, 程序员很难控制其复杂性 。
面向对象的程序设计方法则按照现实世界的特点来管理复 ?的事物,把它们抽象为对 象,具有自己的状态和行为,通过对消息的反应来完成一定的任 ?。
6.1.1对象、类和消息
一个对象就是变量和相关的方法的集合,其中变量表明对?的状态,方法表明对象所 具有的行为,下图表示了一个对象的特征:
从图中可以看出,一个对象的变量构成这个对象的核心,包 在它外面的方法使这个 对象和其它对象分离开来。例如:我们可以把汽车抽象为一个 象,用变量来表示它当前的 状态,如速度、油量、型号、所处的位置等,它的行为则可以有 ?速、刹车、换挡等。我 们操纵汽车时,不用去考虑汽车内部各个零件如何运作的细节, ?只需根据汽车可能的行 为使用相应的方法即可。实际上,面向对象的程序设计实现了 对象的封装,使我们不必 关心对象的行为是如何实现的这样一些细节。通过对对象的? 装,实现了模块化和信息隐 藏,有利于程序的可移植性和安全性,同时也利于对复杂对象的 ?理。
对象之间必须要进行交互来实现复杂的行为。例如,要使? 车加速,必须发给它一个 消息,告诉它进行何种动作(这里是加速)以及实现这种动作所? 的参数(这里是需要达到的 速度等)。下图表示了对象A与对象B间的消息传递过程。
从图中可以看出,一个消息包含三个方面的内容:
● 消息的接收者
● 接收对象应采用的方法
● 方法所需要的参数。
同时,接收消息的对象在执行相应的方法后,可能会给发送 息的对象返回一些信息 (如上例中,汽车的仪表上会出现已经达到的速度等)。 由于任何一个对象的所有行为都可以用方法来描述,通过? 息机制就可以完全实现对 象之间的交互,同时,处于不同处理过程甚至不同主机的对象间 ?可以通过消息实现交互 。
上面所说的对象是一个具体的事物,例如每辆汽车都是一? 不同的对象。但是多个对 象常常具有一些共性,如所有的汽车都有轮子、方向盘、常具 一些共性,如所有的汽车 都有轮子、方向盘、刹车装置等。于是我们抽象出一类对象? 共性,这就是类。类中定义 一类对象共有的变量和方法。把一个类实例化即生成该类的? 个对象。比如我们可以定 义一个汽车类来描述所有汽车的共性。通过类的定义人们可? 实现代码的复用。我们不 用去描述每一个对象(如某辆汽车),而是通过创建类(如汽车类) ?一个实例来创建该类的一 个对象,这大大减化了软件的设计。
6.1.2继承
通过对象、类,我们实现了封装,通过子类我们可以实现继 。
对于上例来说,公共汽车、出租车、货车等都是汽车,但它 是不同的汽车,除了具有 汽车的共性外,它们还具有自己的特点(如不同的操作方法,不? 的用途等)。这时我们可以 把它们作为汽车的子类来实现,它们继承父类(汽车)的所有状?和行为,同时增加自己的状 态和行为。通过父类和子类,我们实现了类的的层次,可以从最 ?般的类开始,逐步特殊化 ,定义一系列的子类。同时,通过继承也实现了代码的复用,使 序的复杂性线性地增长,而 不是呈几何级数增长。
在C++中支持多重继承,即一个类可以继承多个父类,这使得 象的实现变得非常复杂 且不可预料(设想多个父类拥有某些相同的变量和方法)。Java? 只支持单一继承,大大降低 了复杂度。在Java中通过接口可以实现多重继承,但接口的概念 ?简单,使用更方便,而且不 仅仅限于继承,它使多个不相关的类可以具有相同的方法。
————————————————————————————————————---
6.1.3多态
Java通过方法重写和方法重载来实现多态。通过方法重写,一个类中可以有多个具有相同名字的方法, ?传递给它们的不同个数 和类型的参数来决定使用哪种方法,这就是多态。

例如,对于一和行为,同时增加自己的状 ?作图的类,它有一个 draw()方法用来画图或输出文字,我们可以传递给它一个字符串 一个矩形、一个圆形,甚 至还可以再指定作图的初始位置、图形的颜色等,对于每一种 现,只需实现一个新的 draw()方法即可,而不需要新起一个名字,这样大大简化了方法? 实现和调用,程序员和用户 都不需要记住很多的方法名,只需要传入相应的参数即可。

通过方法重载,子类可以重新实现父类的某些方法,使其具 自己的特征。例如对于 汽车类的加速方法,其子类(如赛车)中可能增加了一些新的部? 来改善提高加速性能,这时 可以在赛车类中重载父类的加速方法。重载隐藏了父类的方? ,使子类拥有自己具体实现 ,更进一步表明了与父类相比,子类所具有的特殊性。
————————————————————————————————————

相关文章:

  • 【VC++学习日志】VCC++学习日志
  • 【JTAG、SBW、BSL】MSP430的BSL
  • 【stack pointer 】The stack pointer for stack is outside the stack range
  • 【浮点数转16进制】小数(单精度浮点数)转16进制字节
  • 【VISIO绘图】VISIO绘图 学习笔记
  • 【FLASH 操作】FLASH 读写等操作 学习
  • 【ARM9】ARM 2440 学习笔记
  • 【学习经验】学习经验总结
  • 【C到C++】C到C++ 学习笔记 【概念】
  • 【IAR外部编辑器】IAR 使用外部编辑器(VS2005/2008/2010等)的设置
  • 【捕获比较模式】msp430定时器比较捕获理解
  • 【C/C++】C语言signal信号|软中断信号|程序捕获Ctrl+C 信号
  • 【setjmp和longjmp 】 C语言的非局部跳转:setjmp和longjmp(跨函数长跳转)
  • 【C到C++】关于 Complex (复数类)
  • 【C到C++】C++中的抛出异常throw 和异常处理try- catch
  • [译] React v16.8: 含有Hooks的版本
  • [译]CSS 居中(Center)方法大合集
  • 【个人向】《HTTP图解》阅后小结
  • 78. Subsets
  • interface和setter,getter
  • JavaScript服务器推送技术之 WebSocket
  • JS笔记四:作用域、变量(函数)提升
  • js如何打印object对象
  • miaov-React 最佳入门
  • Python_网络编程
  • Python连接Oracle
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • SpringCloud集成分布式事务LCN (一)
  • Vue.js-Day01
  • 力扣(LeetCode)965
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 前端_面试
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 学习笔记TF060:图像语音结合,看图说话
  • 鱼骨图 - 如何绘制?
  • 原生Ajax
  • zabbix3.2监控linux磁盘IO
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • ​​​​​​​​​​​​​​Γ函数
  • ​LeetCode解法汇总518. 零钱兑换 II
  • ​力扣解法汇总946-验证栈序列
  • #define 用法
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (04)odoo视图操作
  • (c语言)strcpy函数用法
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (简单) HDU 2612 Find a way,BFS。
  • (一)认识微服务
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转载)深入super,看Python如何解决钻石继承难题
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)