zoukankan      html  css  js  c++  java
  • java中static,super,final关键字辨析

    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。

    -------------------------------------------------------------------------------------------------

    return,continue,break的比较区别:

    return:程序走到return就跳出方法,被套多少层都是

    continue:满足条件终止本次循环,之后接着循环。

    break:满足条件,终止循环体

  • 相关阅读:
    一步步学习MDL[3]
    一步步学习MDL[0]
    .net下ckeditor+ckfinder+SyntaxHighlighter三集成demo
    页面跳转如何进入一个嵌套在Iframe中的页面中
    解决iframe,div在移动设备上实现局部刷新的方法
    SQL三种东西永远不要放到数据库里
    悟透JavaScript
    Js 常用日期汇总
    js_兼容IE和FF
    SQL中字符串类型转换为时间类型
  • 原文地址:https://www.cnblogs.com/kaiwen/p/6637649.html
Copyright © 2011-2022 走看看