Java和C++基本类型与语法的区别
来源:互联网 发布:android webview优化 编辑:程序博客网 时间:2024/06/16 18:23
Java概述
Java是Sun Stanford Universiy Network 斯坦福大学网络公司1995推出。
Java语言的三种架构:
J2EE企业版 Java 2 Platform Enterprise Edition 用于WEB应用开发
J2SE标准版 Java 2 Plaftorm Standard Edition 用于桌面应用开发
J2ME小型版 Java 2 Platform Micro Edition 用于小型嵌入式设备等开发
JRE Java Runtime Environm Ent Java运行环境
包括Java虚拟机JVM Java Virtual Machine和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
JDK Java Development Kit Java开发工具
JDK是提供给Java开发人员使用的,其中包含了Java的开发工具,也包括了JRE。所以安装了JDK就不用再安装JRE,其中的开发工具如,编译工具:Java.exe 打包工具:Jar.exe。
数据类型
八种基本类型 boolean, byte, char, short, int, long, float, double。 类型可以在类成员位置上指定默认值,如果不指定默认值为0,而非C++中的随机值,其值全部以二进制为0的形式被初始化,引用变量为null。
java中舍去了无符号修饰符unsigned所以byte的取值范围只能在127到-128之间(byte代表IP地址段还要做负数转换晕倒)所有类型最大取值范围瞬间减少一半啊。
bool被加了三个字母boolean有点不顺手。
char2个字节,这点挺爽的不用再折腾恶心的字符集了,告别_T _W。
基本类型之间转换内存排列顺序一样的可以从bit少的类型直接转为bit多的类型。如byte char short int 转向long,float转向double。
java中将boolean内置为一个特殊的字符串,并非C++中非0为真,0为假的位设定,所以boolean不可以与任何类型之间做转换,这点挺不好的。
不同类型之间运算会自动提升为其中字节占位最高的类型,就是short num = 1;num = num + 1;都不行因为 num + 1 结果会自动提升为int 再赋值给short时jvm不给通过。须要num = (short)(num + 1)有点烦。好在++ -- += -= 之类的可以用。
所有记录对象的均为引用类型,三种引用类型分别是,类,接口和数组。java中的引用非C++引用,引用不再是常量指针,指向是可以被修改的。java中无法进行传址操作,引用被传递进函数后为其复本。
class本身,以及java中的interface类型,还有void在java中也被看做是一个类型。一个数组也是以对象的形势出现的。
基本语法
有必要提一下的就是break与continue可以在java中直接跳到外层循环,方法为外循环前面制定标记符,如:
mark:for (int i = 0; i < args.length; i++) {for (int j = 0; j < args.length; j++) {if (condition) {break mark;//condition条件一但满足直接跳出外层循环}}}
switchr的条件值默认为int所以能够自动提供为int的类型都可做为判断条件,如long double不可直接提升为int所以不能做为判断条件。
final代替了const用法上也有差异,可以写在class前类不被继承,写在函数返回类型前函数不可被子类覆盖,写在引用类型前,该引用指向不可变,但指向的对象内容可以变,也就是说不再存在C++中的指向变量的常指针。C++中的修饰函数体后确保函数内不可改变成员变量的特性被剔除。
除了保留C++中的this外多了一个super父类关键词,用法基本同C++但其为引用,而不是指针。
java中的异常格式。try异常产生区,catch异常处理区,finally异常必定执行区。throw异常抛出作用在函数体内。throws异常抛出作用在函数名后,将函数体内产生的异常抛出到调用处。
package必须为程序第一行,定义文件所在包。import用于导入一个包。java中的包应该是为了解决namespace命名空间问题的。将类的划分更精细包与包之间的访问取决于类的public或是默认修饰符。
高级for循环,Java中对数组或集合定义了一种循环的简便写法,定义一个变量每循环一次接收数组或集合中一个元素的拷贝到变量中,并将位置下移,直到数组或集合为空。这种循环在内部使用的是Iterable迭代器专用接口,而Iterable内部使用的其实还是Iterator。注意条件中的是:而不是;。虽然简化了写法,但每次都要做无谓的临时变量拷贝,得不偿失,只能用在一些特定的时刻下才值得。
Integer[] arrs = {1,2,3,4,5};for(Integer arr : arrs){//这里对temp的操作不影响数组本身,除非arr是个引用类型//那么通过该引用的复本可以改变引用指向对象的成员}
可变参数,Java在1.5版本更新后加入了函数可变参数设置,其原理只是将可变参数自动封装成一个数组类型,所以传递参数时也可以直接传递一个数组。定义如下:
void func(int ... arr){//在这里可以对arr操作如同操作数组一样}
与C++不同的是,Java中函数可变参数可以单独存在,也就是说可以只有一个可变参数,而且可以不为可变参数传递任何东西,视为传递了0个元素的数组。
如果有其它参数,必须在可变参数左边
命名与注释命
名规则同C++,命名规范(开始有点蛋痛...现在已经习惯了哈哈)如下:
包名: 多单词组成时所有字节小写。
类与接口: 多单词组成时所有单词首字母大写。
变量名函数名:多单词组成时第一个单词字母小写后面的单词首字母大写(最蛋痛的,一个变量名num相应的函数名getNum(),一个num一个Num很容易误解为获取的不是num的值而是Num的值)
常量名: 所有字符大写,单词以下划线分隔。
除了C++注释处还有一个 /** 文字*/ 文档注释。主要是可以被javadoc工具提取。另外有注释类,相应的以@开头。可使用/** 文字*/为 类注释,也可为函数注释,然后使用javadoc工具生成html格式的class帮助文档。
要生成帮助文档的类必须是public修饰
//类区域可使用 @author 作者 @version 版本//函数区域可使用@throws 该函数抛出的异常@param 参数名参数作用类型描述等信息@return 返回值类型作用描述等信息
运算符
字符串可以与任意八种基本类型相加,基本类型会自动提升为字符串,这个挺爽。如:
String str = "abc" + 5.8;System.out.println(str);//打印abc5.8
位运算多了一个>>>无符号右移,也就是位移中缺位以0补,而非以原有位补。这个挺好对于位移运算方便很多
因为Java中剔除了运算符重载和指针概念,两个对象间的逻辑比较灵活性很差。Java中使用equals方法用来比较两个对象是否相等,equals方法被定义在Object类中,因此Java中所有类均拥有该方法,覆盖该方法后,即可建立对象独有的比较过程。该方法在Object中的声明原型为 public boolean equals(Object obj) 。我觉得Object内应该再有一个compare方法是最好的,可惜没有,只有一个Comparable外部接口类,想要类具备比较性,需要实现于这个接口!
Java中的引用类型支持 == 与 != 运算符,用C++的说法就是内置重载了的== 与 != 运算符。用指针的说法就是,左右两边是否都指向上同一块内存地址,其实就是比较两个引用的值。因为Java中屏蔽一切指针地址操作,所以无法对地址做基本运算除了== 与 !=其它运算符在引用类型上无效。
instanceof用来比较左值对象是否属于右值类型的实例(类型包括对象的所有基类)
其它须要注意的部分
函数没有默认参数值,有参数的函数必须接受相应参数。
成员数据可以初始化,为对象建立时成员数据默认值。
总结:从基本类型和语法上来看,java更严谨更快捷,但占用内存上就有点郁闷了,至今没发现有内存对齐的方法,以空间换时间吧。
- Java和C++基本类型与语法的区别
- JAVA与C++的基本语法区别
- java final 与引用类型变量和基本类型区别
- Java与C语法上的区别
- Java与C语法上的区别
- Java中基本类型与引用类型的区别
- 引用类型和基本类型的区别与联系
- Java中的基本类型和引用类型变量的区别
- java 基本类型和封装类型的区别
- Java中的基本类型和引用类型变量的区别
- Java 中基本类型 和 引用类型 变量的区别
- Java中的基本类型和引用类型变量的区别
- Java中的基本类型和引用类型变量的区别
- Java中的基本类型和引用类型变量的区别
- JAVA 基本类型与 引用类型区别
- java基本类型与包装类型区别
- JAVA 基本类型与 引用类型区别
- java基本类型与包装类型区别
- 程序员面试题精选100题:41-50解题报告
- IOS语音聊天实现
- oracle查看表、存储过程、触发器、函数等定义
- 【Android LibGDX游戏引擎开发教程】第07期:中文字体的显示和绘制(上)
- Nginx缓存功能:Proxy_cache与fastcgi_cache区别
- Java和C++基本类型与语法的区别
- IOS 电话拨打
- UVC still image capture
- Cocos2d-x--编译第一个Android程序HelloCocos2dx
- cocos2d-x 多线程编程 Posix通用
- cocos2d-x Cygwin编译 recipe for target `obj/local/armeabi/libcocos2d.so' fail解决办法
- Ubuntu下配置VNC
- [设计模式as3版]四.简单工厂
- 在线评分系统