一、接口中定义常量:
  由于java interface中声明的字段在编译时会自动加上static final的修饰符,即声明为常量。
  public interface Constants{
  String name = "111";
  }
  public class read{
  public static void main(String[] args){
  System.out.println("Class Constants's name = " + Constants.name);
  }
  }
  由于引用了一个static final 的字段,编译器已经将interface Constants中name的内容编译进了class read中,而不是对其引用。因此只有重新编译class read,interface Constants中name发生的变化才能在class read中反映。
  二、类中定义
  public class Constants{
  private static final String name = "111";
  public static String getName(){
  return name;
  }
  }
  public class read{
  public static void main(String[] args){
  System.out.println("Class Constants's name = " + Constants.getName());
  }
  }
  class read中是对Constants class的getName()方法的引用,当常量name的值改变时我们只需对class Constants中的常量做修改并重新编译,无需编译class read。
  我们可以使用jdk提供的反编译工具javap反编译read.class看个究竟,输入:javap -c read即可查看两种方式的不同。