Java中有非常重要的四大关键字,分别是
this
、
super
、
static
、
final
。今天我们就来说一说这四大关键字的作用。
this关键字
this
只能出现在一个类的内部,而且是出现在类的某个方法里。this
代表的是当前对象,也就是说谁调用这个方法,谁就是this
。this
不能出现在静态方法里。
this能做什么?
- this可以访问本类的属性
- this可以访问本类的方法
- this可以调用本类的其他构造方法
super关键字
supe
r的作用很简单就是用来代表父类对象
那么super
能做什么呢?
-
super
可以访问父类继承的属性(必须符合访问修饰符的要求) -
super
可以访问父类继承的方法(必须符合访问修饰符的要求) -
super
可以调用父类的构造方法(这个下一章会讲到)
平时很少使用super
关键字,因为无论你通过super
访问属性还是方法,你访问的属性和方法子类已经继承过来了,所以我们用this
就可以访问了。
什么时候使用super
呢?
- 调用父类的构造方法(构造方法是无法继承的,只能调用)
- 当出现方法重写的时候,你想用父类的方法实现时就可以使用
super
来调用
static关键字
static是静态的的意思,在java里,static用来修饰属性或者方法的
static修饰属性
如果static修饰属性说明这个属性是类属性而不是实例属性或者叫对象属性,这个类的所有对象将公用这个属性(可以定义全局变量或常量)
类属性:属性独立于对象,不是每个对象都有的。
对象属性:每个对象都有这个属性。
例如:Person类里的name,sex,age…等属性
如何访问static修饰的属性?
- 对象.类属性名
- 类名.类属性名(推荐)
static修饰的属性有什么用?
比如有这样的需求:我想知道一共创建了多少个Person对象,这时就可以用static(在构造方法里使用count++)
public class Person {
public static int count = 0;
public Person() {
count++;
}
}
可以在一个方法中实例化这个对象,测试这个统计
public static void main(String[] args) {
Person person1 = new Person();
Person person2 = new Person();
Person person3 = new Person();
Person person4 = new Person();
Person person5 = new Person();
System.out.println("Person被实例化了 " + Person.count + "次.");
}
static可以修饰方法
static修饰方法,这个方法就是类方法,而不是对象方法
类方法:一旦一个方法定义成类方法,这个方法可以通过类名直接调用,而不用创建对象;
当你一个方法定义成类方法之后,也可以通过对象来调用方法,但是推荐使用类名调用静态方法。
那么什么时候会用到static关键字呢?
很多地方…,例如Arrays类就用了很多static方法,系统的工具类就大多都是static修饰的方法。
- 我们自己什么时候用static呢?
任何一个没有用到实例方法的变量都可以定义成static方法。
- 我们平时怎么使用static方法呢?
我们平时通过static去写工具类,这个类里面几乎所有的方法都是static的。
对象方法和类方法的区别
类方法里不能出现实例变量(类属性),因为类方法可以在不创建对象的情况下由类名去调用,这个时候就会出现对象不存在的问题。你在为某个对象的某个属性赋值,又或者你有很多对象,那么你究竟在为哪个对象的属性赋值?
static修饰类
static也可以修饰类,只不过它不能修饰普通的类,普通类是不能被声明为静态的,static只能修饰内部类。至于什么是内部类?内部类顾名思义就是定义在一个类中的类。这里简单的提一下,后续章节会着重介绍。下面给出一个内部类的示例:
public class A {
private String name;
public void print(String str) {
System.out.println(str);
}
static class B {
private String nickName;
public void setNickName(String nickName) {
this.nickName = nickName;
}
public String getNickName() {
return nickName;
}
}
class C {
public void test() {
System.out.println("我是内部类C");
}
}
}
普通的内部类实例化时需要先实例化外面的类,然后通过外层的对象再实例化内部类。但是静态内部类不需要再这样实例化,被static修饰的类变成静态内部类后功能和普通类一样,可以直接绕过外层类直接实例化内部类。
A a = new A();
a.print("Hello");
A.C c = a.new C();
c.test();
A.B b = new A.B();
b.setNickName("Hello,我是一个静态内部类");
b.getNickName();
final关键字
final是最终的意思,final关键字在Java中可以修饰变量,方法,类
final修饰变量
当
final
修饰一个变量的时候,说明这个变量只能赋值一次;final
修饰静态变量,静态变量也只能赋值一次
什么时候使用final修饰变量呢?
当你不希望别人修改变量值得时候使用final
final修饰方法
被修饰的方法不能被重写
什么时候用final修饰方法呢?
当你不希望这个方法被子类重写的时候使用final
final修饰类
被修饰的类不能被继承。
什么时候使用final修饰类?
当你不希望别的类继承的时候使用final
-------------------------------------下一章节->JavaSE之String--------------------------------
-------------------------------------返回->JavaSE系列<-目录-------------------------------------