天天看点

Java关键字介绍(static、this、final、super)一、this关键字:二、static关键字:三、super关键字:四、final关键字:

一、this关键字:

在类的内部表示当前这个对象的引用

1.作用

  • 调用本类属性
  • 调用本类方法
  • 表示当前对象

解析:调用本类属性

只要在类中⽅法访问类中属性,⼀定要加this关键字。

当参数与类中属性同名时,类中属性⽆法被正确赋值。此时我们加上this关键字便可以正确给对象属性赋值。

class Person{
private String name;
private int age;
public Person(String name,int age){
this.name = name ;
this.age = age ;
}
           

解析:调用本类方法

调用普通方法:this.方法名称(参数)

调用构造方法:this(参数)

eg:this.print();//调⽤普通⽅法

public Person(){
System.out.println("********产⽣⼀个新的Person对象********");
}
public Person(String name){
this();//调⽤本类⽆参构造
this.name = name ;
}
public Person(String name,int age){
this(name);//调⽤本类有参构造
this.age = age ;
}
           

注:this调用构造方法的语句必须在构造方法的首行

使用this调用构造方法时,要留有出口

解析:this表示当前对象

只要对象调用了本类中的方法,这个this就表示当前执行的对象

class Person{
public void print(){ 
//此时哪个对象调用print方法,this就代表那个对象。
System.out.println("[PRINT]⽅法: "+this); 
}
}
public class Test{
public static void main(String[] args) {
Person p1 = new Person();
System.out.println("[MAIN]⽅法: "+p1);
p1.print();
System.out.println("=================");
Person p2 = new Person();
System.out.println("[MAIN]⽅法: "+p2);
p2.print();
}
}

输出结果:
[MAIN]Demo.Person@1540e19d
[PRINT]方法Demo.Person@1540e19d
======
[MAIN]Demo.Person@677327b6
[PRINT]方法Demo.Person@677327b6
           

二、static关键字:

1.static类属性

  • 传统属性特性:保存在堆内存中,且每个对象独享属性。
  • 描述共享属性,只需要在属性前添加static关键字即可。
  • static属性⼜称为类属性,保存在全局数据区的内存之中,所有对象都可以进⾏该数据区的访问

注意:

访问static属性(类属性)应使⽤类名称.属性名

所有的⾮static属性(实例变量)必须在对象实例化后使⽤,⽽static属性(类属性)不受对象实例化控制

2.static类方法

  • 所有的static⽅法不允许调⽤⾮static定义的属性或⽅法
  • 所有的⾮static⽅法允许访问static⽅法或属性

    使⽤static定义⽅法只有⼀个⽬的:某些⽅法不希望受到对象的控制,即可以在没有实例化对象的时候执⾏(⼴泛存在于⼯具类中)

注意事项:

  • 静态方法中不能使用this和super关键字
  • 静态方法中不能访问非静态成员变量、非静态成员方法
  • 非静态方法可以访问静态

3.【静态成员变量和非静态成员变量的区别】

静态成员变量 非静态成员变量
语法 static修饰 无static修饰
数量 内存中只有一份,被类的所有对象共享 每创建一个对象都会为该成员变量分配内存空间,独享属性、互不干扰
访问方式 可通过对象名访问、也可通过类名访问 只能通过对象名访问
生命周期 跟随类的加载而创建并初始化,跟随类的销毁而销毁 跟随对象的创建而创建并初始化,跟随对象的销毁而销毁

三、super关键字:

1.三个作用:

  • 在子类的成员方法中,访问父类的成员变量
  • 在子类的成员方法中,访问父类的成员方法
  • 在子类的构造方法中,访问父类的构造方法(必须位于第一行,且只能执行一次)

⼦类对象实例化操作时,super()的主要作⽤是⼦类调⽤⽗类构造⽅法时才使⽤的。

在进⾏覆写的操作过程之中,⼦类也可以使⽤super.⽅法()/super.属性明确调⽤⽗类中的⽅法或属性

2.【this与super的区别】

区别 this super
概念 访问本类中的属性和方法 由子类访问父类中的属性、方法
查找范围 先查找本类、如果本类没有就调用父类 不查找本类,直接调用父类定义
特殊 表示当前对象

ps:this、super只能在有对象的前提下使用,不能在静态上下文中使用

能使⽤super.⽅法()⼀定要明确标记出是⽗类的操作。

  1. ⼦类覆写⽗类的⽅法是因为⽗类的⽅法功能不⾜才需要覆写。
  2. ⽅法覆写的时候使⽤的就是public权限

四、final关键字:

使⽤final修饰类、⽅法、属性

1.final修饰类

  • final⼀旦修饰⼀个类之后,该类的所有⽅法默认都会加上final修饰。 (不包含成员变量)
  • 使⽤final定义的类不能有⼦类(String类便是使⽤final定义)

2.final修饰方法

  • 使⽤final定义的⽅法不能被⼦类所覆写
class A{
public final void fun(){}
}
           

3.final修饰变量

  • 使⽤final定义的变量就成为了常量, 常量必须在声明时赋值,并且不能再次赋值。
  • final成员变量必须在声明的时候初始化或者在构造器中初始化,否则就会报编译错误
  • 定义常量(public static final ),常量全⽤⼤写字⺟,多个单词间以_分隔。