问题描述:
Java中有两个修饰符关键字static和final,用来修饰成员变量和方法。其中static表示静态的意思,被这个关键字修饰的方法和变量,则表示在Java虚拟机加载类的时候就加载了这个变量和方法,并且它与对象无关,它直属于类;其中final表示最终的意思,被这个关键字修饰的方法,则表示这个方法不能被重写,被这个关键字修饰的变量,则表示这个变量不能被改变。static和final的区别,当你懂得它们的含义,就知道它们的区别了,其实它们是两个不同的概念,哪有区别之分。为了更清晰的解释它们的含义,下面附上测试代码:
1 package com.test; 2 3 public class Test { 4 5 /** 6 * @param args 7 * static和final关键字测试样例 8 */ 9 public static void main(String[] args) { 10 // TODO Auto-generated method stub 11 MyClass myClass1 = new MyClass(); 12 MyClass myClass2 = new MyClass(); 13 /* 14 * 由于j被static关键字修饰,则表示变量j直属于类,不属于对象,所以这里变提示警告 15 * 警告:The static field MyClass.j should be accessed in a static way 16 */ 17 System.out.println("输出myClass1对象信息:"); 18 System.out.println("i = " + myClass1.i); 19 System.out.println("j = " + myClass1.j); 20 System.out.println("k = " + myClass1.k); 21 System.out.println("输出myClass2对象信息:"); 22 System.out.println("i = " + myClass2.i); 23 System.out.println("j = " + myClass2.j); 24 System.out.println("k = " + myClass2.k); 25 myClass1.setJ(); 26 /* 27 * 当我们改变myClass1对象的变量j的时候,myClass2对象的变量j也被改变 28 * 这更加体现了被static修饰的变量是直属于类的 29 */ 30 System.out.println("输出myClass1对象信息:"); 31 System.out.println("i = " + myClass1.i); 32 System.out.println("j = " + myClass1.j); 33 System.out.println("k = " + myClass1.k); 34 System.out.println("输出myClass2对象信息:"); 35 System.out.println("i = " + myClass2.i); 36 System.out.println("j = " + myClass2.j); 37 System.out.println("k = " + myClass2.k); 38 } 39 40 } 41 42 class MyClass{ 43 public final double i = Math.random(); 44 public static double j = Math.random(); 45 public double k = Math.random(); 46 47 /*这里会报错,并提示去掉i变量的final修饰 48 The final field MyClass.i cannot be assigned 49 public void setI(){ 50 i = 1.0; 51 }*/ 52 53 public void setJ(){ 54 j = 1.0; 55 } 56 }
输出结果:
输出myClass1对象信息: i = 0.8121042271613893 j = 0.7588637394635798 k = 0.7289219433108298 输出myClass2对象信息: i = 0.2939051021116923 j = 0.7588637394635798 k = 0.23782874599220116 输出myClass1对象信息: i = 0.8121042271613893 j = 1.0 k = 0.7289219433108298 输出myClass2对象信息: i = 0.2939051021116923 j = 1.0 k = 0.23782874599220116