//1.Java中字符串不能多行书写。多行书写用引号隔断,加号相连。
//2.Java的标识符可以用美元符号开头。
//3.Java中没有无符号变量或无符号常量的概念。所有的变量都是有符号的。
//4.Java中变量的字长是固定的。不存在char和wchar之分。
//5.Java中变量未初始化就使用将是编译错误。
//6.Java中不能把0和非0整数当boolean值用。要使一个整型变量在0和1之间交替变化,不能用非运算,可以这样。int x=0;x=(x+1)%2;
//java的类型检查比C++严格。byte b=3;b=b-1;是错误的。非运算符(!)只能对boolean数据操作。
//7.Java中变量不能嵌套定义,即子块变量名不能与父块变量名同名。但类成员函数中的局部变量可以隐藏类成员变量,即二者可以有相同的名字。
//8.Java中没有全局变量和全局函数,相应功能由类中的static成员代替。全局常量加public static final标记。
//9.Java中函数的参数如果是基本数据类型,使用的是传值调用。其他自定义类型是传地址(句柄)调用。
//10.对象的句柄之间赋值,只能让两个句柄指向同一个对象,对象的内存不会被复制。也不存在运算符重载,字符串重载加号是系统实现的特例。没有拷贝构造函数的概念。因此,继承是很单纯和简单的。
//11.Java的左移位运算分带符号左移>>和不带符号左移>>>。byte,short,char的移位运算自动提升为int再移位。
//12.Java没有goto语句,但有goto保留字。
//13.Java数组也是在堆内存中分配的,并且是对象.int[] intArray = new int[100]; 中括号可以写在数组名的前面。 这样是错误:int a[5];
//奇怪的是,这种堆上创建的数组大小也不可改变。
//14.Java中没有真正的多维数组,只有数组的数组,且可能是不规则的矩阵形式。
/*
int xx[][];
xx=new int[3][];
xx[0]=new int[10];
xx[1]=new int[7];
xx[2]=new int[8];
若是规则的矩阵
int yy[][]=new int[2][3];*/
//15.设有class Person{/*...*/};在C++中,Person p1;这就在栈上产生了一个对象,Person *p1=new Person;在堆上产生了一个对象。
//在Java中,只能在堆上产生对象:Person p1=new Person; 代表对象的p1称作句柄,相当于C++中的引用。
//Java中句柄要在栈上占一个指针大小的内存,所以Java中的句柄实际上是变相的指针(所以Java比C++更广泛的使用指针)。
//16.Java中的成员变量会被自动初始化,函数中的局部变量与C++一样不会被初始化。
//17.Java中::操作符用.代替。
//18.离开作用域,句柄失效,但它所代表的对象占用的内存没有没有马上回收,而是在之后一个不确定的时间由一个称为垃圾回收器的程序回收。
//19.不存在运算符重载,所以没办法用'=='比较两个对象的内容。只能在对象中定义equals方法进行比较。用'=='比较两个句柄,相当于比较两个对象
//的指针,不会比较两个对象的内容。
//20.不小心把类的构造函数写了返回值,Java会把它当成普通成员函数,C++会报错。
//21.Java中类成员变量定义时可以附带给一个初始值。class a{private int a=10;},但构造函数中的赋值会覆盖这个值。
//22.Java可以在一个构造方法中用this关键字调用另一个重载的构造方法。
//23.finalize方法,类似C++的析构函数。由垃圾回收器调用,但不一定会总是被调用。System.gc()可以启动垃圾回收器。
//24.Java中有static代码块的概念,只有在类第一次加载时被调用。即在第一次在代码中涉及类名时被调用 。
//25.Java用extends实现继承。Java只支持单继承,但可以同时实现多接口。所有的继承都相当于C++中的public继承。Java子类的函数不会隐藏基类的同名不同参的函数。
//没有virtual关键字,但所有的函数天生具有多态性。访问控制增加default型,具有同一包访问权限。
//26.Java中子类用super调用父类的构造函数。
//27.变量加final限定是常量,方法加final限定子类中不能再覆盖改写,类加final标记不能被继承。函数形参加final,函数体中不能修改该值,相当于C++中加const限定。
//28.Java中的成员函数如果前面加abstract,没有函数体,而用分号结束,就是抽象方法,而在C++中是一个函数申明后面跟=0。
//有抽象方法的类为抽象类必须加abstract限定。
//29.要throw异常的函数括号后要跟throws Exception,throw的异常对象必须是Exception的子类对象,且使用有throw的函数必须try{}catch{}。Java因为封装了很多异常类,处理异常绝对比C++方便易用。
//30.finally代码块不论是否发生异常都会执行。即使try块有return语句且没发生异常。但若有System.exit(0);被执行,finally语句块不会被执行。
//31.Java用implements关键字实现接口 。用interface定义接口。所谓接口,就是类中的所有方法都是抽象的。接口中只能定义常量和抽象方法,常量的public static final可以省写。
//接口之间也可以用extends关键字继承,实现部分接口的类是抽象类,使用implements关键字。接口的方法默认是public的。
//
//32.Java用synchronized(任意对象){}实现线程同步。或者synchronized限定函数。
//33.Java有instanceof关键字判断一个类是否实现某个接口,也用它判断一个对象是否属于某个类 。
//34.Java的所有类都继承自Object类。对象间的比较要覆盖Object类的equals方法实现。
//35.Java可以在函数调用时的参数上定义匿名内部类。
//36.Java提供条理清晰结构分明的档案组织方式:package import;
//拥有一个优秀,涵盖面广,扩充性强的Java Libraries.
// java class fields(侯捷译为栏位),C++称为data member
//java在使用集合类时也可能会有内存泄漏。
//37.Java的类中没有黙认无参构造函数也可以创建对象数组。如:
class A
{
public A(int a){}
}
class test
{
A[] a=new A[20];
}
java与c++语法区别
最新推荐文章于 2021-03-18 19:19:15 发布