知识大全 Java中Static、this、super、final用法

Posted

篇首语:壮心未与年俱老,死去犹能作鬼雄。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java中Static、this、super、final用法相关的知识,希望对你有一定的参考价值。

Java中Static、this、super、final用法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   一 Static    请先看下面这段程序     TER> public class Hello    public static void main(String[] args)    //( )  System out println( Hello world! );  //( )        看过这段程序 对于大多数学过Java的从来说 都不陌生 即使没有学过Java 而学过其它的高级语言 例如C 那你也应该能看懂这段代码的意思 它只是简单的输出 Hello world 一点别的用处都没有 然而 它却展示了static关键字的主要用法     在 处 我们定义了一个静态的方法名为main 这就意味着告诉Java编译器 我这个方法不需要创建一个此类的对象即可使用 你还得你是怎么运行这个程序吗?一般 我们都是在命令行下 打入如下的命令(加下划线为手动输入)     javac Hello java  java Hello  Hello world!    这就是你运行的过程 第一行用来编译Hello java这个文件 执行完后 如果你查看当前 会发现多了一个Hello class文件 那就是第一行产生的Java二进制字节码 第二行就是执行一个Java程序的最普遍做法     执行结果如你所料 在 中 你可能会想 为什么要这样才能输出 好 我们来分解一下这条语句 (如果没有安装Java文档 请到Sun的官方网站浏览J SE API)首先 System是位于java lang包中的一个核心类 如果你查看它的定义 你会发现有这样一行     public static final PrintStream out;    接着在进一步 点击PrintStream这个超链接 在METHOD页面 你会看到大量定义的方法 查找println 会有这样一行     public void println(String x)    好了 现在你应该明白为什么我们要那样调用了 out是System的一个静态变量 所以可以直接使用 而out所属的类有一个println方法      静态方法    通常 在一个类中定义一个方法为static 那就是说 无需本类的对象即可调用此方法 如下所示     class Simple    static void go()    System out println( Go );      public class Cal    public static void main(String[] args)    Simple go();        调用一个静态方法就是 类名 方法名 静态方法的使用很简单如上所示 一般来说 静态方法常常为应用程序中的其它类提供一些实用工具所用 在Java的类库中大量的静态方法正是出于此目的而定义的      静态变量    静态变量与静态方法类似 所有此类实例共享此静态变量 也就是说在类装载时 只分配一块存储空间 所有此类的对象都可以操控此块存储空间 当然对于final则另当别论了 看下面这段代码     class Value    static int c= ;  static void inc()    c++;      class Count    public static void prt(String s)    System out println(s);    public static void main(String[] args)    Value v v ;  v =new Value();  v =new Value();  prt( v c= +v c+  v c= +v c);  v inc();  prt( v c= +v c+  v c= +v c);        结果如下     v c=  v c=   v c=  v c=     由此可以证明它们共享一块存储区 static变量有点类似于C中的全局变量的概念 值得探讨的是静态变量的初始化问题 我们修改上面的程序     class Value  static int c= ;  Value()  c= ;    Value(int i)  c=i;    static void inc()  c++;      class Count  public static void prt(String s)  System out println(s);    Value v=new Value( );  static Value v v ;  static  prt( v c= +v c+   v c= +v c);  v =new Value( );  prt( v c= +v c+   v c= +v c);  v =new Value( );  prt( v c= +v c+   v c= +v c);      public static void main  (String[] args)    Count ct=new Count();  prt( ct c= +ct v c);  prt( v c= +v c+  v c= +v c);  v inc();  prt( v c= +v c+  v c= +v c);  prt( ct c= +ct v c);        运行结果如下     v c=  v c=   v c=  v c=   v c=  v c=   ct c=   v c=  v c=   v c=  v c=   ct c=     这个程序展示了静态初始化的各种特性 如果你初次接触Java 结果可能令你吃惊 可能会对static后加大括号感到困惑 首先要告诉你的是 static定义的变量会优先于任何其它非static变量 不论其出现的顺序如何     正如在程序中所表现的 虽然v出现在v 和v 的前面 但是结果却是v 和v 的初始化在v的前面 在static后面跟着一段代码 这是用来进行显式的静态变量初始化 这段代码只会初始化一次 且在类被第一次装载时     如果你能读懂并理解这段代码 会帮助你对static关键字的认识 在涉及到继承的时候 会先初始化父类的static变量 然后是子类的 依次类推 非静态变量不是本文的主题 在此不做详细讨论 请参考Think in Java中的讲解      静态类    通常一个普通类不允许声明为静态的 只有一个内部类才可以 这时这个声明为静态的内部类可以直接作为一个普通类来使用 而不需实例一个外部类 如下代码所示     public class StaticCls    public static void  main(String[] args)    OuterCls InnerCls  oi=new OuterCls InnerCls();      class OuterCls  public static class InnerCls  InnerCls()  System out println( InnerCls );          输出结果会如你所料     InnerCls    和普通类一样      二 this & super    在上一篇拙作中 我们讨论了static的种种用法 通过用static来定义方法或成员 为我们编程提供了某种便利 从某种程度上可以说它类似于C语言中的全局函数和全局变量 但是 并不是说有了这种便利 你便可以随处使用 如果那样的话 你便需要认真考虑一下自己是否在用面向对象的思想编程 自己的程序是否是面向对象的 好了 现在开始讨论this&super这两个关键字的意义和用法     在Java中 this通常指当前对象 super则指父类的 当你想要引用当前对象的某种东西 比如当前对象的某个方法 或当前对象的某个成员 你便可以利用this来实现这个目的 当然 this的另一个用途是调用当前对象的另一个构造函数 这些马上就要讨论     如果你想引用父类的某种东西 则非super莫属 由于this与super有如此相似的一些特性和与生俱来的某种关系 所以我们在这一块儿来讨论 希望能帮助你区分和掌握它们两个     在一般方法中    最普遍的情况就是 在你的方法中的某个形参名与当前对象的某个成员有相同的名字 这时为了不至于混淆 你便需要明确使用this关键字来指明你要使用某个成员 使用方法是 this 成员名 而不带this的那个便是形参     另外 还可以用 this 方法名 来引用当前对象的某个方法 但这时this就不是必须的了 你可以直接用方法名来访问那个方法 编译器会知道你要调用的是那一个 下面的代码演示了上面的用法     public class DemoThis    private String name;  private int age;  DemoThis(String name int age)    setName(name);  //你可以加上this来调用方法   像这样 this setName(name);  但这并不是必须的  setAge(age);  this print();    public void setName(String name)    this name=name;  //此处必须指明你要引用成员变量    public void setAge(int age)    this age=age;    public void print()    System out println  ( Name= +name+ Age= +age);  //在此行中并不需要用this   因为没有会导致混淆的东西    public static void main(String[] args)    DemoThis dt=new DemoThis( Kevin );        这段代码很简单 不用解释你也应该能看明白 在构造函数中你看到用this print() 你完全可以用print()来代替它 两者效果一样 下面我们修改这个程序 来演示super的用法     class Person    public int c;  private String name;  private int age;  protected void setName  (String name)    this name=name;    protected void setAge(int age)    this age=age;    protected void print()    System out println  ( Name= +name+ Age= +age);      public class De cha138/Article/program/Java/JSP/201311/19352

