static final关键字

 

  1. static,final都是Java的修饰符
  2. static:当我们想不通过创建类直接调用类中的方法时,可以通过static关键字来实现。static是静态修饰符。静态优先于非静态存在内存中
  3. static特点:
  • 被 static 修饰的成员变量属于类,不属于这个类的某个对象。也就是说,多个对象在访问或修改 static 修饰的成员变量时,其中一个对象将 static 成员变量值进行了修改,其他对象中的 static 成员变量值跟着改变,即多个对象共享同一个 static 成员变量。
    class Demo {
        public static int num = 20;
	}

	class Test1 {
		public static void main(String[] args) {
        	Demo d1 = new Demo();
        	Demo d2 = new Demo();
        	d1.num = 200;
        	System.out.println(d1.num); //结果为 200
        	System.out.println(d2.num); //结果为 200
    	}
	}

  • 被 static 修饰的成员可以通过类名直接访问。

       访问静态成员的格式:
        类名.静态成员变量名
        类名.静态成员方法名(参数)
        对象名.静态成员变量名 ------不建议使用该方式,会出现警告

        对象名.静态成员方法名(参数) ------不建议使用该方式,会出现警告

4.static注意事项

    1)一个类中,静态成员只能访问静态成员。非静态成员可以访问静态或非静态成员。

    2)静态内容是优先于对象存在,只能访问静态,不能使用 this/super。静态修饰的内容存于静态区

    class Demo {

		// 成员变量
		public int num = 100;    // 静态方法
		public static void method(){
            //this.num; 不能使用 this/super。
            System.out.println(this.num);
		}
	}

 

5.static在多态调用中

  static的规则:静态属于类,不属于对象;多态是对象的属性,与静态无关;

 

    public class Fu {
		String str = "fu";
		final String s2 = "fuFinal";

		public static String show() {
			return "fu";
		}
	}

	public class Zi extends Fu {
		String str = "zi";
		final String s2 = "ziFinal";

		public static String show() {
			return "zi";
		}

	}

	public class Test1 {
		public static void main(String[] args) {
			Fu fu = new Zi();
			System.out.println(fu.str);  //fu
			System.out.println(fu.show()); //fu
			System.out.println(fu.s2);//fuFinal
		}
	}

6.final:意思为最终,不可变

7.被final修饰的特点:

     1)final修饰的类不能被继承,但是可以继承其他类
2)final修饰的方法可以被继承,但是不能重写。父类中的方法如果没有被final修饰,子类重写后可以加final修饰
3)final修饰的局部变量:一次赋值,终生不变。具体分情况
final修饰的基本变量,一次赋值,终身不变。但是final修饰的引用型变量,比如StringBuilder,Map等,其

引用(地址值)不可变,但是引用指向的内容是可以变了。比如map可以put

8.了解完static,final,简单说明一下静态常量,就是同事被final,static修饰的常量

    public static final 数据类型 变量名 =值;

    接口中的每个成员变量都默认使用 public static final 修饰。
    所有接口中的成员变量已是静态常量,由于接口没有构造方法,所以必须显示赋值。可以直接

    用接口名访问。

interface Person{
     public static final int MAX_AGE= 100;
}

 Person.MAX_AGE    访问接口中的静态变量

 

 

你可能感兴趣的:(static,final,Java,关键字,Java基础)