【Java笔记】static和final关键字的初级理解应用

时间:2021-11-10 16:02:58

一、static

   1、static修饰的成员变量

    在一个类中,非静态成员变量对每一个对象都会有一个特定的值,在初始化非静态变量的时候是不分配内存的,只有创立对象后才会分配,而且不同对象之间的同名非静态变量是可以不同的;而用static修饰的变量,一个类的所有对象都共享这个属性,如果不加final修饰词的时候,当一个对象对static变量修改的时候,这个类的所有对象的这个属性都会改变

例01:

class Animal {
 Animal(){}
 public static int ee=0;
}
public class Dog {
 public static void main(String[] args) {
  Animal dog=new Animal();
  dog.ee=9;
  System.out.println(Animal.ee);
 } 
}
输出:9 实际上,创建对象dog来调用static成员变量是没有意义的,例01是为了演示在一个类中static定义的变量是只有一个值,所有的成员共享一个static变量。 通常我们通过类名来调用static变量,比如例01中的输出内容Animal.ee 2、static修饰的方法

    ① static修饰的方法称为静态方法,类比静态变量,静态方法是一个类的所有变量共有的,其他类调用静态方法时只需要用“类名.方法名”的方式来调用

   ②static方法内部只能访问类的static属性,不能访问类的非static属性。

   ③因为不需要实例就可以访问static方法,因此static方法内部不能有this,也不能有super;

例02:

 class Animal {
 Animal(){}
 public static void eat(){
  
  System.out.println("I can eat.");
 }
}
public class Dog {
 public static void main(String[] args) {
  Animal dog=new Animal();
  dog.eat();
 Animal.eat();
 } 
输出结果: I can eat.
I can eat.
可以看出,是否通过对象调用static方法是没有什么区别的
(3、静态语句块) static小结:用static修饰的属性或方法属于这个类,或者说被该类所有的实例对象所共享,在需要调用的时候,既可以通过类来调用,也可以通过具体的实例对象来调用,不同对象调用静态属性相同,静态方法执行结果相同; 不用static修饰的属性或方法属于这个类的对象不属于这个类,只能通过对象来调用,而且不同对象的调用结果可能不同; 二、final关键字 ①在Java中声明类、属性和方法时,可使用关键字final来修饰。②final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。③final标记的类不能被继承。提高安全性,提高程序的可读性。④final标记的方法不能被子类重写。增加安全性。⑤final标记的成员变量必须在声明的同时或在每个构造方法中显式赋值,然后才能使用。

     如final PI=3.14;

public final class Test{

  public static inttotalNumber= 5 ;

  public final int id;

  public Test(){

  id = ++totalNumber;//在构造方法中给final变量赋值

  }

     public static void main(String[] args) {

  Test t = new Test();

  System.out.println(t.id); 

  final int i = 10;

  final int j;

  j = 20;

  j = 30;                        //非法,final只能初始化一次

      }

}