this 关键字this关键字用于引用类的当前实例。 例如:
class Manager { Employees[] employees; void manageEmployees() { int totalEmp = this.employees.length; System.out.println("Total employees: " + totalEmp); this.report(); } void report() { }}在上面的示例中,this关键字用于两个地方:
this.employees.length:访问类Manager的当前实例的变量。
this.report():调用类Manager的当前实例的方法。
此关键字是可选的,这意味着如果上面的示例在不使用此关键字的情况下表现相同。 但是,使用此关键字可能会使代码更易读或易懂。super 关键字super关键字用于从子类访问父类的变量和方法。 例如:
public class Super { protected int number; protected showNumber() { System.out.println("number = " + number); }} public class Sub extends Super { void bar() { super.number = 10; super.showNumber(); }}在上面的例子中,Sub 类访问父类成员变量 number 并调用其其父类 Super 的 showNumber() 方法。使用 this 和 super 要注意的问题:
super 调用父类中的其他构造方法时,调用时要放在构造方法的首行!this 调用本类中的其他构造方法时,也要放在首行。
this、super不能用在static方法中。
简单解释一下:被 static 修饰的成员属于类,不属于单个这个类的某个对象,被类中所有对象共享。而 this 代表对本类对象的引用,指向本类对象;而 super 代表对父类对象的引用,指向父类对象;所以, this和super是属于对象范畴的东西,而静态方法是属于类范畴的东西。参考
static{}静态代码块与{}非静态代码块(构造代码块)相同点: 都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,定义多个时按定义的顺序执行,一般在代码块中对一些static变量进行赋值。不同点: 静态代码块在非静态代码块之前执行(静态代码块—非静态代码块—构造方法)。静态代码块只在第一次new执行一次,之后不再执行,而非静态代码块在每new一次就执行一次。 非静态代码块可在普通方法中定义(不过作用不大);而静态代码块不行。一般情况下,如果有些代码比如一些项目最常用的变量或对象必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的。如果我们想要设计不需要创建对象就可以调用类中的方法,例如:Arrays类,Character类,String类等,就需要使用静态方法, 两者的区别是 静态代码块是自动执行的而静态方法是被调用的时候才执行的.Example
public class Test { public Test() { System.out.print(默认构造方法!--); } 非静态代码块 { System.out.print(非静态代码块!--); } 静态代码块 static { System.out.print(静态代码块!--); } public static void test() { System.out.print(静态方法中的内容! --); { System.out.print(静态方法中的代码块!--); } } public static void main(String[] args) { Test test = new Test(); Test.test();静态代码块!--静态方法中的内容! --静态方法中的代码块!-- }当执行 Test.test(); 时输出:静态代码块!--静态方法中的内容! --静态方法中的代码块!--当执行 Test test = new Test(); 时输出:静态代码块!--非静态代码块!--默认构造方法!--非静态代码块与构造函数的区别是: 非静态代码块是给所有对象进行统一初始化,而构造函数是给对应的对象初始化,因为构造函数是可以多个的,运行哪个构造函数就会建立什么样的对象,但无论建立哪个对象,都会先执行相同的构造代码块。也就是说,构造代码块中定义的是不同对象共性的初始化内容。参考