static,final,this关键字总结
一.static关键字
四个用法:
1.修饰成员变量
当成员变量不使用static修饰时,变量是属于不同的对象的,也就是说创建一个对象后,这个变量是它独有的,和其它对象没有关系。
当使用static修饰后,变量则是属于这个类的,也就是对象共有的,当在一个对象中修改后,其它对象中也同时会被修改。
2.修饰成员方法
成员方法本就属于类,所以使用static修饰后,最大的作用就是可以用类名.方法名调用,其它没有太大区别。
3.静态代码块
对象初始化相关:用static修饰的成员变量,不需要创建对象,而是只要使用到这个对象便会被初始化,而且总是在普通成员变量之前按定义的顺序被初始化。
使用下面这种语法:
class Book{ public Book(String msg) { System.out.println(msg); } }
public class Person { static Book book1; static { book1 = new Book("static成员book1成员变量初始化"); }}
可以替代static Book book1 = new Book("static成员book1成员变量初始化");而static加花括号的部分便是静态代码块
4.静态导包
采用import static com.xustudy.PrintHelper.*;这种语法后,便可以直接调用方法名来使用PrintHelper中的静态方法。
二.final关键字
四个用法:
1.修饰数据
包括修饰基本类型变量和引用类型变量
修饰基本类型变量:代表该变量被赋值后便不可被改变,也就是成为常量。
修饰引用类型变量:代表引用变量的引用不能改变,也就是不能再指向堆中的其它对象,但在堆中存储的数据是可以被改变的。
注意:使用final修饰的变量前必须初始化变量。直接赋值或在构造器中赋值都可以。
2.修饰方法中的参数
如果传参用final修饰,表示在方法当中你不能再改变传参的值了(基本类型和引用类型的区别和上面一样)。
3.修饰方法
用final修饰某个方法表示该方法不能被覆盖,同样private方法也不能被覆盖。
4.修饰类
表示该类不能被继承。
以上四种用法中1,2较常用,3,4较鸡肋。
三.this关键字
三个用法
1.调用本类中的属性和其它方法
即把 '对象名.成员变量' 或 '对象名.方法名' 改成 'this.成员变量 'this.方法名'。其中 'this.成员变量' 一个用法是:当成员变量名称与形参重名时可以用this区分。而 'this.方法名' 更多的时候没有必要使用,直接调用方法名即可。
2.调用本类中其它构造方法,调用时必须放在构造方法首行
基本用法是在一个构造器中调用其它构造器,比如Person类中有两个构造器:
class Person{ public Person(){ } public Person(String name){ this(); } }
this();就表示第一个无参构造器,且必须放在有参构造器第一行。同样也是根据参数数量进行区分。
3.返回当前对象的引用
将自身传递给外部方法,如下例:
class Person { public void eat(Apple apple){ Apple peeled = apple.getPeeled(); } } class Peeler{ static Apple peel(Apple apple){ //...remove peel return apple; } } class Apple{ Apple getPeeled(){ return Peeler.peel(this); } } public class Test{ public static void main(String[] args) { new Person().eat(new Apple()); } }
Apple需要调用Peeler.peel()方法,它是一个外部的工具方法,将执行由于某种原因而必须放在Apple外部的操作,为了将其自身传递给外部方法,Apple必须使用this关键字。(来自java编程思想)