疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

Java关键字 final和static


 

   

  一、final关键字

  1.final类是不能被继承的,所以也就没有子类了。

  2.final 方法 顺便复习下重载和重写

  2.1 重载例子:

  public class TestFinalClass {

  public static void main(String args[]){

  }

  public void add(int i){

  System.out.print("parents..add...");

  }

  }

  class TestChildrenClass extends TestFinalClass{

  public void add(int i,int j){

  System.out.print("children...add");

  System.out.print("33333");

  }

  }

  2.2 重写 override

  public class TestFinalClass {

  // private String name;

  public static void main(String args[]){

  new TestChildrenClass().add(0);

  }

  public void add(int i){

  System.out.print("parents..add...");

  }

  }

  class TestChildrenClass extends TestFinalClass{

  public void add(int i){

  System.out.print("children...add");

  System.out.print("33333");

  }

  }

  2.3 如果父类不想子类重写它的某个方法就可以用final来定义该方法,例子如下

  public class TestFinalClass {

  // private String name;

  public static void main(String args[]){

  new TestChildrenClass().add(0);

  }

  public final void add(int i){

  System.out.print("parents..add...");

  }

  }

  class TestChildrenClass extends TestFinalClass{

  public void add(int i){//这样写会报错,无法重写

  System.out.print("children...add");

  System.out.print("33333");

  }

  }

  除了上面这个用处,还有个用处就是高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。

  3.final变量

  public class TestFinalClass {

  public final static String s = ".......final s";

  public final int E =1; //final成员变量必须付初值

  // private String name;

  public static void main(String args[]){

  }

  public static void add(int i){

  final String m; //final非成员变量可以不用初值

  m = "...m"; // 给予初值

  m = "..sdjf";//出错 不能再给予值

  }

  }

  4.final参数

  public class TestFinalClass {

  public static void main(String args[]){

  }

  public static void add(final int i){

  System.out.print(""+i); // 只能使用该参数

  i = 0;//不能给予值

  }

  }

  二、static 关键字

  1.static方法

  public class TestFinalClass {

  public static void main(String args[]){

  TestChildrenClass.add(0); //可以在类创建之前引用这个static方法

  }

  }

  class TestChildrenClass {

  public static void add(int i){//然而是不能通过类的实例来引用的

  System.out.print("children...add");

  }

  }

  2.static 成员变量

  public class TestFinalClass {

  public static void main(String args[]){

  String name = TestChildrenClass.name;//静态成员

  }

  }

  class TestChildrenClass {

  public static String name = "user";//不能通过类的实例来引用的,当用private修饰时就不可以用了

  }

  3.当static与final一起使用来修饰成员变量和成员方法,可简单理解为“全局常量”!

  3.1 对于变量,表示一旦给值就不可修改,并且通过类名可以访问。

  3.2 对于方法,表示不可覆盖,并且可以通过类名直接访问。