Java与C++语法的区别

时间:2023-03-09 00:25:00
Java与C++语法的区别

1. 注释可以在Java程序中起到文档标记的作用

类文档标记:

1)@version

2)@author

3)@param

4)@return

5)@exception

2. Java的字符占两个字节,是Unicode编码

3. 作用域——

Java不存在全局和局部作用域。

不重名:Java程序块不能将内部作用域声明的变量与其外部作用域声明的变量重名。

4. Java程序不可能在类外的全局区域有方法。

5. Java数组

定义:

int  arr[ ] = new int[10];

与数组相关的方法:

1)复制数组

System.arrycopy(...);

2)数组排序

Array.sort(arrayname);

6. Java的类

1)new语句的类名后要有一对圆括号

Man p1 = new Man();

类名后的句柄 p1,相当于C++的指针,引用一个Man的对象

2)对象的比较

操作符==时

两个变量所指内存地址相等的时候,才能返回true

3)this引用句柄

构造方法中可以通过this调用另一个构造方法

{... this(...,...,...);}

7.垃圾回收机制

数组和对象分配在堆上

数组和对象在没有引用变量指向它时才会变成垃圾,不能再被使用,但仍然占据着内存,在随后一个不确定的时间被垃圾回收器释放掉,这也是Java占内存的原因。

8.static关键字

注意:不能把任何方法体内的变量声明为静态(只能把类的成员声明为静态成员)

1)静态代码块

class Code{
{
System.out.println("Code的构造块");
} static{
System.out.println("Code的静态代码块");
} public Code(){
System.out.println("Code的构造方法");
}
}

不包含在任何方法体中的,当类被载入时,自动执行静态代码块,且只被执行一次,经常用作初始化类中属性;

在Java中,一个类装入JVM中经过3个步骤:装载、链接和初始化。因此,静态代码块执行在构造函数之前。

2)main方法是静态的

这个main()方法的声明为:public static void main(String args[])。必须这么定义,这是Java的规范。

因此在main()方法中,不能直接访问该类中的非静态成员。

9.类的继承

Java的继承是单一继承关系,一个子类只能有一个父类

class A
{}
class B extends A
{}
class C extends B

子类构造的时候,需要在构造函数中super(参数)构造父类。在子类有方法或变量与父类有冲突时,可以用super. 来加以区别。 

class Student extends Person{
public Student (String name, int age, String school) {
super(name,age);
this.school=school;
}
}

10.抽象类与接口 

1)必须用abstract 关键字来修饰抽象类;抽象方法也必须用abstract来修饰。

含有抽象方法的类必须被声明为抽象类,抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个子类还是抽象类。

2)接口interface——Java对C++多重继承的改进

接口是抽象方法和常量值的定义集合;

接口可以看作一种特殊的抽象类,只包含常量和方法的定义,而没有变量和方法的实现;

接口里的变量默认使用public static final标识的,因此,接口中定义的变量就是全局静态常量;

用implements关键字去实现一个接口中的所有或部分方法;

11. 对象的多态

Java中所有类都继承自Object类,Object是Java类层中最高层类

Object类中的getClass()、notify()、notifyAll()、wait()等方法不能被重写,因为这些方法被定义为final类型。

多态:

  1. >多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
  2. >实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
  3. >多态的作用:消除类型之间的耦合关系。

多态存在的三个必要条件
1>、要有继承;
2>、要有重写;
3>、父类引用指向子类对象。

12. 包

package语句:Java中采用了“.”来分隔目录

package   name1.subname2;

public class classname
{}

类会被打包进对应路径下的 classname.class文件

import语句

使用某个包里的类

import java.util.*;

13.Java类的访问控制

1)类只有两种访问控制:public和默认。默认修饰即class关键字前没有访问控制符的类,只能被同一包中的所有类访问。

2)带有public修饰符的类的类名必须与源文件名相同。只要在class之前,没有使用public修饰符,源文件的名称就可以是任意的。

jar文件包:某个java应用所需的class文件和其他文件的压缩包,习惯上称jar包。

14. final关键字

final关键字的含义?

final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编译错误。

什么是final变量?

凡是对成员变量或者本地变量(在方法中的或者代码块中的变量称为本地变量)声明为final的都叫作final变量。final变量经常和static关键字一起使用,作为常量。下面是final变量的例子:

1
2
public static final String LOAN = "loan";
LOAN = new String("loan") //invalid compilation error

final变量是只读的。

什么是final方法?

final也可以声明方法。方法前面加上final关键字,代表这个方法不可以被子类的方法重写。如果你认为一个方法的功能已经足够完整了,子类中不需要改变的话,你可以声明此方法为final。final方法比非final方法要快,因为在编译的时候已经静态绑定了,不需要在运行时再动态绑定。下面是final方法的例子:

1
2
3
4
5
6
7
8
9
10
11
12
class PersonalLoan{
    public final String getName(){
        return "personal loan";
    }
}
class CheapPersonalLoan extends PersonalLoan{
    @Override
    public final String getName(){
        return "cheap personal loan"; //compilation error: overridden method is final
    }
}

什么是final类?

使用final来修饰的类叫作final类。final类通常功能是完整的,它们不能被继承。Java中有许多类是final的,譬如String, Interger以及其他包装类。下面是final类的实例:

1
2
3
4
5
6
7
    final class PersonalLoan{
    }
    class CheapPersonalLoan extends PersonalLoan{  //compilation error: cannot inherit from final class
}

final关键字的好处

下面总结了一些使用final关键字的好处

  1. final关键字提高了性能。JVM和Java应用都会缓存final变量。
  2. final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。
  3. 使用final关键字,JVM会对方法、变量及类进行优化。

不可变类

创建不可变类要使用final关键字。不可变类是指它的对象一旦被创建了就不能被更改了。String是不可变类的代表。不可变类有很多好处,譬如它们的对象是只读的,可以在多线程环境下安全的共享,不用额外的同步开销等等。

15.Java API

System与Runtime类