目录
一、关键字this和static
1.关键字this
this代表当前对象。
(1)当方法里面的局部变量和成员变量同名的时候,就可以使用this。
如:
public class Human {
String name;
String gender;
public Human(String name,String gender){
this.name=name;
this.gender=gender;
}
}
(2)当类中有多个方法时,也可以通过this实现在一个方法里面访问另一个方法。
如:
public void test1(){
System.out.println("我是中国人");
}
public void test(){
this.test1();
}
2.关键字static
static关键字表静态,可以用来修饰类的成员变量、代码块、成员方法、内部类(没有构造方法)。
被static修饰的成员,有以下特点:
(1)可以直接通过类名调用/访问(此时仍可以通过对象进行访问,但实际上在访问的过程中编译器会自动将对象名转换为类名进行访问,这仅是一种语法便捷性设计。不建议通过此种方式访问static修饰的成员)。
(2)随着类的加载而加载,先于对象之前加载。基于这一特点,静态的成员无法访问非静态的成员,但非静态的可以访问静态的成员。如在static修饰的方法的内部,只能访问static修饰的成员变量。同时,static无法和this共用。如在static修饰的方法内部,不能使用this修饰的成员。
(3)所有对象共享一份。(之前有提到成员变量在创建对象时会被复制一份,但是static修饰的情况下,就不会进行此操作,而是直接通过类名访问)。
二、代码块
1.定义
代码块就是一段没有名称的代码,在满足条件时便会自动执行。
2.实例代码块和静态代码块
(1)顾名思义,静态代码块就是被static修饰的代码块(格式为 static { }),而实例代码块即没被修饰的代码块(格式为 { })。
(2)实例代码块会在创建对象时自动调用,静态代码块会在类加载时自动执行。
(3)在创建对象时,实例代码块优先于构造方法执行。
如:
public class Human {
public Human(){
System.out.println("这是一个构造方法");
}
{
System.out.println("这是一个实例代码块");
}
}
随后创建一个对象,得出的运行结果是:
(4)在类加载时,所有被static修饰的成员按声明顺序依次执行。