Java中static、this、super、final用途,用法及实例

上传人:woxinch****an2018 文档编号:39309051 上传时间:2018-05-14 格式:DOCX 页数:11 大小:29.22KB
返回 下载 相关 举报
Java中static、this、super、final用途,用法及实例_第1页
第1页 / 共11页
Java中static、this、super、final用途,用法及实例_第2页
第2页 / 共11页
Java中static、this、super、final用途,用法及实例_第3页
第3页 / 共11页
Java中static、this、super、final用途,用法及实例_第4页
第4页 / 共11页
Java中static、this、super、final用途,用法及实例_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《Java中static、this、super、final用途,用法及实例》由会员分享,可在线阅读,更多相关《Java中static、this、super、final用途,用法及实例(11页珍藏版)》请在金锄头文库上搜索。

1、本文具体讲解了本文具体讲解了 JavaJava 中中 staticstatic、thisthis、supersuper、finalfinal 用法,具体内容有用法,具体内容有 staticstatic 的静态方的静态方 法、静态变量、静态类;法、静态变量、静态类;thisthis /(2)看过这段程序,对于大多数学过看过这段程序,对于大多数学过 JavaJava 的从来说,都不陌生。即使没有学过的从来说,都不陌生。即使没有学过 JavaJava, 而学过其它的高级语言,例如而学过其它的高级语言,例如 C C,那你也应该能看懂这段代码的意思。它只是简单的,那你也应该能看懂这段代码的意思。它只是简

2、单的 输出输出“Hello,world”“Hello,world”,一点别的用处都没有,然而,它却展示了,一点别的用处都没有,然而,它却展示了 staticstatic 关键字的关键字的 主要用法。主要用法。 在在 1 1 处,我们定义了一个静态的方法名为处,我们定义了一个静态的方法名为 mainmain,这就意味着告诉,这就意味着告诉 JavaJava 编译器,我这编译器,我这 个方法不需要创建一个此类的对象即可使用。你还得你是怎么运行这个程序吗?一个方法不需要创建一个此类的对象即可使用。你还得你是怎么运行这个程序吗?一 般,我们都是在命令行下,打入如下的命令般,我们都是在命令行下,打入如下

3、的命令( (加下划线为手动输入加下划线为手动输入) ):javac Hello.javajava HelloHello,world!这就是你运行的过程,第一行用来编译这就是你运行的过程,第一行用来编译 Hello.javaHello.java 这个文件,执行完后,如果你查这个文件,执行完后,如果你查 看当前,会发现多了一个看当前,会发现多了一个 Hello.classHello.class 文件,那就是第一行产生的文件,那就是第一行产生的 JavaJava 二进制字节二进制字节 码。第二行就是执行一个码。第二行就是执行一个 JavaJava 程序的最普遍做法。执行结果如你所料。在程序的最普遍做

4、法。执行结果如你所料。在 2 2 中,你中,你 可能会想,为什么要这样才能输出。好,我们来分解一下这条语句。(如果没有安可能会想,为什么要这样才能输出。好,我们来分解一下这条语句。(如果没有安 装装 JavaJava 文档,请到文档,请到 SunSun 的官方网站浏览的官方网站浏览 J2SEJ2SE APIAPI)首先,)首先,SystemSystem 是位于是位于 java.langjava.lang 包中的一个核心类,如果你查看它的定义,你会发现有这样一行:包中的一个核心类,如果你查看它的定义,你会发现有这样一行:publicpublic staticstatic finalfinal P

5、rintStreamPrintStream out;out;接着在进一步,点击接着在进一步,点击 PrintStreamPrintStream 这个超链接,在这个超链接,在 METHODMETHOD 页面,你会看到大量定义的方法,查找页面,你会看到大量定义的方法,查找 printlnprintln,会有这样一行:,会有这样一行:public void println(String x)好了,现在你应该明白为什么我们要那样调用了,好了,现在你应该明白为什么我们要那样调用了,outout 是是 SystemSystem 的一个静态变量,的一个静态变量, 所以可以直接使用,而所以可以直接使用,而 o

6、utout 所属的类有一个所属的类有一个 printlnprintln 方法。方法。 静态方法静态方法 通常,在一个类中定义一个方法为通常,在一个类中定义一个方法为 staticstatic,那就是说,无需本类的对象即可调用此,那就是说,无需本类的对象即可调用此 方法。如下所示:方法。如下所示:class Simplestatic void go()System.out.println(“Go.“);public class Calpublic static void main(String args)Simple.go();调用一个静态方法就是调用一个静态方法就是“类名类名. .方法名方法名

7、”,”,静态方法的使用很简单如上所示。一般来静态方法的使用很简单如上所示。一般来 说,静态方法常常为应用程序中的其它类提供一些实用工具所用,在说,静态方法常常为应用程序中的其它类提供一些实用工具所用,在 JavaJava 的类库中的类库中 大量的静态方法正是出于此目的而定义的。大量的静态方法正是出于此目的而定义的。 静态变量静态变量 静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载时,静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载时, 只分配一块存储空间,所有此类的对象都可以操控此块存储空间,当然对于只分配一块存储空间,所有此类的对象都可以操控此块存储

