java中的static、final、this、super关键字
static关键字
- 所有的static关键字修饰的都是类相关的,类级别的
- 所有被static关键字修饰的,都是采用"类名."的方式访问,不需要new对象访问
- static修饰的变量:类变量
- static修饰的方法:类方法
- static是不允许用来修饰局部变量(原因在变量和常量常量中做了解释)
注解:实例方法/变量等,必须先有对象,才能访问,不然可能会空指针异常(java.lang.NullPointerException)
注意:空指针异常只要"空引用"访问"实例"相关的都是会发生空指针异常的。
什么时候成员变量声明为实例变量,什么时候声明为静态变量?
当一个对象独享一份的是实例变量,当所有对象共享一份的是静态变量
-
当使用"引用."去访问静态变量或者静态方法时,在底层实际上是使用的"类名."去访问的静态变量,
-
当一个对象通过new关键字创建出对象,并且把对象创建出的地址赋值给变量,那么这个变量就是"引用"
-
1 static { 2 java语句; 3 java语句; 4 }
static 静态代码块在什么时候执行呢?
类加载时执行,并且只执行一次(特点/特征)
注解:静态代码块在类加载时执行,并且在主方法(main方法)执行之前执行,并且一般按照自上而下的顺序执行
1 { 2 java语法; 3 java语法; 4 }
-
-
this可以使用在实例方法中,也可以使用在构造方法中。
-
this出现在实例方法中,谁调用这个实例方法,this就是谁,所以this代表是:当前对象
-
this不能使用在静态方法中。(this代表当前对象,静态方法中不存在当前对象)
-
this. 大部分情况下可以省略,但是用来区分局部变量和实例变量的时候不能省略
-
1 public Student(){ 2 this(1,"曹操"); 3 } 4 public Student(int id,String name){ 5 this.id = id; 6 this.name = name; 7 }
"this." 不能省略的情况(出现在set和构造方法中等等)、
例如:
1 public class Test{ 2 private String name; 3 4 public void setName(String name){ 5 this.name = name 6 } 7 public Test(String name){ 8 this.name = name; 9 } 10 }
注意:main()方法是静态的,JVM调用main方法的时候直接采用的是"类名."的方式,所以main方法中没有this
1 public class Test{ 2 public static void main(String[] args){ 3 DiaoCan dc = new DiaoCan("貂蝉"); 4 dc.dancing; 5 } 6 } 7 8 class Customer{ 9 String name; 10 public Customer(){} 11 public Customer(String name){ 12 //还有个super(),自己不写,系统默认加上的 13 this.name = name; 14 } 15 16 } 17 18 class DiaoCan extends Customer(){ 19 //子类也有个name属性 20 String name; 21 public DiaoCan(){} 22 public DianCan(String name){ 23 super(name); 24 } 25 public void dancing(){//打印结果 26 System.out.println(this.name+"正在跳舞");//null正在跳舞 27 System.out.println(super.name+"正在跳舞");//貂蝉正在跳舞 28 System.out.println(name+"正在跳舞");//null正在跳舞 29 } 30 }
注解:
-
-
this()和super()不能共存,它们都只能出现在构造方法的第一行
-
super(实参)的作用是:初始化当前对象的父类型特征,并不是创建父类对象
-
-
final修饰的方法无法覆盖。
-
final修饰的变量只能赋一次值.
-
final修饰的引用一旦指向某个对象,则不能再重新指向其它对象,直到程序运行结束,但该引用指向的对象内部的数据是可以修改的。
-
final修饰的实例变量必须手动初始化,不能采用系统默认值。(这个赋值在声明变量后面赋值可以,在构造方法里赋值也行)
-
1 public static final double PI = 3.1415926;
反正就一句话:final修饰的东西不能变