一、this
通常写this的时候,都是指“这个对象”或者“当前对象”,而且它本身表示对当前对象的引用。
this的使用方法如下。
(1)用this指代对象本身。
(2)访问本类的成员:this.属性名,this.方法名()。解决参数和成员变量名字歧义问题
(3)调用本类的构造器:this(参数)。构造函数里调用构造函数
二、static
static(静态)更像是全局变量可以共享数据。静态数据都只占用一份存储区域。
static方法就是没有this的方法;
在static方法内部不能调用非静态方法,但是反过来却可以;
可以在没有创建任何对象的前提下,仅仅通过类名本身来调用static方法,这其实是static方法的主要用途。
static关键字的基本作用:方便在没有创建对象的情况下来进行调用(方法/变量)。
static可以用来修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序性能。
static 代码块优化性能:
static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次。
很多时候会将一些只需要进行一次的初始化操作都放在static代码块中进行。
三、super
super关键字主要有以下两种用途。
(1)调用父类的构造器:super(参数);
(2)访问隐藏的成员:super.属性名;super.方法名();
四、final
1.final修饰类表示该类不能被继承。
在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,那么就设计为final类。
有时候出于安全考虑,可以把一些类定义为final型,比如String类是Java中非常重要的类,对于编译器和解释器的运行有着重要作用,不能轻易改变。
针对final型类:其属性可以定义为final,也可以不是final;对于方法,由于所属类为final型,其方法也就默认为final型方法了,即使方法没有声明final型。
2.final修饰的属性是常量。
final修饰基本类型容易理解就表示这个基本类型值不可变。
对于引用类型的final对象,表示引用恒定不变、对象本身可以修改。
有个形象的比喻:一个女子定义了一个final的老公,这个老公的职业和收入都是允许改变的,只是这个女人不会换老公而已
3.final修饰的方法称为最终方法,不允许子类重写父类的final方法。
使用final方法的有两个优点。
第一,把方法锁定,防止任何继承类修改它的意义和实现。
第二,final方法执行效率高,因为不需要进行方法重写判定。编译器在遇到调用final方法时,会转入内嵌机制,大大提高执行效率。
4. 对于被final修饰的变量,在用的时候是可以直接替换的,因为其本身是固定不可变的
public static void main(String[] args) {
final String s = "java";
String s1="hello";
String s2 ="hellojava";
String s3="hello"+s;//s是final可以直接替换为java,因此s3在编译期间即可确定值,存放在常量池。
String s4=s1+s;//s1在编译期间是一个变量也就是说在编译期间不能确定s4的值,必须到运行时才能确定s4的值,不会存放在常量池。和s3的引用不相同
System.out.println(s2==s3);//true
System.out.println(s2==s4);//false
}