1.C语言中移位运算的源码移位详细解释。
2.算术移位和逻辑移位详解
3.äºè®¡ç®ä¸ä¸è¯¾ç¨
4.一文详解RISC-V指令集
5.The算术 difference between C++ and java.
C语言中移位运算的详细解释。
1、源码移位“按位与”运算符(&)按位与是算术指:参加运算的两个数据,按二进制位进行“与”运算。源码移位如果两个相应的算术erp .net源码二进制位都为1,则该位的源码移位结果值为1;否则为0。这里的算术1可以理解为逻辑中的true,0可以理解为逻辑中的false。按位与其实与逻辑上“与”的源码移位运算规则一致。逻辑上的算术“与”,要求运算数全真,源码移位结果才为真。算术若,源码移位A=true,算术B=true,则A∩B=true 例如:3&5 3的二进制编码是(2)。(为了区分十进制和其他进制,源码移位本文规定,凡是非十进制的数据均在数据后面加上括号,括号中注明其进制,二进制则标记为2)内存储存数据的基本单位是字节(Byte),一个字节由8个位(bit)所组成。位是用以描述电脑数据量的最小单位。二进制系统中,每个0或1就是一个位。将(2)补足成一个字节,则是(2)。5的二进制编码是(2),将其补足成一个字节,则是(2)
按位与运算:
(2)
&(2)
(2)
由此可知3&5=1
c语言代码:
#include <stdio.h>
main()
{
int a=3;
int b = 5;
printf("%d",a&b);
}
按位与的用途:
(1)清零
若想对一个存储单元清零,即使其全部二进制位为0,kafka安全源码分析只要找一个二进制数,其中各个位符合一下条件:原来的数中为1的位,新数中相应位为0。然后使二者进行&运算,即可达到清零目的。例:原数为,即(2),另找一个数,设它为,即(2),将两者按位与运算:
(2)
&(2)
(2)
c语言源代码:
#include <stdio.h>
main()
{
int a=;
int b = ;
printf("%d",a&b);
}
(2)取一个数中某些指定位:若有一个整数a(2byte),想要取其中的低字节,只需要将a与8个1按位与即可。
a
b
c
(3)保留指定位:与一个数进行“按位与”运算,此数在该位取1。
例如:有一数,即(2),想把其中从左边算起的第3,4,5,7,8位保留下来,运算如下:
(2)
&(2)
(2)
即:a=,b=
c=a&b=
c语言源代码:
#include <stdio.h>
main()
{
int a=;
int b = ;
printf("%d",a&b);
}
2、“按位或”运算符(|)
两个相应的二进制位中只要有一个为1,该位的结果值为1。借用逻辑学中或运算的话来说就是,一真为真。例如:(8)|(8),将八进制与八进制进行按位或运算。
|
c语言源代码:
#include <stdio.h>
main()
{
int a=;
int b = ;
printf("%d",linux源码研究实例a|b);
}
应用:按位或运算常用来对一个数据的某些位定值为1。例如:如果想使一个数a的低4位改为1,则只需要将a与(8)进行按位或运算即可。
3、“异或”运算符(^)
他的规则是:若参加运算的两个二进制位值相同则为0,否则为1
即0∧0=0,0∧1=1,1∧0=1, 1∧1=0
例:
∧
c语言源代码:
#include <stdio.h>
main()
{
int a=;
int b = ;
printf("%d",a^b);
}
应用:
(1)使特定位翻转设有数(2),想使其低4位翻转,即1变0,0变1.可以将其与(2)进行“异或”运算。
即:
^
运算结果的低4位正好是原数低4位的翻转。可见,要使哪几位翻转就将与其进行∧运算的该几位置为1即可。
(2)与0相“异或”,保留原值
例如:^=
^
因为原数中的1与0进行异或运算得1,0^0得0,故保留原数。
(3) 交换两个值,不用临时变量
例如:a=3,即(2);b=4,即(2)。
想将a和b的值互换,可以用以下赋值语句实现:
a=a∧b;
b=b∧a;
a=a∧b;
a=(2)
(∧)b=(2)
a=(2)(a∧b的结果,a已变成7)
(∧)b=(2)
b=(2)(b∧a的结果,b已变成3)
(∧)a=(2)
a=(2)(a∧b的结果,a已变成4)
等效于以下两步:
① 执行前两个赋值语句:“a=a∧b;”和“b=b∧a;”相当于b=b∧(a∧b)。
② 再执行第三个赋值语句: a=a∧b。redis源码之dict由于a的值等于(a∧b),b的值等于(b∧a∧b),因此,相当于a=a∧b∧b∧a∧b,即a的值等于a∧a∧b∧b∧b。
c语言源代码:
#include <stdio.h>
main()
{
int a=3;
int b = 4;
a=a^b;
b=b^a;
a=a^b;
printf("a=%d b=%d",a,b);
}
4、“取反”运算符(~)
他是一元运算符,用于求整数的二进制反码,即分别将操作数各二进制位上的1变为0,0变为1。
例如:~(8)
源代码:
#include <stdio.h>
main()
{
int a=;
printf("%d",~a);
}
5、左移运算符(<<)
左移运算符是用来将一个数的各二进制位左移若干位,移动的位数由右操作数指定(右操作数必须是非负值),其右边空出的位用0填补,高位左移溢出则舍弃该高位。
例如:将a的二进制数左移2位,右边空出的位补0,左边溢出的位舍弃。若a=,即(2),左移2位得(2)。
源代码:
#include <stdio.h>
main()
{
int a=;
printf("%d",a<<2);
}
左移1位相当于该数乘以2,左移2位相当于该数乘以2*2=4,<<2=,即乘了4。但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。假设以一个字节(8位)存一个整数,若a为无符号整型变量,则a=时,左移一位时溢出的cms咖啡网站源码是0,而左移2位时,溢出的高位中包含1。
6、右移运算符(>>)
右移运算符是用来将一个数的各二进制位右移若干位,移动的位数由右操作数指定(右操作数必须是非负值),移到右端的低位被舍弃,对于无符号数,高位补0。对于有符号数,将对左边空出的部分用符号位填补(即“算术移位”),而另一些机器则对左边空出的部分用0填补(即“逻辑移位”)。注意:对无符号数,右移时左边高位移入0;对于有符号的值,如果原来符号位为0(该数为正),则左边也是移入0。如果符号位原来为1(即负数),则左边移入0还是1,要取决于所用的计算机系统。有的系统移入0,有的系统移入1。移入0的称为“逻辑移位”,即简单移位;移入1的称为“算术移位”。
例: a的值是八进制数:
a: (用二进制形式表示)
a>>1: (逻辑右移时)
a>>1: (算术右移时)
在有些系统中,a>>1得八进制数,而在另一些系统上可能得到的是。Turbo C和其他一些C编译采用的是算术右移,即对有符号数右移时,如果符号位原来为1,左面移入高位的是1。
源代码:
#include <stdio.h>
main()
{
int a=;
printf("%d",a>>1);
}
7、位运算赋值运算符
位运算符与赋值运算符可以组成复合赋值运算符。
例如: &=, |=, >>=, <<=, ∧=
例: a & = b相当于 a = a & b
a << =2相当于a = a << 2
算术移位和逻辑移位详解
大部分C编译器中,使用移位实现代码比调用乘除法子程序生成的代码效率更高。
整理Java源码时,发现一些位运算操作,移位运算的重要性得以显现。不整理不知,一整理则深感其奥妙。
移位运算,即是将数值向左或向右移动,对于十进制而言,实现放大或缩小十倍的效果;对于二进制而言,则是放大两倍或缩小两倍。
整数乘除法在C/C++中有时会犯错,因此理解移位操作至关重要。
直接移位的数据类型包括:char、short、int、long、unsigned char、unsigned short、unsigned int、unsigned long,而double、float、bool、long double则不能进行移位操作。
对于有符号数据类型,如char、short、int、long,左移时,负数的符号位始终为1,其他位左移,正数所有位左移。右移时,负数取绝对值右移,再取相反数;正数所有位右移。
无符号数据类型,如unsigned char、unsigned short、unsigned int、unsigned long,移位操作使用<< 和 >> 操作符即可。
逻辑移位操作不考虑符号位,移位结果仅为数据位的移动。左移时,低位补0,右移时,高位补0。
算术移位操作则考虑符号位。对于正数,无论左移还是右移,最高位补0。对于负数,左移时高位补1,右移时高位补1。
算术移位中,符号位会跟随整体移动,以保持符号的正确性。例如,正数左移时补0,负数左移时补1。
逻辑移位适用于所有数据类型,而算术移位则需考虑符号位,以保持数值的正确性。
java提供了三种位移运算符:<<(左移)、>>(带符号右移)和>>>(无符号右移)。
移位操作是高效计算的基础,理解其原理有助于提高编程效率。
äºè®¡ç®ä¸ä¸è¯¾ç¨
å¦ä¹ 计ç®æºåºç¨ææ¯ï¼äºè®¡ç®ææ¯ï¼è¦å¦ä¹ ä»ä¹ä¸ä¸è¯¾è¿æè¦å¦ä¹ ä»ä¹æå课
软件å¼åï¼äºå¼åææ¯ï¼å¯ä»¥å°è¿è¾¹çç
ç°å¨å¦ä¹ äºè®¡ç®è¯¾ç¨é½éè¦å¦ä»ä¹å 容ï¼ä»¥åæ¾ä»ä¹å·¥ä½å
ä½ å¥½ï¼äºè®¡ç®æ¯æªæ¥äºèç½çåå±è¶å¿ï¼ç°å¨å ¥è¡äºè®¡ç®è¡ä¸ï¼å°±æå³çæªæ¥çé«èªåå©ï¼ä¸ºæ¤å¾å¤äººä¼éæ©åå ä¸ä¸çå¦ä¹ å¿«éå ¥è¡ãäºè®¡ç®æ¶µççç¥è¯ç¹å¾å¤ï¼åºç¨é¢åä¹æ¯è¾å¹¿æ³ï¼æ¯ä¸ä¸ªé常好çéæ©ãåªè¦ææ¡çæ£çæè½ï¼äºè®¡ç®å°±ä¸èªç¶ä¸æé®é¢ã
å¦æä½ æ³è¦ä¸ä¸çå¦ä¹ äºè®¡ç®ï¼æ´å¤éè¦çæ¯ä»åºæ¶é´åç²¾åï¼ä¸è¬å¨2Wå·¦å³ï¼4-6个ææ¶é´ä¸çãåéç课ç¨å¾ä¸éï¼ä½ å¯ä»¥æ ¹æ®èªå·±çå®é éæ±å»å®å°çä¸ä¸ï¼å 好好è¯å¬ä¹åï¼åéæ©éåèªå·±çãåªè¦åªåå¦å°çä¸è¥¿ï¼åéèªç¶ä¸ä¼å·®ã
大æ°æ®ä¸ä¸ä¸»è¦å¦ä»ä¹è¯¾ç¨
大æ°æ®ææ¯ä¸ä¸å±äºäº¤åå¦ç§ï¼ä»¥ç»è®¡å¦ãæ°å¦ã计ç®æºä¸ºä¸å¤§æ¯ææ§å¦ç§ï¼çç©ãå»å¦ãç¯å¢ç§å¦ãç»æµå¦ã社ä¼å¦ã管çå¦ä¸ºåºç¨æå±æ§å¦ç§ã
æ¤å¤è¿éå¦ä¹ æ°æ®ééãåæãå¤ç软件ï¼å¦ä¹ æ°å¦å»ºæ¨¡è½¯ä»¶å计ç®æºç¼ç¨è¯è¨çï¼ç¥è¯ç»ææ¯äºä¸å¤è½å¤åçè·¨ç人æ(æä¸ä¸ç¥è¯ãææ°æ®æç»´)ã
以ä¸å½äººæ°å¤§å¦ä¸ºä¾ï¼
åºç¡è¯¾ç¨ï¼æ°å¦åæãé«ç代æ°ãæ®éç©çæ°å¦ä¸ä¿¡æ¯ç§å¦æ¦è®ºãæ°æ®ç»æãæ°æ®ç§å¦å¯¼è®ºãç¨åºè®¾è®¡å¯¼è®ºãç¨åºè®¾è®¡å®è·µã
å¿ ä¿®è¯¾ï¼ç¦»æ£æ°å¦ãæ¦çä¸ç»è®¡ãç®æ³åæä¸è®¾è®¡ãæ°æ®è®¡ç®æºè½ãæ°æ®åºç³»ç»æ¦è®ºã计ç®æºç³»ç»åºç¡ã并è¡ä½ç³»ç»æä¸ç¼ç¨ãéç»æå大æ°æ®åæã
é修课ï¼æ°æ®ç§å¦ç®æ³å¯¼è®ºãæ°æ®ç§å¦ä¸é¢ãæ°æ®ç§å¦å®è·µãäºèç½å®ç¨å¼åææ¯ãæ½æ ·ææ¯ãç»è®¡å¦ä¹ ãåå½åæãéæºè¿ç¨ã
(3)äºè®¡ç®ä¸ä¸è¯¾ç¨æ©å±é 读ï¼
大æ°æ®å²ä½ï¼
1ã大æ°æ®ç³»ç»æ¶æå¸
大æ°æ®å¹³å°æ建ãç³»ç»è®¾è®¡ãåºç¡è®¾æ½ã
æè½ï¼è®¡ç®æºä½ç³»ç»æãç½ç»æ¶æãç¼ç¨èå¼ãæ件系ç»ãåå¸å¹¶è¡å¤ççã
2ã大æ°æ®ç³»ç»åæå¸
é¢åå®é è¡ä¸é¢åï¼å©ç¨å¤§æ°æ®ææ¯è¿è¡æ°æ®å®å ¨çå½å¨æ管çãåæååºç¨ã
æè½ï¼äººå·¥æºè½ãæºå¨å¦ä¹ ãæ°çç»è®¡ãç©éµè®¡ç®ãä¼åæ¹æ³ã
3ãhadoopå¼åå·¥ç¨å¸ã
解å³å¤§æ°æ®åå¨é®é¢ã
4ãæ°æ®åæå¸
ä¸åè¡ä¸ä¸ï¼ä¸é¨ä»äºè¡ä¸æ°æ®æéãæ´çãåæï¼å¹¶ä¾æ®æ°æ®ååºè¡ä¸ç 究ãè¯ä¼°åé¢æµçä¸ä¸äººåãå¨å·¥ä½ä¸éè¿è¿ç¨å·¥å ·ï¼æåãåæãåç°æ°æ®ï¼å®ç°æ°æ®çåä¸æä¹ã
5ãæ°æ®ææå·¥ç¨å¸
åæ°æ®ææè¦ä»æµ·éæ°æ®ä¸åç°è§å¾ï¼è¿å°±éè¦ä¸å®çæ°å¦ç¥è¯ï¼æåºæ¬çæ¯å¦çº¿æ§ä»£æ°ãé«ç代æ°ãå¸ä¼åãæ¦ç论çãç»å¸¸ä¼ç¨å°çè¯è¨å æ¬PythonãJavaãCæè C++ï¼æèªå·±ç¨Pythonæè Javaæ¯è¾å¤ãææ¶ç¨MapReceåç¨åºï¼åç¨Hadoopæè Hypæ¥å¤çæ°æ®ï¼å¦æç¨Pythonçè¯ä¼åSparkç¸ç»åã
Linuxäºè®¡ç®è¯¾ç¨å ·ä½å¦ä»ä¹
ä¼å°±ä¸linuxäºè®¡ç®å¹è®å¦é¢çåäºå¹å »å¤æ¹ä½åå±çäºè®¡ç®äººæï¼è¯¾ç¨è®¾ç½®ç§å¦åçï¼é¢å0åºç¡äººåï¼æå¦å 容涵çåå广æ³ï¼å¤§å项ç®å®è®ï¼å®ææ§æ´å¼ºã
ä¼å°±ä¸Linuxäºè®¡ç®çå¹è®è¯¾ç¨å 容ä¸è¬å为å 个é¶æ®µï¼ç¬¬ä¸é¶æ®µä¸»è¦å¦ä¹ ç½ç»åºç¡ï¼å æ¬è®¡ç®æºç½ç»(以太ç½ãTCP/IPç½ç»æ¨¡å)ãäºè®¡ç®ç½ç»(ç½ç»QoSã交æ¢æºä¸è·¯ç±å¨)ï¼é å¤æä¼ä¸çº§é¡¹ç®å®æï¼IPå°åé ç½®ä¸DNS解æã
第äºé¶æ®µå°å¦ä¹ Linuxåºç¡ï¼å æ¬Linuxæä½ç³»ç»(æ件æéãä½ä¸æ§å¶ä¸è¿ç¨ç®¡ç)以åLinuxé«çº§ç®¡ç(SedãAwkå·¥å ·ãæºç ç¼è¯)ãä¼ä¸çº§é¡¹ç®å®æ为ï¼äºæ°æ®ä¸å¿ä¸»æºCPUèµæºå©ç¨çå®æ¶ç»è®¡ãåæç³»ç»ã
第ä¸é¶æ®µå¦ä¹ Linuxè¿ç»´èªå¨åï¼ä¼ä¸çº§é¡¹ç®å®æ为Python+Shellå®ç°ä¼ä¸çº§FTPæ件ç»ä¸ç®¡çã
第åé¶æ®µæ¯æ°æ®åºè¿ç»´ç®¡ççå¦ä¹ ï¼ä¼ä¸çº§é¡¹ç®å®æï¼MySQL Galeraé«å¯ç¨é群ç¯å¢é¨ç½²ãå¼æ¥æ¶æ¯éåé群RabbitMQé¨ç½²ä¸è¿ç»´ã
第äºé¶æ®µçå¹è®å 容为ä¼ä¸çº§äºæ¶æ管çä¸ç»¼åå®æ(PaaS+TaaS)ï¼é¡¹ç®è®ç»çæ¯åºäºLAMPæ¶æå®ç°äºè®¡ç®PaaSå¹³å°å ¸ååºç¨é¨ç½²ä¸è¿ç»´ï¼éè¿Nginxå®ç°åä¸çº§å¹¶å访é®å¤çã
æåä¸ä¸ªé¶æ®µå°±æ¯å°±ä¸æ导ï¼ä»ç®åãé¢è¯æå·§çå±é¢å©å¦åæåï¼å¹å »å¦åæ²é表达è½åï¼è®©å¦åæ¸ æ°äºè§£èä¸åå±è§åï¼æç¡®èªèº«å®ä½ï¼æ¾å°éåèªèº«åå±çå·¥ä½ã
计ç®æºäºè®¡ç®æåªäºä¸»å¹²è¯¾ç¨
çµèç计ç®ä¸»è¦é è¿ç®å¨ã
è¿ç®å¨ï¼arithmetic unitï¼è®¡ç®æºä¸æ§è¡åç§ç®æ¯åé»è¾è¿ç®æä½çé¨ä»¶ãè¿ç®å¨çåºæ¬æä½å æ¬å ãåãä¹ãé¤ååè¿ç®ï¼ä¸ãæãéãå¼æçé»è¾æä½ï¼ä»¥å移ä½ãæ¯è¾åä¼ éçæä½ï¼äº¦ç§°ç®æ¯é»è¾é¨ä»¶ï¼ALUï¼ã
è¿ç®å¨ç±ç®æ¯é»è¾åå ï¼ALUï¼ãç´¯å å¨ãç¶æå¯åå¨ãéç¨å¯åå¨ç»çç»æãç®æ¯é»è¾è¿ç®åå ï¼ALUï¼çåºæ¬åè½ä¸ºå ãåãä¹ãé¤ååè¿ç®ï¼ä¸ãæãéãå¼æçé»è¾æä½ï¼ä»¥å移ä½ãæ±è¡¥çæä½ã计ç®æºè¿è¡æ¶ï¼è¿ç®å¨çæä½åæä½ç§ç±»ç±æ§å¶å¨å³å®ãè¿ç®å¨å¤ççæ°æ®æ¥èªåå¨å¨ï¼å¤çåçç»ææ°æ®é常éååå¨å¨ï¼æææ¶å¯åå¨è¿ç®å¨ä¸ãä¸Control Unitå ±åç»æäºCPUçæ ¸å¿é¨åã
è¿ç®å¨çå¤ç对象æ¯æ°æ®ï¼æ以æ°æ®é¿åº¦å计ç®æºæ°æ®è¡¨ç¤ºæ¹æ³ï¼å¯¹è¿ç®å¨çæ§è½å½±åæ大ã年代微å¤çå¨å¸¸ä»¥1个ã4个ã8个ã个äºè¿å¶ä½ä½ä¸ºå¤çæ°æ®çåºæ¬åä½ã大å¤æ°éç¨è®¡ç®æºå以ããä½ä½ä¸ºè¿ç®å¨å¤çæ°æ®çé¿åº¦ãè½å¯¹ä¸ä¸ªæ°æ®
è¿ç®å¨
çææä½åæ¶è¿è¡å¤ççè¿ç®å¨ç§°ä¸ºå¹¶è¡è¿ç®å¨ãå¦æä¸æ¬¡åªå¤çä¸ä½ï¼å称为串è¡è¿ç®å¨ãæçè¿ç®å¨ä¸æ¬¡å¯å¤çå ä½ ï¼é常为6æ8ä½ï¼ï¼ä¸ä¸ªå®æ´çæ°æ®åæè¥å¹²æ®µè¿è¡è®¡ç®ï¼ç§°ä¸ºä¸²/并è¡è¿ç®å¨ãè¿ç®å¨å¾å¾åªå¤çä¸ç§é¿åº¦çæ°æ®ãæçä¹è½å¤çå ç§ä¸åé¿åº¦çæ°æ®ï¼å¦ååé¿è¿ç®ãåååé¿è¿ç®ãåååé¿è¿ç®çãæçæ°æ®é¿åº¦å¯ä»¥å¨è¿ç®è¿ç¨ä¸æå®ï¼ç§°ä¸ºååé¿è¿ç®ã
æç §æ°æ®çä¸å表示æ¹æ³ï¼å¯ä»¥æäºè¿å¶è¿ç®å¨ãåè¿å¶è¿ç®å¨ãåå è¿å¶è¿ç®å¨ãå®ç¹æ´æ°è¿ç®å¨ãå®ç¹å°æ°è¿ç®å¨ãæµ®ç¹æ°è¿ç®å¨çãæç §æ°æ®çæ§è´¨ï¼æå°åè¿ç®å¨åå符è¿ç®å¨çã
å®ç主è¦åè½æ¯è¿è¡ç®æ¯è¿ç®åé»è¾è¿ç®ã
è¿ç®å¨è½æ§è¡å¤å°ç§æä½åæä½é度ï¼æ å¿çè¿ç®å¨è½åç强弱ï¼çè³æ å¿ç计ç®æºæ¬èº«çè½åãè¿ç®å¨æåºæ¬çæä½æ¯å æ³ãä¸ä¸ªæ°ä¸é¶ç¸å ï¼çäºç®åå°ä¼ éè¿ä¸ªæ°ãå°ä¸ä¸ªæ°ç代ç æ±è¡¥ï¼ä¸å¦ä¸ä¸ªæ°ç¸å ï¼ç¸å½äºä»åä¸ä¸ªæ°ä¸åå»åä¸ä¸ªæ°ãå°ä¸¤ä¸ªæ°ç¸åå¯ä»¥æ¯è¾å®ä»¬ç大å°ã
å·¦å³ç§»ä½æ¯è¿ç®å¨çåºæ¬æä½ãå¨æ符å·çæ°ä¸ï¼ç¬¦å·ä¸å¨èåªç§»æ°
è¿ç®å¨
æ®ä½ï¼ç§°ä¸ºç®æ¯ç§»ä½ãè¥æ°æ®è¿å符å·çææä½ä¸é½ç§»å¨ï¼ç§°ä¸ºé»è¾ç§»ä½ãè¥å°æ°æ®çæé«ä½ä¸æä½ä½é¾æ¥è¿è¡é»è¾ç§»ä½ï¼ç§°ä¸ºå¾ªç¯ç§»ä½ã
è¿ç®å¨çé»è¾æä½å¯å°ä¸¤ä¸ªæ°æ®æä½è¿è¡ä¸ãæãå¼æï¼ä»¥åå°ä¸ä¸ªæ°æ®çåä½æ±éãæçè¿ç®å¨è¿è½è¿è¡äºå¼ä»£ç çç§é»è¾æä½ã
ä¹ãé¤æ³æä½è¾ä¸ºå¤æãå¾å¤è®¡ç®æºçè¿ç®å¨è½ç´æ¥å®æè¿äºæä½ãä¹æ³æä½æ¯ä»¥å æ³æä½ä¸ºåºç¡çï¼ç±ä¹æ°çä¸ä½æå ä½è¯ç æ§å¶é次产çé¨å积ï¼é¨å积ç¸å å¾ä¹ç§¯ãé¤æ³åå常以ä¹æ³ä¸ºåºç¡ï¼å³éå®è¥å¹²å åä¹ä»¥é¤æ°ï¼ä½¿å®è¿ä¼¼ä¸º1ï¼è¿äºå åä¹è¢«é¤æ°åå¾åã没ææ§è¡ä¹æ³ãé¤æ³ç¡¬ä»¶ç计ç®æºå¯ç¨ç¨åºå®ç°ä¹ãé¤ï¼ä½éåº¦æ ¢å¾å¤ãæçè¿ç®å¨è¿è½æ§è¡å¨ä¸æ¹æ°ä¸å¯»æ±æ大æ°ï¼å¯¹ä¸æ¹æ°æ®è¿ç»æ§è¡åä¸ç§æä½ï¼æ±å¹³æ¹æ ¹çå¤ææä½ã
å¸ææè½å¸®å©ä½ 解çéæã
äºè®¡ç®éè¦å¦ä»ä¹è¯¾ç¨ææ¨èå
æ¨èä¸åéçäºè®¡ç®è¯¾ç¨ï¼å¦åéäºè®¡ç®æç¨åºæ¥çå¦åé½è¯´æ¾å·¥ä½å¾å®¹æã
äºè®¡ç®éä¿è§£éï¼äºè®¡ç®éè¦å¦ä»ä¹è¯¾ç¨
äºè®¡ç®éä¿ç讲ï¼äºç«¯æ¶è®¾ä¸å°æ§è½å¼ºå²çæå¡å¨ï¼æ¯å¦ï¼æ ¸çCPU ãG çå åï¼N个T çåå¨çãå¨è¿æ ·æçé ç½®å¾å¯ä½çæå¡å¨ä¸éè¿èææºææ¯ï¼å建å å个èææºï¼ä»å®¿ä¸»æå¡å¨ç¡¬ä»¶é ç½®ä¸åååºèµæºé é¢ï¼ï¼å®¢æ·æºéè¿âè¿ç¨æ¡é¢åè®®âæâè¿ç¨æ§å¶åè®®âè¿æ¥å°èææºï¼è¿æ ·ä½ å°±å¯ä»¥å¨æ¬å°å®¢æ·æºä½¿ç¨è¿å°è¿ç¨çèææºã æ以çè¿ç®(计ç®)é½æ¯å¨è¿å°èææºä¸å®æçï¼æ¬å°å®¢æ·æºåªæ¯è¾å ¥ä¸è¾åºï¼éæ¬å°è®¡ç®ï¼ãå¦ä¹ äºè®¡ç®å¯ä»¥å»ççopenstack ,å¤äºè§£KVM çã
äºè®¡ç®ä¸Hadoopç课ç¨å 容æ¯ä»ä¹
课ç¨ç®æ
çæåææ¡äºè®¡ç®çæ¶æä¸åç
äºè§£å¤§è§æ¨¡æ°æ®å¤ççæ ¸å¿ææ¯
çæ并ç解ä¼ä¸å¤§è§æ¨¡æ°æ®å¤çåºç¨ç注æäºé¡¹
对å¼æºç³»ç»Hadoopçè¡ä¸åºç¨
课ç¨å 容
Hadoop
ææ¯åå ¶åºç¨åºç¡
1天
Hadoop
管çå
2天
Hadoop
å¼åå
2天
Hive
å¼å管ç
1天
æ¥æºï¼åä¸æºè½åæ°æ®ä»åºç±å¥½è
æä¾ï¼åä¸æºè½åäºè®¡ç®ãããããéªè®ï¼ï¼ï¼ï¼ï¼å æ¬è¿ä¸ªè¯¾
äºè®¡ç®çåºç¡è¯¾ç¨
äºè®¡ç®æ¯ä¸å¥ç³»ç»ç解å³æ¹æ¡ãéè¦ä»å®è§çºµåå»çï¼åå°å¾®è§å ·ä½çæ个äºè®¡ç®çå项æä¸æ¯ãå®å±å为åºç¡æ¶æå±ï¼IaaSï¼ï¼å¹³å°æ¶æå±ï¼PaaSï¼ï¼è½¯ä»¶æ¶æå±ï¼SaaSï¼ï¼æå¡æ¶æå±ï¼BPaaSï¼ãæ¯ä¸ªå±é¢ç建设å®æ½è¿ç¨åå¯ä»¥ç¬ç«åå¨ï¼å¹¶æ²¡æå ååªåï¼å建åªåçå å顺åºãå ¶ä¸IaaSæ¯å¿ ç»ä¹è·¯ã纵åææ¡ä½äºï¼å横åç»åå»çãæ¯å¦ï¼IaaSå为åå¨æ± ï¼è´è½½åè¡¡æ± ï¼èç¹è®¡ç®æ± ï¼å ¶ä¸ååç»å为å°åæºè®¡ç®æ± ï¼æå¡å¨è®¡ç®æ± çãåææä½ç³»ç»çæ¬çä¸ååç»åï¼çã
äºè®¡ç®å¹è®éè¦å å¦ä»ä¹
é¶åºç¡å¦ä¹ linuxè½å¦ä¼å?
å æ¥è¯´ç»è®ºï¼é¶åºç¡å¦ä¹ Linuxæ¯å¯ä»¥å¦ä¼çï¼èä¸ç°å¨å¹è®æºæç课ç¨é½æ¯é¶åºç¡éå¦çï¼åæé½æåºç¡ç¥è¯çå¦ä¹ ï¼é计ç®æºä¸ä¸ãé¶åºç¡å°ç½é½æ¯å¯ä»¥ä»å¤´å¼å§å¦ä¹ çã
èä¸å¨æ¯ä¸ªé¶æ®µé½æé¶æ®µæ£æµï¼æ¥æ¼è¡¥ç¼ºï¼èæ ¸å¦åçå¦ä¹ ç»æï¼ä¸åæ ¼ä¸è¿å ³çè¿è¦åå¦ä¹ ï¼ç´å°åæ ¼è¿å ³ã
éè¦å åå¤åªäºåºç¡ç¥è¯å?
Linuxéè¦åå¤çåºç¡ç¥è¯é¦å æ¯ç½ç»åºç¡ï¼å æ¬è®¡ç®æºç½ç»(以太ç½ãTCP/IPç½ç»æ¨¡å)ãäºè®¡ç®ç½ç»(ç½ç»QoSã交æ¢æºä¸è·¯ç±å¨)ï¼è¦å¦ä¹ å°ç½ç»åºæ¬æ¦å¿µåçãç½ç»çååæ¹å¼ï¼äºè§£æ°æ®ä¸å¿ç¡¬ä»¶è®¾æ½ï¼æ°æ®éä¿¡åºæ¬åçï¼ä»¥å¤ªç½åºç¡åç°æéä¿¡ç½ç»ä¼ è¾è§èãåç»çº¿ãIPå°ååºæ¬ææãåç±»;å°å解æä¸ååæ¹æ³;è½å¤ç¬ç«é ç½®IP并è¿è¡åå解æçåºç¡æä½ççç¸å ³ç¥è¯ã
linuxäºè®¡ç®è¯¾ç¨çåäºå¹å »å¤æ¹ä½åå±çäºè®¡ç®äººæï¼è¯¾ç¨è®¾ç½®ç§å¦åçï¼é¢å0åºç¡äººåï¼æå¦å 容涵çåå广æ³ï¼å¤§å项ç®å®è®ï¼å®ææ§æ´å¼ºã 讲å¸å ¨ç¨é¢æï¼ä¸¥ç®¡å¦ä¹ ï¼å°±ä¸æå¡è´¯ç©¿å§ç»ï¼æ¨èå°±ä¸ã欢è¿åä½å°ä¼ä¼´åæ¥è¯å¬ã
一文详解RISC-V指令集
揭秘RISC-V指令集的奥秘 指令集是CPU的灵魂,它是硬件与软件交互的关键桥梁,决定了计算机的运算方式和效率。RISC-V指令集,作为精简指令集的代表,它的设计原则和特性使其在现代计算架构中独树一帜。让我们深入剖析其核心理念和实际应用。指令集:基石与分类
指令集,就像CPU的语言,包括一系列精心设计的指令,如CISC(复杂指令集)和RISC(精简指令集)。RISC-V指令集以简单、模块化著称,可根据需求灵活扩展,从RVG到RVG,仅通过调整寄存器宽度和寻址方式即可满足基本运行需求。指令集架构:定制的接口
指令集架构(ISA)是定制化的核心,它根据应用需求的不同而变化。设计一个RISC-V指令体系,就是要定义出一套能满足特定应用的指令结构和操作模式。RISC-V的特色
RISC-V指令集的特点鲜明:开放源码、指令简洁、模块化设计。其RVG和RVG指令集,尽管有寄存器位宽的差异,但都包含基础的整数运算、分支转移、加载存储、控制状态操作和系统调用等功能,便于扩展和定制。模块化与灵活性
通过灵活的模块化设计,开发者可以根据应用需求选择基础指令集,并添加扩展指令,打造出符合特定场景的CPU架构。对于初学者来说,理解RVI基础指令集是关键,它是编译器和汇编语言设计的基础框架。指令详解
RVI指令集以清晰的结构示例,如bge/blt等分支指令,展示了其直观的操作方式。指令格式规定了操作码、立即数、功能字段及寄存器操作,共分六种,让指令执行效率更高。寄存器系统
个通用寄存器,其中x0作为0值寄存器,为程序员提供便利。像addi x0,x0,0这样的指令,实际上就是空指令,体现了RISC-V的简洁性。深入解读RVI指令
算术与逻辑指令:基础的加减、比较、逻辑和移位操作,以寄存器和立即数两种形式存在,其中减法指令是必要的。 Load与Store指令:内存访问仅限于LOAD和STORE,通过简单寻址模式提高效率,避免了复杂的内存访问带来的流水线冲突。分支跳转指令
条件分支:beq、bne等指令根据寄存器值执行条件跳转,灵活控制程序流程。 无条件跳转:JAL和JALR指令支持直接和间接跳转,实现函数调用,简化编程逻辑。控制与状态寄存器
RISC-V定义了独立的控制和状态寄存器(CSR),这些寄存器提供了访问程序性能计数器的能力,如执行时间、指令数量等,对优化和调试至关重要。 通过本文的深度解析,RISC-V指令集的精髓已经清晰呈现。无论是从架构设计到实际操作,RISC-V都以其独特的优势,为现代计算世界注入了新的活力。The difference between C++ and java.
对æ¯C++åJava
âä½ä¸ºä¸åC++ç¨åºåï¼æ们æ©å·²ææ¡äºé¢å对象ç¨åºè®¾è®¡çåºæ¬æ¦å¿µï¼èä¸Javaçè¯æ³æ çæ¯é常çæçãäºå®ä¸ï¼Javaæ¬æ¥å°±æ¯ä»C++è¡çåºæ¥çãâ
ç¶èï¼C++åJavaä¹é´ä»åå¨ä¸äºæ¾èçå·®å¼ãå¯ä»¥è¿æ ·è¯´ï¼è¿äºå·®å¼ä»£è¡¨çææ¯çæ大è¿æ¥ãä¸æ¦æ们å¼æ¸ æ¥äºè¿äºå·®å¼ï¼å°±ä¼ç解为ä»ä¹è¯´Javaæ¯ä¸ç§ä¼ç§çç¨åºè®¾è®¡è¯è¨ãæ¬éå½å°å¼å¯¼å¤§å®¶è®¤è¯ç¨äºåºåJavaåC++çä¸äºéè¦ç¹å¾ã
(1) æ大çéç¢å¨äºé度ï¼è§£éè¿çJavaè¦æ¯Cçæ§è¡éåº¦æ ¢ä¸çº¦åãæ 论ä»ä¹é½ä¸è½é»æ¢Javaè¯è¨è¿è¡ç¼è¯ãåä½æ¬ä¹¦çæ¶åï¼åååºç°äºä¸äºåå®æ¶ç¼è¯å¨ï¼å®ä»¬è½æ¾èå å¿«é度ãå½ç¶ï¼æ们å®å ¨æçç±è®¤ä¸ºä¼åºç°éç¨äºæ´å¤æµè¡å¹³å°ç纯åºæç¼è¯å¨ï¼ä½åè¥æ²¡æé£äºç¼è¯å¨ï¼ç±äºé度çéå¶ï¼å¿ é¡»æäºé®é¢æ¯Javaä¸è½è§£å³çã
(2) åC++ä¸æ ·ï¼Javaä¹æä¾äºä¸¤ç§ç±»åç注éã
(3) ææä¸è¥¿é½å¿ é¡»ç½®å ¥ä¸ä¸ªç±»ãä¸åå¨å ¨å±å½æ°æè å ¨å±æ°æ®ãå¦ææ³è·å¾ä¸å ¨å±å½æ°çä»·çåè½ï¼å¯èèå°staticæ¹æ³åstaticæ°æ®ç½®å ¥ä¸ä¸ªç±»éã注æ没æ象ç»æãæ举æè èåè¿ä¸ç±»çä¸è¥¿ï¼ä¸ååªæâç±»âï¼Classï¼ï¼
(4) æææ¹æ³é½æ¯å¨ç±»ç主ä½å®ä¹çãæ以ç¨C++çç¼å çï¼ä¼¼ä¹ææå½æ°é½å·²åµå ¥ï¼ä½å®æ 并éå¦ä½ï¼åµå ¥çé®é¢å¨åé¢è®²è¿°ï¼ã
(5) å¨Javaä¸ï¼ç±»å®ä¹éåå ä¹åC++ä¸æ ·çå½¢å¼ãä½æ²¡ææ å¿ç»æçåå·ã没æclass fooè¿ç§å½¢å¼ç类声æï¼åªæç±»å®ä¹ã
class aType()
void aMethod() { /* æ¹æ³ä¸»ä½ */}
}
(6) Javaä¸æ²¡æä½ç¨åèå´è¿ç®ç¬¦â::âãJavaå©ç¨ç¹å·åææçäºæ ï¼ä½å¯ä»¥ä¸ç¨èèå®ï¼å 为åªè½å¨ä¸ä¸ªç±»éå®ä¹å ç´ ãå³ä½¿é£äºæ¹æ³å®ä¹ï¼ä¹å¿ é¡»å¨ä¸ä¸ªç±»çå é¨ï¼æä»¥æ ¹æ¬æ²¡æå¿ è¦æå®ä½ç¨åçèå´ãæ们注æå°çä¸é¡¹å·®å¼æ¯å¯¹staticæ¹æ³çè°ç¨ï¼ä½¿ç¨ClassName.methodName()ãé¤æ¤ä»¥å¤ï¼packageï¼å ï¼çååæ¯ç¨ç¹å·å»ºç«çï¼å¹¶è½ç¨importå ³é®åå®ç°C++çâ#includeâçä¸é¨ååè½ãä¾å¦ä¸é¢è¿ä¸ªè¯å¥ï¼
import java.awt.*;
ï¼#include并ä¸ç´æ¥æ å°æimportï¼ä½å¨ä½¿ç¨æ¶æ类似çæè§ãï¼
(7) ä¸C++类似ï¼Javaå«æä¸ç³»åâ主类åâï¼Primitive typeï¼ï¼ä»¥å®ç°æ´ææçç访é®ãå¨Javaä¸ï¼è¿äºç±»åå æ¬booleanï¼charï¼byteï¼shortï¼intï¼longï¼float以ådoubleãææ主类åç大å°é½æ¯åºæçï¼ä¸ä¸å ·ä½çæºå¨æ å ³ï¼èèå°ç§»æ¤çé®é¢ï¼ãè¿è¯å®ä¼å¯¹æ§è½é æä¸å®çå½±åï¼å ·ä½åå³äºä¸åçæºå¨ã对类åçæ£æ¥åè¦æ±å¨Javaéåå¾æ´èå»ãä¾å¦ï¼
â æ¡ä»¶è¡¨è¾¾å¼åªè½æ¯booleanï¼å¸å°ï¼ç±»åï¼ä¸å¯ä½¿ç¨æ´æ°ã
â å¿ é¡»ä½¿ç¨è±¡X+Yè¿æ ·çä¸ä¸ªè¡¨è¾¾å¼çç»æï¼ä¸è½ä» ä» ç¨âX+Yâæ¥å®ç°âå¯ä½ç¨âã
(8) charï¼å符ï¼ç±»å使ç¨å½é éç¨çä½Unicodeå符éï¼æ以è½èªå¨è¡¨è¾¾å¤§å¤æ°å½å®¶çå符ã
(9) éæå¼ç¨çå串ä¼èªå¨è½¬æ¢æString对象ãåCåC++ä¸åï¼æ²¡æç¬ç«çéæå符æ°ç»å串å¯ä¾ä½¿ç¨ã
() Javaå¢æ·»äºä¸ä¸ªå³ç§»ä½è¿ç®ç¬¦â>>>âï¼å ·æä¸âé»è¾âå³ç§»ä½è¿ç®ç¬¦ç±»ä¼¼çåç¨ï¼å¯å¨ææ«å°¾æå ¥é¶å¼ãâ>>âåä¼å¨ç§»ä½çåæ¶æå ¥ç¬¦å·ä½ï¼å³âç®æ¯â移ä½ï¼ã
() 尽管表é¢ä¸ç±»ä¼¼ï¼ä½ä¸C++ç¸æ¯ï¼Javaæ°ç»éç¨çæ¯ä¸ä¸ªé¢ä¸ºä¸åçç»æï¼å¹¶å ·æç¬ç¹çè¡ä¸ºãæä¸ä¸ªåªè¯»çlengthæåï¼éè¿å®å¯ç¥éæ°ç»æå¤å¤§ãèä¸ä¸æ¦è¶ è¿æ°ç»è¾¹çï¼è¿è¡ææ£æ¥ä¼èªå¨ä¸¢å¼ä¸ä¸ªå¼å¸¸ãæææ°ç»é½æ¯å¨å åâå âéå建çï¼æ们å¯å°ä¸ä¸ªæ°ç»åé ç»å¦ä¸ä¸ªï¼åªæ¯ç®åå°å¤å¶æ°ç»å¥æï¼ãæ°ç»æ è¯ç¬¦å±äºç¬¬ä¸çº§å¯¹è±¡ï¼å®çæææ¹æ³é常é½éç¨äºå ¶ä»ææ对象ã
() 对äºææä¸å±äºä¸»ç±»åç对象ï¼é½åªè½éè¿newå½ä»¤å建ãåC++ä¸åï¼Java没æç¸åºçå½ä»¤å¯ä»¥âå¨å æ ä¸âå建ä¸å±äºä¸»ç±»åç对象ãææ主类åé½åªè½å¨å æ ä¸å建ï¼åæ¶ä¸ä½¿ç¨newå½ä»¤ãææ主è¦çç±»é½æèªå·±çâå°è£ ï¼å¨ï¼âç±»ï¼æ以è½å¤éè¿newå建çä»·çã以å åâå â为åºç¡ç对象ï¼ä¸»ç±»åæ°ç»æ¯ä¸ä¸ªä¾å¤ï¼å®ä»¬å¯è±¡C++é£æ ·éè¿éååå§åè¿è¡åé ï¼æè 使ç¨newï¼ã
() Javaä¸ä¸å¿ è¿è¡æå声æãè¥æ³å¨å®ä¹å使ç¨ä¸ä¸ªç±»ææ¹æ³ï¼åªéç´æ¥ä½¿ç¨å®å³å¯ââç¼è¯å¨ä¼ä¿è¯ä½¿ç¨æ°å½çå®ä¹ãæ以åå¨C++ä¸ä¸åï¼æ们ä¸ä¼ç¢°å°ä»»ä½æ¶åæåå¼ç¨çé®é¢ã
() Java没æé¢å¤çæºãè¥æ³ä½¿ç¨å¦ä¸ä¸ªåºéçç±»ï¼åªé使ç¨importå½ä»¤ï¼å¹¶æå®åºåå³å¯ãä¸åå¨ç±»ä¼¼äºé¢å¤çæºçå®ã
() Javaç¨å 代æ¿äºå½å空é´ãç±äºå°ææä¸è¥¿é½ç½®å ¥ä¸ä¸ªç±»ï¼èä¸ç±äºéç¨äºä¸ç§å为âå°è£ âçæºå¶ï¼å®è½é对类åè¿è¡ç±»ä¼¼äºå½å空é´å解çæä½ï¼æ以å½åçé®é¢ä¸åè¿å ¥æ们çèèä¹åãæ°æ®å ä¹ä¼å¨åç¬ä¸ä¸ªåºåä¸æ¶éåºçç»ä»¶ãæ们åªéç®åå°âimportâï¼å¯¼å ¥ï¼ä¸ä¸ªå ï¼å©ä¸çå·¥ä½ä¼ç±ç¼è¯å¨èªå¨å®æã
() 被å®ä¹æç±»æåç对象å¥æä¼èªå¨åå§åænullã对åºæ¬ç±»æ°æ®æåçåå§åå¨Javaéå¾å°äºå¯é çä¿éãè¥ä¸æç¡®å°è¿è¡åå§åï¼å®ä»¬å°±ä¼å¾å°ä¸ä¸ªé»è®¤å¼ï¼é¶æçä»·çå¼ï¼ãå¯å¯¹å®ä»¬è¿è¡æç¡®çåå§åï¼æ¾å¼åå§åï¼ï¼è¦ä¹å¨ç±»å å®ä¹å®ä»¬ï¼è¦ä¹å¨æ建å¨ä¸å®ä¹ãéç¨çè¯æ³æ¯C++çè¯æ³æ´å®¹æç解ï¼èä¸å¯¹äºstaticåéstaticæåæ¥è¯´é½æ¯åºå®ä¸åçãæ们ä¸å¿ ä»å¤é¨å®ä¹staticæåçåå¨æ¹å¼ï¼è¿åC++æ¯ä¸åçã
() å¨Javaéï¼æ²¡æ象CåC++é£æ ·çæéãç¨newå建ä¸ä¸ªå¯¹è±¡çæ¶åï¼ä¼è·å¾ä¸ä¸ªå¼ç¨ï¼æ¬ä¹¦ä¸ç´å°å ¶ç§°ä½âå¥æâï¼ãä¾å¦ï¼
String s = new String("howdy");
ç¶èï¼C++å¼ç¨å¨å建æ¶å¿ é¡»è¿è¡åå§åï¼èä¸ä¸å¯éå®ä¹å°ä¸ä¸ªä¸åçä½ç½®ãä½Javaå¼ç¨å¹¶ä¸ä¸å®å±éäºå建æ¶çä½ç½®ãå®ä»¬å¯æ ¹æ®æ åµä»»æå®ä¹ï¼è¿ä¾¿æ¶é¤äºå¯¹æéçé¨åéæ±ãå¨CåC++é大ééç¨æéçå¦ä¸ä¸ªåå æ¯ä¸ºäºè½æåä»»æä¸ä¸ªå åä½ç½®ï¼è¿åæ¶ä¼ä½¿å®ä»¬åå¾ä¸å®å ¨ï¼ä¹æ¯Javaä¸æä¾è¿ä¸æ¯æçåå ï¼ãæéé常被çä½å¨åºæ¬åéæ°ç»ä¸åå¤ç§»å¨çä¸ç§æææ段ãJavaå 许æ们以æ´å®å ¨çå½¢å¼è¾¾å°ç¸åçç®æ ã解å³æéé®é¢çç»ææ¹æ³æ¯âåºææ¹æ³âï¼å·²å¨éå½A讨论ï¼ãå°æéä¼ éç»æ¹æ³æ¶ï¼é常ä¸ä¼å¸¦æ¥å¤ªå¤§çé®é¢ï¼å 为æ¤æ¶æ²¡æå ¨å±å½æ°ï¼åªæç±»ãèä¸æ们å¯ä¼ é对对象çå¼ç¨ãJavaè¯è¨æå¼å§å£°ç§°èªå·±âå®å ¨ä¸éç¨æéï¼âä½éç许å¤ç¨åºåé½è´¨é®æ²¡ææéå¦ä½å·¥ä½ï¼äºæ¯åæ¥å声æâéç¨åå°éå¶çæéâã大家å¯èªè¡å¤æå®æ¯å¦âçâçæ¯ä¸ä¸ªæéãä½ä¸ç®¡å¨ä½ç§æ åµä¸ï¼é½ä¸åå¨æéâç®æ¯âã
() Javaæä¾äºä¸C++类似çâæ建å¨âï¼Constructorï¼ãå¦æä¸èªå·±å®ä¹ä¸ä¸ªï¼å°±ä¼è·å¾ä¸ä¸ªé»è®¤æ建å¨ãèå¦æå®ä¹äºä¸ä¸ªéé»è®¤çæ建å¨ï¼å°±ä¸ä¼ä¸ºæ们èªå¨å®ä¹é»è®¤æ建å¨ãè¿åC++æ¯ä¸æ ·çã注æ没æå¤å¶æ建å¨ï¼å 为ææèªåéé½æ¯æå¼ç¨ä¼ éçã
() Javaä¸æ²¡æâç ´åå¨âï¼Destructorï¼ãåéä¸åå¨âä½ç¨åâçé®é¢ãä¸ä¸ªå¯¹è±¡çâåå¨æ¶é´âæ¯ç±å¯¹è±¡çåå¨æ¶é´å³å®çï¼å¹¶éç±åå¾æ¶éå¨å³å®ãæ个finalize()æ¹æ³æ¯æ¯ä¸ä¸ªç±»çæåï¼å®å¨æç§ç¨åº¦ä¸ç±»ä¼¼äºC++çâç ´åå¨âãä½finalize()æ¯ç±åå¾æ¶éå¨è°ç¨çï¼èä¸åªè´è´£éæ¾âèµæºâï¼å¦æå¼çæ件ãå¥æ¥åã端å£ãURLççï¼ãå¦éå¨ä¸ä¸ªç¹å®çå°ç¹åææ ·äºæ ï¼å¿ é¡»å建ä¸ä¸ªç¹æ®çæ¹æ³ï¼å¹¶è°ç¨å®ï¼ä¸è½ä¾èµfinalize()ãèå¨å¦ä¸æ¹é¢ï¼C++ä¸çææ对象é½ä¼ï¼æè 说âåºè¯¥âï¼ç ´åï¼ä½å¹¶éJavaä¸çææ对象é½ä¼è¢«å½ä½âåå¾âæ¶éæãç±äºJavaä¸æ¯æç ´åå¨çæ¦å¿µï¼æ以å¨å¿ è¦çæ¶åï¼å¿ 须谨æ å°å建ä¸ä¸ªæ¸ é¤æ¹æ³ãèä¸é对类å çåºç¡ç±»ä»¥åæå对象ï¼éè¦æç¡®è°ç¨æææ¸ é¤æ¹æ³ã
() Javaå ·ææ¹æ³âè¿è½½âæºå¶ï¼å®çå·¥ä½åçä¸C++å½æ°çè¿è½½å ä¹æ¯å®å ¨ç¸åçã
() Javaä¸æ¯æé»è®¤èªåéã
() Javaä¸æ²¡ægotoãå®éåçæ æ¡ä»¶è·³è½¬æºå¶æ¯âbreak æ ç¾âæè âcontinue æ åâï¼ç¨äºè·³åºå½åçå¤éåµå¥å¾ªç¯ã
() Javaéç¨äºä¸ç§åæ ¹å¼çå级ç»æï¼å æ¤ææ对象é½æ¯ä»æ ¹ç±»Objectç»ä¸ç»§æ¿çãèå¨C++ä¸ï¼æ们å¯å¨ä»»ä½å°æ¹å¯å¨ä¸ä¸ªæ°ç继æ¿æ ï¼æ以æåå¾å¾çå°å å«äºå¤§éæ çâä¸ç森æâãå¨Javaä¸ï¼æ们æ 论å¦ä½é½åªæä¸ä¸ªå级ç»æã尽管è¿è¡¨é¢ä¸çä¼¼ä¹é æäºéå¶ï¼ä½ç±äºæ们ç¥éæ¯ä¸ªå¯¹è±¡è¯å®è³å°æä¸ä¸ªObjectæ¥å£ï¼æ以å¾å¾è½è·å¾æ´å¼ºå¤§çè½åãC++ç®åä¼¼ä¹æ¯å¯ä¸æ²¡æ强å¶åæ ¹ç»æçå¯ä¸ä¸ç§OOè¯è¨ã
() Java没æ模æ¿æè åæ°åç±»åçå ¶ä»å½¢å¼ãå®æä¾äºä¸ç³»åéåï¼Vectorï¼åéï¼ï¼Stackï¼å æ ï¼ä»¥åHashtableï¼æ£å表ï¼ï¼ç¨äºå®¹çº³Objectå¼ç¨ãå©ç¨è¿äºéåï¼æ们çä¸ç³»åè¦æ±å¯å¾å°æ»¡è¶³ãä½è¿äºéå并éæ¯ä¸ºå®ç°è±¡C++âæ å模æ¿åºâï¼STLï¼é£æ ·çå¿«éè°ç¨è设计çãJava 1.2ä¸çæ°éåæ¾å¾æ´å å®æ´ï¼ä½ä»ä¸å ·å¤æ£å®æ¨¡æ¿é£æ ·çé«æç使ç¨æ段ã
() âåå¾æ¶éâæå³çå¨Javaä¸åºç°å åæ¼æ´çæ åµä¼å°å¾å¤ï¼ä½ä¹å¹¶éå®å ¨ä¸å¯è½ï¼è¥è°ç¨ä¸ä¸ªç¨äºåé åå¨ç©ºé´çåºææ¹æ³ï¼åå¾æ¶éå¨å°±ä¸è½å¯¹å ¶è¿è¡è·è¸ªçè§ï¼ãç¶èï¼å åæ¼æ´åèµæºæ¼æ´å¤æ¯ç±äºç¼åä¸å½çfinalize()é æçï¼ææ¯ç±äºå¨å·²åé çä¸ä¸ªåå°¾éæ¾ä¸ç§èµæºé æçï¼âç ´åå¨âå¨æ¤æ¶æ¾å¾ç¹å«æ¹ä¾¿ï¼ãåå¾æ¶éå¨æ¯å¨C++åºç¡ä¸çä¸ç§æ大è¿æ¥ï¼ä½¿è®¸å¤ç¼ç¨é®é¢æ¶å¼¥äºæ å½¢ä¹ä¸ãä½å¯¹å°æ°å 个åå¾æ¶éå¨åæä¸é®çé®é¢ï¼å®å´æ¯ä¸å¤§éåçãä½åå¾æ¶éå¨ç大éä¼ç¹ä¹ä½¿è¿ä¸å¤ç¼ºç¹æ¾å¾å¾®ä¸è¶³éã
() Javaå 建äºå¯¹å¤çº¿ç¨çæ¯æãå©ç¨ä¸ä¸ªç¹æ®çThreadç±»ï¼æ们å¯éè¿ç»§æ¿å建ä¸ä¸ªæ°çº¿ç¨ï¼æ¾å¼äºrun()æ¹æ³ï¼ãè¥å°synchronizedï¼åæ¥ï¼å ³é®åä½ä¸ºæ¹æ³çä¸ä¸ªç±»åéå¶ç¬¦ä½¿ç¨ï¼ç¸äºææ¥ç°è±¡ä¼å¨å¯¹è±¡è¿ä¸çº§åçãå¨ä»»ä½ç»å®çæ¶é´ï¼åªæä¸ä¸ªçº¿ç¨è½ä½¿ç¨ä¸ä¸ªå¯¹è±¡çsynchronizedæ¹æ³ãå¨å¦ä¸æ¹é¢ï¼ä¸ä¸ªsynchronizedæ¹æ³è¿å ¥ä»¥åï¼å®é¦å ä¼âéå®â对象ï¼é²æ¢å ¶ä»ä»»ä½synchronizedæ¹æ³å使ç¨é£ä¸ªå¯¹è±¡ãåªæéåºäºè¿ä¸ªæ¹æ³ï¼æä¼å°å¯¹è±¡â解éâãå¨çº¿ç¨ä¹é´ï¼æ们ä»ç¶è¦è´è´£å®ç°æ´å¤æçåæ¥æºå¶ï¼æ¹æ³æ¯å建èªå·±çâçè§å¨âç±»ãéå½çsynchronizedæ¹æ³å¯ä»¥æ£å¸¸è¿ä½ãè¥çº¿ç¨çä¼å ç级ç¸åï¼åæ¶é´çâåçâä¸è½å¾å°ä¿è¯ã
() æ们ä¸æ¯è±¡C++é£æ ·æ§å¶å£°æ代ç åï¼èæ¯å°è®¿é®éå®ç¬¦ï¼publicï¼privateåprotectedï¼ç½®å ¥æ¯ä¸ªç±»æåçå®ä¹éãè¥æªè§å®ä¸ä¸ªâæ¾å¼âï¼æç¡®çï¼éå®ç¬¦ï¼å°±ä¼é»è®¤ä¸ºâå好çâï¼friendlyï¼ãè¿æå³çåä¸ä¸ªå éçå ¶ä»å ç´ ä¹å¯ä»¥è®¿é®å®ï¼ç¸å½äºå®ä»¬é½æ为C++çâfriendsâââæåï¼ï¼ä½ä¸å¯ç±å å¤çä»»ä½å ç´ è®¿é®ãç±»ââ以åç±»å çæ¯ä¸ªæ¹æ³ââé½æä¸ä¸ªè®¿é®éå®ç¬¦ï¼å³å®å®æ¯å¦è½å¨æ件çå¤é¨âå¯è§âãprivateå ³é®åé常å¾å°å¨Javaä¸ä½¿ç¨ï¼å 为ä¸ææ¥åä¸ä¸ªå å å ¶ä»ç±»ç访é®ç¸æ¯ï¼âå好çâ访é®é常æ´å æç¨ãç¶èï¼å¨å¤çº¿ç¨çç¯å¢ä¸ï¼å¯¹privateçæ°å½è¿ç¨æ¯é常éè¦çãJavaçprotectedå ³é®åæå³çâå¯ç±ç»§æ¿è 访é®ï¼äº¦å¯ç±å å å ¶ä»å ç´ è®¿é®âã注æJava没æä¸C++çprotectedå ³é®åçä»·çå ç´ ï¼åè æå³çâåªè½ç±ç»§æ¿è 访é®âï¼ä»¥åå¯ç¨âprivate protectedâå®ç°è¿ä¸ªç®çï¼ä½è¿ä¸å¯¹å ³é®åçç»å已被åæ¶äºï¼ã
() åµå¥çç±»ãå¨C++ä¸ï¼å¯¹ç±»è¿è¡åµå¥æå©äºéèå称ï¼å¹¶ä¾¿äºä»£ç çç»ç»ï¼ä½C++çâå½å空é´â已使å称çéèæ¾å¾å¤ä½ï¼ãJavaçâå°è£ âæâæå âæ¦å¿µçä»·äºC++çå½å空é´ï¼æ以ä¸åæ¯ä¸ä¸ªé®é¢ãJava 1.1å¼å ¥äºâå é¨ç±»âçæ¦å¿µï¼å®ç§å¯ä¿ææåå¤é¨ç±»çä¸ä¸ªå¥æââå建å é¨ç±»å¯¹è±¡çæ¶åéè¦ç¨å°ãè¿æå³çå é¨ç±»å¯¹è±¡ä¹è®¸è½è®¿é®å¤é¨ç±»å¯¹è±¡çæåï¼æ¯éä»»ä½æ¡ä»¶ââ就好象é£äºæåç´æ¥é¶å±äºå é¨ç±»å¯¹è±¡ä¸æ ·ãè¿æ ·ä¾¿ä¸ºåè°é®é¢æä¾äºä¸ä¸ªæ´ä¼ç§çæ¹æ¡ââC++æ¯ç¨æåæåçæé解å³çã
() ç±äºåå¨åé¢ä»ç»çé£ç§å é¨ç±»ï¼æ以Javaé没ææåæåçæéã
() Javaä¸åå¨âåµå ¥âï¼inlineï¼æ¹æ³ãJavaç¼è¯å¨ä¹è®¸ä¼èªè¡å³å®åµå ¥ä¸ä¸ªæ¹æ³ï¼ä½æ们对æ¤æ²¡ææ´å¤çæ§å¶æåãå¨Javaä¸ï¼å¯ä¸ºä¸ä¸ªæ¹æ³ä½¿ç¨finalå ³é®åï¼ä»èâ建议âè¿è¡åµå ¥æä½ãç¶èï¼åµå ¥å½æ°å¯¹äºC++çç¼è¯å¨æ¥è¯´ä¹åªæ¯ä¸ç§å»ºè®®ã
() Javaä¸ç继æ¿å ·æä¸C++ç¸åçææï¼ä½éç¨çè¯æ³ä¸åãJavaç¨extendså ³é®åæ å¿ä»ä¸ä¸ªåºç¡ç±»ç继æ¿ï¼å¹¶ç¨superå ³é®åæåºåå¤å¨åºç¡ç±»ä¸è°ç¨çæ¹æ³ï¼å®ä¸æ们å½åæå¨çæ¹æ³å ·æç¸åçååï¼ç¶èï¼Javaä¸çsuperå ³é®ååªå 许æ们访é®ç¶ç±»çæ¹æ³ââ亦å³å级ç»æçä¸ä¸çº§ï¼ãéè¿å¨C++ä¸è®¾å®åºç¡ç±»çä½ç¨åï¼æ们å¯è®¿é®ä½äºå级ç»æè¾æ·±å¤çæ¹æ³ã亦å¯ç¨superå ³é®åè°ç¨åºç¡ç±»æ建å¨ãæ£å¦æ©å æåºçé£æ ·ï¼ææç±»æç»é½ä¼ä»Objectéèªå¨ç»§æ¿ãåC++ä¸åï¼ä¸åå¨æç¡®çæ建å¨åå§åå表ãä½ç¼è¯å¨ä¼å¼ºè¿«æ们å¨æ建å¨ä¸»ä½çå¼å¤´è¿è¡å ¨é¨çåºç¡ç±»åå§åï¼èä¸ä¸å 许æ们å¨ä¸»ä½çåé¢é¨åè¿è¡è¿ä¸å·¥ä½ãéè¿ç»åè¿ç¨èªå¨åå§å以åæ¥èªæªåå§å对象å¥æçå¼å¸¸ï¼æåçåå§åå¯å¾å°ææçä¿è¯ã
public class Foo extends Bar {
public Foo(String msg) {
super(msg); // Calls base constructor
}
public baz(int i) { // Override
super.baz(i); // Calls base method
}
}
() Javaä¸ç继æ¿ä¸ä¼æ¹ååºç¡ç±»æåçä¿æ¤çº§å«ãæ们ä¸è½å¨Javaä¸æå®publicï¼privateæè protected继æ¿ï¼è¿ä¸ç¹ä¸C++æ¯ç¸åçãæ¤å¤ï¼å¨è¡çç±»ä¸çä¼å æ¹æ³ä¸è½åå°å¯¹åºç¡ç±»æ¹æ³ç访é®ãä¾å¦ï¼å设ä¸ä¸ªæåå¨åºç¡ç±»ä¸å±äºpublicï¼èæ们ç¨å¦ä¸ä¸ªæ¹æ³ä»£æ¿äºå®ï¼é£ä¹ç¨äºæ¿æ¢çæ¹æ³ä¹å¿ é¡»å±äºpublicï¼ç¼è¯å¨ä¼èªå¨æ£æ¥ï¼ã
() Javaæä¾äºä¸ä¸ªinterfaceå ³é®åï¼å®çä½ç¨æ¯å建æ½è±¡åºç¡ç±»çä¸ä¸ªçä»·ç©ãå¨å ¶ä¸å¡«å æ½è±¡æ¹æ³ï¼ä¸æ²¡ææ°æ®æåãè¿æ ·ä¸æ¥ï¼å¯¹äºä» ä» è®¾è®¡æä¸ä¸ªæ¥å£çä¸è¥¿ï¼ä»¥å对äºç¨extendså ³é®åå¨ç°æåè½åºç¡ä¸çæ©å±ï¼ä¸¤è ä¹é´ä¾¿äº§çäºä¸ä¸ªææ¾çå·®å¼ãä¸å¼å¾ç¨abstractå ³é®å产çä¸ç§ç±»ä¼¼çææï¼å 为æ们ä¸è½å建å±äºé£ä¸ªç±»çä¸ä¸ªå¯¹è±¡ãä¸ä¸ªabstractï¼æ½è±¡ï¼ç±»å¯å å«æ½è±¡æ¹æ³ï¼å°½ç®¡å¹¶ä¸è¦æ±å¨å®éé¢å å«ä»ä¹ä¸è¥¿ï¼ï¼ä½å®ä¹è½å å«ç¨äºå ·ä½å®ç°ç代ç ãå æ¤ï¼å®è¢«éå¶æä¸ä¸ªåä¸ç继æ¿ãéè¿ä¸æ¥å£èå使ç¨ï¼è¿ä¸æ¹æ¡é¿å äºå¯¹ç±»ä¼¼äºC++èæåºç¡ç±»é£æ ·çä¸äºæºå¶çéè¦ã
为å建å¯è¿è¡âä¾ç¤ºâï¼å³å建ä¸ä¸ªå®ä¾ï¼çä¸ä¸ªinterfaceï¼æ¥å£ï¼ççæ¬ï¼é使ç¨implementså ³é®åãå®çè¯æ³ç±»ä¼¼äºç»§æ¿çè¯æ³ï¼å¦ä¸æ示ï¼
public interface Face {
public void smile();
}
public class Baz extends Bar implements Face {
public void smile( ) {
System.out.println("a warm smile");
}
}
() Javaä¸æ²¡ævirtualå ³é®åï¼å 为ææéstaticæ¹æ³é½è¯å®ä¼ç¨å°å¨æç»å®ãå¨Javaä¸ï¼ç¨åºåä¸å¿ èªè¡å³å®æ¯å¦ä½¿ç¨å¨æç»å®ãC++ä¹æ以éç¨äºvirtualï¼æ¯ç±äºæ们对æ§è½è¿è¡è°æ´çæ¶åï¼å¯éè¿å°å ¶çç¥ï¼ä»èè·å¾æ§è¡æççå°éæåï¼æè æ¢å¥è¯è¯´ï¼âå¦æä¸ç¨ï¼å°±æ²¡å¿ è¦ä¸ºå®ä»åºä»£ä»·âï¼ãvirtualç»å¸¸ä¼é æä¸å®ç¨åº¦çæ··æ·ï¼èä¸è·å¾ä»¤äººä¸å¿«çç»æãfinalå ³é®å为æ§è½çè°æ´è§å®äºä¸äºèå´ââå®åç¼è¯å¨æåºè¿ç§æ¹æ³ä¸è½è¢«å代ï¼æ以å®çèå´å¯è½è¢«éæ约æï¼èä¸æ为åµå ¥ç¶æï¼æ以使ç¨C++évirtualè°ç¨ççä»·æ¹å¼ï¼ãè¿äºä¼åå·¥ä½æ¯ç±ç¼è¯å¨å®æçã
() Javaä¸æä¾å¤é继æ¿æºå¶ï¼MIï¼ï¼è³å°ä¸è±¡C++é£æ ·åãä¸protected类似ï¼MI表é¢ä¸æ¯ä¸ä¸ªå¾ä¸éç主æï¼ä½åªæçæ£é¢å¯¹ä¸ä¸ªç¹å®ç设计é®é¢æ¶ï¼æç¥éèªå·±éè¦å®ãç±äºJava使ç¨çæ¯âåæ ¹âå级ç»æï¼æ以åªæå¨æå°çåºåæéè¦ç¨å°MIãinterfaceå ³é®åä¼å¸®å©æ们èªå¨å®æå¤ä¸ªæ¥å£çå并工ä½ã
() è¿è¡æçç±»åæ è¯åè½ä¸C++æ为ç¸ä¼¼ãä¾å¦ï¼ä¸ºè·å¾ä¸å¥æXæå ³çä¿¡æ¯ï¼å¯ä½¿ç¨ä¸è¿°ä»£ç ï¼
X.getClass().getName();
为è¿è¡ä¸ä¸ªâç±»åå®å ¨âç紧缩é åï¼å¯ä½¿ç¨ï¼
derived d = (derived)base;
è¿ä¸æ§å¼é£æ ¼çCé åæ¯ä¸æ ·çãç¼è¯å¨ä¼èªå¨è°ç¨å¨æé åæºå¶ï¼ä¸è¦æ±ä½¿ç¨é¢å¤çè¯æ³ã尽管å®å¹¶ä¸è±¡C++çânew castsâé£æ ·å ·ææäºå®ä½é åçä¼ç¹ï¼ä½Javaä¼æ£æ¥ä½¿ç¨æ åµï¼å¹¶ä¸¢å¼é£äºâå¼å¸¸âï¼æ以å®ä¸ä¼è±¡C++é£æ ·å 许åé åçåå¨ã
() Javaéåäºä¸åçå¼å¸¸æ§å¶æºå¶ï¼å 为æ¤æ¶å·²ç»ä¸åå¨æ建å¨ãå¯æ·»å ä¸ä¸ªfinallyä»å¥ï¼å¼ºå¶æ§è¡ç¹å®çè¯å¥ï¼ä»¥ä¾¿è¿è¡å¿ è¦çæ¸ é¤å·¥ä½ãJavaä¸çææå¼å¸¸é½æ¯ä»åºç¡ç±»Throwableé继æ¿èæ¥çï¼æ以å¯ç¡®ä¿æ们å¾å°çæ¯ä¸ä¸ªéç¨æ¥å£ã
public void f(Obj b) throws IOException {
myresource mr = b.createResource();
try {
mr.UseResource();
} catch (MyException e) {
// handle my exception
} catch (Throwable e) {
// handle all other exceptions
} finally {
mr.dispose(); // special cleanup
}
}
() Javaçå¼å¸¸è§èæ¯C++çåºè²å¾å¤ã丢å¼ä¸ä¸ªé误çå¼å¸¸åï¼ä¸æ¯è±¡C++é£æ ·å¨è¿è¡æé´è°ç¨ä¸ä¸ªå½æ°ï¼Javaå¼å¸¸è§èæ¯å¨ç¼è¯æé´æ£æ¥å¹¶æ§è¡çãé¤æ¤ä»¥å¤ï¼è¢«å代çæ¹æ³å¿ é¡»éµå®é£ä¸æ¹æ³çåºç¡ç±»çæ¬çå¼å¸¸è§èï¼å®ä»¬å¯ä¸¢å¼æå®çå¼å¸¸æè ä»é£äºå¼å¸¸è¡çåºæ¥çå ¶ä»å¼å¸¸ãè¿æ ·ä¸æ¥ï¼æ们æç»å¾å°çæ¯æ´ä¸ºâå¥å£®âçå¼å¸¸æ§å¶ä»£ç ã
() Javaå ·ææ¹æ³è¿è½½çè½åï¼ä½ä¸å 许è¿ç®ç¬¦è¿è½½ãStringç±»ä¸è½ç¨+å+=è¿ç®ç¬¦è¿æ¥ä¸åçå串ï¼èä¸String表达å¼ä½¿ç¨èªå¨çç±»å转æ¢ï¼ä½é£æ¯ä¸ç§ç¹æ®çå 建æ åµã
() éè¿äºå ç约å®ï¼C++ä¸ç»å¸¸åºç°çconsté®é¢å¨Javaéå·²å¾å°äºæ§å¶ãæ们åªè½ä¼ éæå对象çå¥æï¼æ¬å°å¯æ¬æ°¸è¿ä¸ä¼ä¸ºæ们èªå¨çæãè¥å¸æ使ç¨ç±»ä¼¼C++æå¼ä¼ éé£æ ·çææ¯ï¼å¯è°ç¨clone()ï¼çæèªåéçä¸ä¸ªæ¬å°å¯æ¬ï¼å°½ç®¡clone()ç设计ä¾ç¶å°æ¾ç²ç³ââåè§ç¬¬ç« ï¼ãæ ¹æ¬ä¸åå¨è¢«èªå¨è°ç¨çå¯æ¬æ建å¨ã为å建ä¸ä¸ªç¼è¯æç常æ°å¼ï¼å¯è±¡ä¸é¢è¿æ ·ç¼ç ï¼
static final int SIZE =
static final int BSIZE = 8 * SIZE
() ç±äºå®å ¨æ¹é¢çåå ï¼âåºç¨ç¨åºâçç¼ç¨ä¸âç¨åºçâçç¼ç¨ä¹é´åå¨çæ¾èçå·®å¼ãä¸ä¸ªæææ¾çé®é¢æ¯ç¨åºçä¸å 许æ们è¿è¡ç£ççåæä½ï¼å 为è¿æ ·åä¼é æä»è¿ç¨ç«ç¹ä¸è½½çãä¸ææ¥åçç¨åºå¯è½è¡ä¹±æ¹åæ们çç£çãéçJava 1.1对æ°åç¾åææ¯çå¼ç¨ï¼è¿ä¸æ åµå·²æææ¹è§ãæ ¹æ®æ°åç¾åï¼æ们å¯ç¡®åç¥éä¸ä¸ªç¨åºççå ¨é¨ä½è ï¼å¹¶éªè¯ä»ä»¬æ¯å¦å·²è·å¾ææãJava 1.2ä¼è¿ä¸æ¥å¢å¼ºç¨åºççè½åã
() ç±äºJavaå¨æäºåºåå¯è½æ¾å¾éå¶å¤ªå¤ï¼æ以ææ¶ä¸æ¿ç¨å®æ§è¡è±¡ç´æ¥è®¿é®ç¡¬ä»¶è¿æ ·çéè¦ä»»å¡ãJava解å³è¿ä¸ªé®é¢çæ¹æ¡æ¯âåºææ¹æ³âï¼å 许æ们è°ç¨ç±å ¶ä»è¯è¨åæçå½æ°ï¼ç®ååªæ¯æCåC++ï¼ãè¿æ ·ä¸æ¥ï¼æ们就è¯å®è½å¤è§£å³ä¸å¹³å°æå ³çé®é¢ï¼éç¨ä¸ç§ä¸å¯ç§»æ¤çå½¢å¼ï¼ä½é£äºä»£ç éåä¼è¢«é离起æ¥ï¼ãç¨åºçä¸è½è°ç¨åºææ¹æ³ï¼åªæåºç¨ç¨åºæå¯ä»¥ã
() Javaæä¾å¯¹æ³¨éææ¡£çå 建æ¯æï¼æ以æºç æ件ä¹å¯ä»¥å å«å®ä»¬èªå·±çææ¡£ãéè¿ä¸ä¸ªåç¬çç¨åºï¼è¿äºæ档信æ¯å¯ä»¥æååºæ¥ï¼å¹¶éæ°æ ¼å¼åæHTMLãè¿æ çæ¯æ档管çååºç¨çæ大è¿æ¥ã
() Javaå å«äºä¸äºæ ååºï¼ç¨äºå®æç¹å®çä»»å¡ãC++åä¾é ä¸äºéæ åçãç±å ¶ä»ååæä¾çåºãè¿äºä»»å¡å æ¬ï¼æä¸ä¹ å°±è¦å æ¬ï¼ï¼
â è¿ç½
â æ°æ®åºè¿æ¥ï¼éè¿JDBCï¼
â å¤çº¿ç¨
â åå¸å¼å¯¹è±¡ï¼éè¿RMIåCORBAï¼
â å缩
â åè´¸
ç±äºè¿äºåºç®åæç¨ï¼èä¸é常æ åï¼æ以è½æ大å å¿«åºç¨ç¨åºçå¼åé度ã
() Java 1.1å å«äºJava Beansæ åï¼åè å¯å建å¨å¯è§ç¼ç¨ç¯å¢ä¸ä½¿ç¨çç»ä»¶ãç±äºéµå®åæ ·çæ åï¼æ以å¯è§ç»ä»¶è½å¤å¨ææååçå¼åç¯å¢ä¸ä½¿ç¨ãç±äºæ们并ä¸ä¾èµä¸å®¶ååçæ¹æ¡è¿è¡å¯è§ç»ä»¶ç设计ï¼æ以ç»ä»¶çéæ©ä½å°ä¼å 大ï¼å¹¶å¯æé«ç»ä»¶çæè½ãé¤æ¤ä¹å¤ï¼Java Beansç设计é常ç®åï¼ä¾¿äºç¨åºåç解ï¼èé£äºç±ä¸åçååå¼åçä¸ç¨ç»ä»¶æ¡æ¶åè¦æ±è¿è¡æ´æ·±å ¥çå¦ä¹ ã
() è¥è®¿é®Javaå¥æ失败ï¼å°±ä¼ä¸¢å¼ä¸æ¬¡å¼å¸¸ãè¿ç§ä¸¢å¼æµè¯å¹¶ä¸ä¸å®è¦æ£å¥½å¨ä½¿ç¨ä¸ä¸ªå¥æä¹åè¿è¡ãæ ¹æ®Javaç设计è§èï¼åªæ¯è¯´å¼å¸¸å¿ 须以æç§å½¢å¼ä¸¢å¼ã许å¤C++è¿è¡æç³»ç»ä¹è½ä¸¢å¼é£äºç±äºæéé误é æçå¼å¸¸ã
() Javaé常æ¾å¾æ´ä¸ºå¥å£®ï¼ä¸ºæ¤éåçæ段å¦ä¸ï¼
â 对象å¥æåå§åænullï¼ä¸ä¸ªå ³é®åï¼
â å¥æè¯å®ä¼å¾å°æ£æ¥ï¼å¹¶å¨åºéæ¶ä¸¢å¼å¼å¸¸
â æææ°ç»è®¿é®é½ä¼å¾å°æ£æ¥ï¼åæ¶åç°è¾¹çè¿ä¾æ åµ
â èªå¨åå¾æ¶éï¼é²æ¢åºç°å åæ¼æ´
â æç¡®ãâå»çå¼âçå¼å¸¸æ§å¶æºå¶
â 为å¤çº¿ç¨æä¾äºç®åçè¯è¨æ¯æ
â 对ç½ç»ç¨åºçè¿è¡åèç æ ¡éª