相关参考

知识大全 Java 中 this 的使用

Java中this的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   this是指当前对象自

知识大全 浅谈 Java 中 this 的使用

浅谈Java中this的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   this是指当前对

知识大全 Java中static用法简谈

Java中static用法简谈  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  请先看下面这段程序

知识大全 Java中的this关键字

Java中的this关键字  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    如果有两个同类型的

知识大全 Java 封装之static关键字

Java封装之static关键字  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  逐步深入的学习都

知识大全 this关键字

  如果有两个同类型的对象分别叫作a和b那么您也许不知道如何为这两个对象同时调用一个f()方法  classBananavoidf(inti)/**/  Bananaa=newBanana()b=ne

知识大全 java封闭之内部类

  java重要的三大特性之封装到今天已经总结完了当然还有一些比较重要的概念没有总结比如staticfinally关键字this关键字构造函数的特性因为考虑到这些概念在继承多态中还会有体现所以等到另外

知识大全 java应用程序put操作

  创建表  put操作  publicclassmyHbase  privatestaticConfigurationconf=null;  static  conf=HBaseConfigurat

知识大全 浅析php变量修饰符static的使用

  静态变量仅在局部函数域中存在但当程序执行离开此作用域时其值并不丢失看看下面的例子:复制代码代码如下:functiontest()static$a=;$a++;echo$a;  test();//t

知识大全 通过一段代码简单说js中的this的使用

本文通过一段代码与大家简单说说js中this的使用及相关问题感兴趣的朋友可以参考下哈希望对大家有所帮助   今天有朋友说遇到如下代码让我帮解释原因复制代码代码如下:varname="TheW