[Java]值得注意的一些语法点

1. Java类的运行顺序,new一个对象之后,要调用类的构造方法初始化这个类,然后要初始化它的属性,再回来继续调用构造方法。

2. 构造方法不能被继承,一个类能得到构造方法,只能有两种办法:编写构造方法,或者没有构造方法,调用默认构造方法。

3. super 可以调用父类中声明为private的变量。super()和this()都必须放在构造方法的第一行。super与this的区别:this用来表示当前对象本身,或者当前类的一个实例,是对本实例的引用;但super不是对象的引用,不能讲super赋值个另一个对象,super只是指示编译器调用父类方法的特殊关键字。

4. 多态: 父类的变量可以引用父类的实例,也可以引用子类的实例,但反过来不行。多态存在的三个必要条件:要有继承,要有函数的重写,父类引用子类的对象。当使用多态调用方法时,首先检查父类是否有该方法,如果没有,则编译错误,如果有,则检查子类是否覆盖了该方法,如果子类覆盖了该方法,则调用子类的方法,否则调用父类的方法。因此可以看到,多态的一个好处时,当子类比较多时,也不需要定义多个子类的变量,可以只定义一个父类类型的变量,来引用不同类型的子类的实例。多态带来了一个问题,就是如何判断一个变量所实际引用的对象的类型,这时可以用instanceof操作符。

5. static关键字,静态变量和静态方法。 static能修饰变量和方法。静态成员和静态方法可以直接通过类名进行访问,不需要创建这个类的对象来访问。因此它们又叫做类成员和类方法。

静态变量属于类,不属于任何独立的对象,所以不需要创建类的实例就可以访问静态变量。之所以会产生这的结果,是因为编译器为整个类创建了一个静态变量的副本,也就是只分配一个内存空间。虽然类可以有多个实例,但这些实例之间是共享这一块内存的。而实例变量则不同,每创建一个对象,就会分配一次内存空间,不同变量的内存相互独立,互不影响。在类被加载时,静态变量就被初始化了。

静态方法:不能操作对象,所以静态方法不能访问实例变量,只能访问类自身的静态变量。如果一个方法不需要访问对象状态,所需参数都是通过显式参数提供;或者一个方法只需要访问静态变量,这时可以使用静态方法。静态方法不能直接调用非静态方法。静态方法中不存在当前对象,因此不能使用this,也不能使用super。静态方法不能被非静态方法覆盖。构造方法不能允许被声明为static,因为构造方法可能要初始化非静态变量。局部变量不能使用static修饰,因为static变量是属于整个类的,而局部变量只属于{}。

6. final关键字。终态性。final关键字修饰的类不能被继承。final修饰的方法不能被子类重写。final修饰的变量即成为常量,只能赋值一次,且必须在声明的同时赋值,且必须在构造方法中显式赋值,然后才能使用。但final修饰的局部变量可以只声明不赋值,然后再进行一次性赋值。final一般用于修饰那些通用性的功能,实现方式或取值不能被随意改变的数据,以免被误用。

一旦将一个类声明为final,那么该类包含的方法也将被隐式地声明为final,但变量不会。

7. Object类。位于java.lang包中,是所有java类的祖先,java中的每个类都由它扩展而来。

数据等价的基本含义是两个数据的value相等。在通过equals()和==进行比较时,引用类型数据比较的是引用,也就是内存地址。基本数据类型比较的是value。equals()和==的区别:equals()只能比较引用类型,==可以比较引用类型和基本数据类型。当使用equals()进行比较时,对类File, String, Date和包装类来说,是比较类型和内容而不考虑是否是同一个实例。 用==比较时,符号两边的数据类型必须一致,否则编译出错。但用equals()比较时,只要两个数据都是引用类型即可。

猜你喜欢

转载自blog.csdn.net/michellechouu/article/details/48732143