JAVA与C++ 语法差异

一、基础类型

java中8种基础类型

1.  byte 数据类型是8位、有符号的,以二进制补码表示的整数,默认值为0

      表达范围是:-128(-2^7) ~ 127(2^7-1)

      取值范围已经定义在包中:Byte.SIZE,Byte.MIN_VALUE,Byte.MAX_VALUE

2. short 数据类型是16位、有符号的以二进制补码表示的整数,默认值为0

      表达范围:-32768(-2^15) ~ 32767(2^15 - 1)

      取值范围已经定义在包中:Short.SIZE,Short.MIN_VALUE,Short.MAX_VALUE

3. int数据类型是32位、有符号的以二进制补码表示的整数,默认值为0

      表达范围:-2,147,483,648(-2^31) ~ 2,147,483,647(2^31 - 1)

      取值范围已经定义在包中:Integer.SIZE,Integer.MIN_VALUE,Integer.MAX_VALUE

4. long数据类型是64位、有符号的以二进制补码表示的整数,默认为0L

      表达范围:(-2^63) ~ (2^63 -1)

       取值范围已经定义在包中:Long.SIZE,Long.MIN_VALUE,Long.MAX_VALUE

5. float 数据类型是单精度、32位、符合IEEE 754标准的浮点数,默认值为0.0f

       取值范围已经定义在包中:Float.SIZE,Float.MIN_VALUE,Float.MAX_VALUE

6. double数据类型是双精度、64位、符合IEEE 754标准的浮点数,默认值为0.0d

       取值范围已经定义在包中:Double.SIZE,Double.MIN_VALUE,Double.MAX_VALUE

7. boolean数据类型表示一位的信息,只有两个取值:true和false,默认值为false

8. char类型是一个单一的16位Unicode字符

      取值范围已经定义在包中:Character.SIZE,Character.MIN_VALUE,Character.MAX_VALUE

C++的基本类型

1. int(分为有符号整型 和 无符号整型),32位机器下占32位(以下均以32位机器为例)

2. short(分为有符号整型 和 无符号整型),16位

3. long(分为有符号整型 和 无符号整型),32位,不同于java的64位

4. float(分为有符号整型 和 无符号整型),32位

5. double(分为有符号整型 和 无符号整型),64位

6. char(分为有符号整型 和 无符号整型),8位,不同于java的unicode16位

7. bool ,1位

8. void,空类型,0位

 

二、常量

常量指不能改变的量。

在JAVA中用final标志,声明方式和变量类似:final double PI = 3.1415927;

在C++中用const标志: const double PI = 3.1415927; (编译阶段,会做语法检查、类型安全检查)

在C中用 #define标志:#define PI  3.1415927 (预处理阶段,进行简单的文本替换)

 

三、Java 修饰符

1. 访问修饰符

同一个类中:

  public protected private 默认的
JAVA 对所有类可见 同一包内的类和所有子类可见 在同一类内可见 不使用任何修饰符,即default类型,在同一包内可见
C++ 共有的,public成员变量、成员函数,可以通过类的成员函数、类的实例变量进行访问 受保护的,protected成员变量、成员函数,无法通过类的实例变量进行访问。但是可以通过类的友元函数、友元类进行访问 私有的,成员变量、成员函数,无法通过类的实例变量进行访问。 若不声明,则默认为private

类的成员函数,可以访问该类中任意的其它成员函数及成员变量,即使它是private和protect

类的实例对象,只能够访问public成员函数和变量,不能访问protect和private

 

继承关系中:

  public protected private  
JAVA 父类中声明为public的方法在子类中也必须为public 父类中声明为protected的方法在子类中要么声明为protected,要么声明为public。不能声明为private。 父类中声明为private的方法,不能够被继承。 父类中默认修饰符声明的方法,能够在子类中声明为private
C++

派生类通过public继承,基类的各种权限不变。

派生类的成员函数,可以访问基类的public成员、protected成员,但是无法访问基类的private成员。
派生类的实例变量,可以访问基类的public成员,但是无法访问protected、private成员,仿佛基类的成员之间加到了派生类一般。

派生类通过protected继承,基类的public成员在派生类中的权限变成了protected 。protected和private不变。
派生类的成员函数,可以访问基类的public成员、protected成员,但是无法访问基类的private成员,派生类的友元类也不能访问。
派生类的实例变量,无法访问基类的任何成员,因为基类的public成员在派生类中变成了protected。
派生类通过private继承,基类的所有成员在派生类中的权限变成了private。
派生类的成员函数,可以访问基类的public成员、protected成员,但是无法访问基类的private成员,派生类的友元类也不能访问。
派生类的实例变量,无法访问基类的任何成员,因为基类的所有成员在派生类中变成了private。
必须指定继承类型

 

Java程序的main() 方法必须设置成公有的,否则,Java解释器将不能运行该类

2. 非访问修饰符

  2.1  static修饰符,用来创建类方法和类变量

  2.2  final修饰符,用来修饰类、方法和变量,final修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的(C++中用 const)

  2.3  abstract修饰符,用来创建抽象类和抽象方法(C++中用 virtual)

  2.4 synchronized和volatile修饰符,主要用于线程的编程。

        synchronized关键字声明的方法同一时间只能被一个线程访问(C++中用线程异步:mutex、Critical Section、event和semaphore)

volatile(C++中也有volatile,但并不适用于多线程)

 

四、运算符

JAVA中有一个instanceOf 运算符,是C++所没有的。

该运算符用于操作对象实例,检查该对象是否是一个特定类型(类类型或接口类型)

使用实例:

例1:
String name = 'James';
boolean result = name instanceOf String; // 由于name是Strine类型,所以返回真


例2:
class Vehicle {}
public class Car extends Vehicle
{
   public static void main(String args[])
   {
      Vehicle a = new Car();
      boolean result =  a instanceof Car;
      System.out.println( result);
   }
}

 

五、循环结构

 JAVA除了跟C++一样有 while; do...while; 和for循环之外,Java5引入了一种主要用于数组的增强型for循环,语法如下:

for(声明语句 : 表达式)
{
   //代码句子
}

例子:

public class Test 
{
   public static void main(String args[])
   {
      int [] numbers = {10, 20, 30, 40, 50};

      for(int x : numbers )
      {
         System.out.print( x );
         System.out.print(",");
      }
      System.out.print("\n");
      String [] names ={"James", "Larry", "Tom", "Lacy"};
      for( String name : names )
      {
         System.out.print( name );
         System.out.print(",");
      }
   }
}

六、Number类

所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类Number的子类

JAVA有个Math类,包含了用于执行基本数学运算的属性和方法,如初等指数、对数、平方根和三角函数。

Math 的方法都被定义为 static 形式,通过 Math 类可以在主函数中直接调用

 

七、Java Character类

Java语言为内置数据类型char提供了包装类Character类

 

未完待续...

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(JAVA学习)