this关键字、super关键字、static关键字、final关键字

this关键字 

this表示的是当前对象本身,更准确地说,this代表当前对象的一个引用,可以调用该类的属性,方法,构造器。

当在方法内需要用到调用该方法的对象时就可以使用this。

使用this调用成员变量

当形参与成员变量重名时,如果在方法内部需要使用成员变量,必须添加this来表明该变量时类成员

public Persion(String name, int age) {
	this.name = name;
	this.age = age;
}

使用this调用方法。

调用当前对象的其他方法(可以省略)
位置:任意

public void getInfo(){	
	System.out.println("姓名:" + name) ;
	this.speak();
}
public void speak(){
	System.out.println(“年龄:” + this.age);	
}

构造方法中使用this来调用其它构造方法。

位置:必须是第一条语句

public Persion(String name, int age) {
	this.name = name;
	this.age = age;
}
public Persion(String name, int age,double salary) {
	this(name,age);
	this.salary = salary;
}

super关键字

super代表父类的内存空间的标识,这个父类不仅仅指的是子类的直接父类。

使用场景

super可用于访问父类中定义的属性
super可用于调用父类中定义的成员方法
super可用于在子类构造方法中调用父类的构造器,必须在构造器中的第一句,且不能同时出现this调用本类中其他的构造方法
当子父类出现同名成员时,可以用super进行区分

this和super的区别

No.

区别点

this

super

1

访问属性

访问本类中的属性,如果本类没有此属性则从父类中继续查找

访问父类中的属性

2

调用方法

访问本类中的方法


直接访问父类中的方法

3

调用构造器

调用本类构造器,必须放在构造器的首行

调用父类构造器,必须放在子类构造器的首行

4

特殊

表示当前对象

无此概念


static关键字

static修饰成员变量

static修饰的成员变量为静态成员变量 ,或者叫做: 类属性,类变量.注意:static不能修饰局部变量。
它为该类的公用变量,属于类,对于该类的所有对象来说,static成员变量只有一份,被该类的所有对象共享,如果一个对象修改了类变量都将影响其他对象对这个类变量的调用
可以使用”对象.类属性”来调用。不过,一般都是用“类名.类属性”
static变量存放在静态域中

static修饰方法

static修饰的方法叫静态方法

不需要对象,就可以调用(类名.方法名)
静态方法不能以任何方式引用this和super关键字,因为this,super都是对象的引用,它在内存中是在静态方法加载后出现的,所以无法访问
静态方法中不可以访问非静态变量,非静态方法,只能访问静态变量和静态方法
理解:加载类的时候就加载静态变量和静态方法,此时可能还没有创建对象,所以非静态变量和非静态的方法还没有分配空间,无法访问
非静态方法中可以访问静态方法或者静态变量
理解:加载类的时候就已经加载静态变量和静态方法,创建对象后,非静态变量和非静态的方法才分配空间,此时静态变量和静态方法已经存在,可以访问

重载的方法需要同时为static的或者非static的

static修饰代码块

如果希望加载后,对整个类进行某些初始化操作,可以使用static静态代码块。
类第一次被载入时先执行static代码块;类多次载入时,static代码块只执行一次;Static经常用来进行static变量的初始化。
是在类初始化时执行,不是在创建对象时执行。
静态初始化块中不能访问非static成员。

static修饰内部类

使用场景:单例模式的实现
public class Singleton {
	private Singleton() {

	}

	private static class SingletonHolder {
		private final static Singleton instance = new Singleton();
	}

	public static Singleton getInstance() {
		return SingletonHolder.instance;
	}
	
	public static void main(String[] args) {
		Singleton s1 = Singleton.getInstance();
		Singleton s2 = Singleton.getInstance();
		System.out.println(s1 == s2);
	}
}

final关键字

 1.final修饰变量,成为常量,值不能再变化

    --final修饰基本数据类型,值只能赋值一次,后续不能再赋值
    --final修饰引用数据类型,不能变化的引用变量的值,可以变化的是对象的属性
 2.final修饰方法,不能被子类重写
 3.final修饰类,不能再有子类,如String类、StringBuffer、System
 4.final不能修饰构造方法

 5.static final 修饰的变量是全局静态常量

你可能感兴趣的:(java)