super修饰符
super关键字与this类似,this用来表示当前类的实例,super用来表示父类。
super可以用在子类上,使用方式和this一样,通过点号(.)来在子类中获取父类的成员变量和方法。super也可以用在子类的类中,Java能自动上层追溯。
super关键字的功能:
- 调用父类中声明为private的变量。
- 可以调用在子类中已被覆盖了的方法。
- 作为方法名表示父类构造方法。
注意:如果在子类的构造方法中使用super()调用父类的构造方法时,必须把super()放在子类的构造方法的第一行。
class Student extends People{ public double score; public Student(double score){ super();//必须放在第一行 this.score=score; } }
instanceof关键字
Java多态性带来了一个问题,就是如何判断一个变量所实际引用的对象的类型。C++中使用runtime-type iformation(RTTI),Java使用instanceof关键字。
public class Test { public void instanceofTest(Object obj){ if(obj instanceof People){ System.out.println("参数obj是一个People类型的对象"); }else if(obj instanceof Teacher){ System.out.println("参数obj是一个Teacher类型的对象"); }else if(obj instanceof Student){ System.out.println("参数obj是一个Student类型的对象"); } } public static void main(String[] args) { Student student=new Student(100); Test test=new Test(); test.instanceofTest(student); } }可以看出,如果变量引用的是当前类或当前类的子类,instanceof返回true,否则返回false。
static关键字
static修饰的变量
static修饰符能够与变量、方法一起使用,表示是“静态”的。
被static关键字修饰的变量、方法可以直接通过(类名.属性)这样的格式获取,不用对类进行实例化,并且static修饰的变量一般情况下都是大写。
staitc 的内存分配
静态变量属于类,不属于任何独立的对象,所以无需创建类的实例就能访问到静态变量。之所以会有这样的结果,是因为编译器只为整个类创建了一个静态变量的副本,也就是只分配一次内存空间,虽然有多个实例,但这些实例共享该内存。实例变量则不同,每创建一个对象,都会分配一次内存空间,不同变量的内存相互独立,互不影响,改变a对象的实例变量不会影响b对象。
注意:static的变量在类装载时就会被初始化。也就是说,只要类被装载,不管你是否使用了这个static变量,他都会被初始化。
static修饰的方法
调用静态方法也是通过(类名.方法名)这样即可。不需要实例化任何对象。
因为静态方法不能操作对象,所以不能在静态方法中访问实例变量,只能访问自身类的静态变量。
写过很多程序的人肯定注意到了,main()也是一个被static修饰的方法,不对任何对象进行操作。实际上,在程序启动时还没有任何对象,main()方法时程序的入口,将被执行并创建程序所需的对象。
关于静态变量和静态方法的总结:
- 一个类的静态方法只能访问静态变量;
- 一个类的静态方法不能够直接调用非静态方法;
- 如访问控制权限允许,静态变量和静态方法也可以通过对象来访问,但是不被推荐;
- 静态方法中不存在当前对象,因而不能使用 this,当然也不能使用 super;
- 静态方法不能被非静态方法覆盖;
- 构造方法不允许声明为 static 的;
- 局部变量不能使用static修饰。
final修饰符
在Java中,声明类,变量和方法时,可以使用final关键字来修饰,final所修饰的数据具有“终态”的特征,表示“最终的”意思。具体规定如下:
- final修饰的类不能被继承,如String类,StringBuffer,Integer...
- final修饰的方法不能被子类重写。
- final修饰的变量即称为常量,只能赋值一次,无法二次修改。
- final修饰的成员变量必须在声明的同时赋值,如果在声明的时候赋值,那么只有一次赋值的机会,而且只能在构造方法中显式赋值,然后才能使用。
final修饰符一般用于修饰那些通用性的功能、实现方法或取值不能随意被改变的数据,以避免被误用,例如数学类常量π=3.1415926、e=2.71828等。