码迷,mamicode.com
首页 > 编程语言 > 详细

java中static,super,final关键字辨析

时间:2017-03-29 01:10:02      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:abs   自动   初始化   关键字   原因   注意   java   方法   覆盖   

1:static关键字

利:1)对对象的共享数据提供单独的空间存储。

     2)修饰的方法可以直接被类名调用

弊:1)生命周期长。

     2)访问出现限制(只能访问静态)

它可以有静态方法,静态类,静态变量

2:super关键字

1)使用super关键字调用父类的成员变量和成员方法。

      格式1:super.成员变量

      格式2:super.成员方法([参数1,参数2...])

2)使用super关键字调用父类的构造方法

      格式1:super([参数1,参数2...])

      总结:this代表当前对象(可以输出或地址)。super代表父类(不可以输出地址)

      *它一般和this关键字比较:1。可以表示构造函数传递。this(a,b)表示调用另外一个构造函数。这里面的this就是一个特殊语法,不是变量,没有什么类型。2。可以在一个类的非static成员内部使用,表示当前这个对象。此时,this就是一个final的普通变量,它有静态类型,就是这个类C本身;它有动态类型,就是当前这个对象的类型。你可以对它调用成员函数,把它传递给别的函数,等等等等。只要一个C类型的final变量可以出现的地方,它就可以出现。

3:final关键字
有一下特性:
1)final修饰的类不能被继承
2)final修饰的方法不能被子类重写
3)
final修饰的变量(成员变量和局部变量)是常量,只能赋值一次。
*final,static,priavte不能和abstract共用
-----------------------这段摘自网络-------------------------------------
      final类不能被继承,没有子类,final类中的方法默认是final的。
      final方法不能被子类的方法覆盖,但可以被继承。
      final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
      final不能用于修饰构造方法。

      注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。

1,final类
    final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。

2、final方法
      如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
      使用final方法的原因有二:
      第一、把方法锁定,防止任何继承类修改它的意义和实现。
      第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。

public
class Test1 { public static void main(String[] args) { // TODO 自动生成方法存根 } public void f1() { System.out.println("f1"); } //无法被子类覆盖的方法 public final void f2() { System.out.println("f2"); } public void f3() { System.out.println("f3"); } private void f4() { System.out.println("f4"); } } public class Test2 extends Test1 { public void f1(){ System.out.println("Test1父类方法f1被覆盖!"); } public static void main(String[] args) { Test2 t=new Test2(); t.f1(); t.f2(); //调用从父类继承过来的final方法 t.f3(); //调用从父类继承过来的方法 //t.f4(); //调用失败,无法从父类继承获得 } }

 

3、final变量(常量)
      用final修饰的成员变量表示常量,值一旦给定就无法改变!
      final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。
      从下面的例子中可以看出,一旦给final变量初值后,值就不能再改变了。
      另外,final变量定义的时候,可以先声明,而不给初值,这中变量也称为final空白,无论什么情况,编译器都确保空白final在使用之前必须被初始化。但是,final空白在final关键字final的使用上提供了更大的灵活性,为此,一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。
-----------------
这段摘自网络-------------------------------------

4.static和final一块用表示什么 
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”

    对于变量,表示一旦给值就不可修改,并且通过类名可以访问 
    对于方法,表示不可覆盖,并且可以通过类名直接访问。

static方法 
   静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法 (就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!
   因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。

java中static,super,final关键字辨析

标签:abs   自动   初始化   关键字   原因   注意   java   方法   覆盖   

原文地址:http://www.cnblogs.com/kaiwen/p/6637649.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!