8、空间,当然对于 finalfinal 则另当别论了。看下面这段代码:则另当别论了。看下面这段代码:class Valuestatic int c=0;static void inc()c+;class Countpublic static void prt(String s)System.out.println(s);public static void main(String args)Value v1,v2;v1=new Value();v2=new Value();prt(“v1.c=“+v1.c+“ v2.c=“+v2.c);v1.inc();prt(“v1.c=“+v1.c+“ v2

9、.c=“+v2.c); 结果如下:结果如下:v1.c=0 v2.c=0v1.c=1 v2.c=1由此可以证明它们共享一块存储区。由此可以证明它们共享一块存储区。staticstatic 变量有点类似于变量有点类似于 C C 中的全局变量的概念。中的全局变量的概念。 值得探讨的是静态变量的初始化问题。我们修改上面的程序:值得探讨的是静态变量的初始化问题。我们修改上面的程序:class Valuestatic int c=0;Value()c=15;Value(int i)c=i;static void inc()c+;class Countpublic static void prt(Strin

10、g s)System.out.println(s);Value v=new Value(10);static Value v1,v2;Staticprt(“v1.c=“+v1.c+“ v2.c=“+v2.c);v1=new Value(27);prt(“v1.c=“+v1.c+“ v2.c=“+v2.c);v2=new Value(15);prt(“v1.c=“+v1.c+“ v2.c=“+v2.c);public static void main(String args)Count ct=new Count();prt(“ct.c=“+ct.v.c);prt(“v1.c=“+v1.c+“ v

11、2.c=“+v2.c);v1.inc();prt(“v1.c=“+v1.c+“ v2.c=“+v2.c);prt(“ct.c=“+ct.v.c);运行结果如下:运行结果如下:v1.c=0 v2.c=0v1.c=27 v2.c=27v1.c=15 v2.c=15ct.c=10v1.c=10 v2.c=10v1.c=11 v2.c=11ct.c=111 12 2 3 3 4 4 下一页下一页Pasted from 这个程序展示了静态初始化的各种特性。如果你初次接触这个程序展示了静态初始化的各种特性。如果你初次接触 JavaJava,结果可能令你吃惊。可能,结果可能令你吃惊。可能 会对会对 stat

12、icstatic 后加大括号感到困惑。首先要告诉你的是,后加大括号感到困惑。首先要告诉你的是,staticstatic 定义的变量会优先于任何定义的变量会优先于任何 其它非其它非 staticstatic 变量,不论其出现的顺序如何。正如在程序中所表现的,虽然变量,不论其出现的顺序如何。正如在程序中所表现的,虽然 v v 出现在出现在 v1v1 和和 v2v2 的前面,但是结果却是的前面,但是结果却是 v1v1 和和 v2v2 的初始化在的初始化在 v v 的前面。在的前面。在 staticstatic后面跟着一段代码,后面跟着一段代码, 这是用来进行显式的静态变量初始化,这段代码只会初始化一

13、次,且在类被第一次装载时。这是用来进行显式的静态变量初始化,这段代码只会初始化一次,且在类被第一次装载时。 如果你能读懂并理解这段代码,会帮助你对如果你能读懂并理解这段代码,会帮助你对 staticstatic 关键字的认识。在涉及到继承的时候,关键字的认识。在涉及到继承的时候, 会先初始化父类的会先初始化父类的 staticstatic 变量,然后是子类的,依次类推。非静态变量不是本文的主题,变量,然后是子类的,依次类推。非静态变量不是本文的主题, 在此不做详细讨论,请参考在此不做详细讨论,请参考 ThinkThink inin JavaJava 中的讲解。中的讲解。 静态类静态类 通常一个

14、普通类不允许声明为静态的,只有一个内部类才可以。这时这个声明为静态的内通常一个普通类不允许声明为静态的,只有一个内部类才可以。这时这个声明为静态的内 部类可以直接作为一个普通类来使用,而不需实例一个外部类。如下代码所示:部类可以直接作为一个普通类来使用,而不需实例一个外部类。如下代码所示:public class StaticClspublic static void main(String args)OuterCls.InnerCls oi=new OuterCls.InnerCls();class OuterClspublic static class InnerClsInnerCls()

15、System.out.println(“InnerCls“);输出结果会如你所料。输出结果会如你所料。 InnerClsInnerCls 和普通类一样。内部类的其它用法请参阅和普通类一样。内部类的其它用法请参阅 ThinkThink inin JavaJava 中的相关章节,此处不作详解。中的相关章节,此处不作详解。 二、二、thisthis private int age;DemoThis(String name,int age)setName(name); /你可以加上你可以加上 this 来调用方法,像这样:来调用方法,像这样:this.setName(name);但这并不是必须的但这并

16、不是必须的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“,“22“);这段代码很简单,不用解释你也应该能看明白。在构造函数中你看到用这段代码很简单,不用解释你也应该能看明白。在构造函数

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号