java中 static作用分析和总结.docx

上传人:太** 文档编号:57607977 上传时间:2022-11-05 格式:DOCX 页数:4 大小:14.21KB
返回 下载 相关 举报
java中 static作用分析和总结.docx_第1页
第1页 / 共4页
java中 static作用分析和总结.docx_第2页
第2页 / 共4页
点击查看更多>>
资源描述

《java中 static作用分析和总结.docx》由会员分享,可在线阅读,更多相关《java中 static作用分析和总结.docx(4页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Java中static的作用请先看下面这段程序:public class Hellopublic static void main(String args)( /(1)System. out. printin (Hello, world !z/);/ (2) 看过这段程序,对于大多数学过Java的从来说,都不生疏。即使没有学过 Java,而学过其它的高级语言,例如C,那你也应该能看懂这段代码的意思。它只是简单的输出 “Hello, world”,一点别的用处都没有,然而,它却展示了 static要害字的主要用法。在1处,我们定义了一个静态的方法名为main,这就意味着告诉Java编译 器,我这

2、个方法不需要创立一个此类的对象即可使用。你还得你是怎么运行这个程 序吗? 一般,我们都是在命令行下,打入如下的命令(加下划线为手动输入):javac Hello, javajava HelloHello, world!这就是你运行的过程,第一行用来编译Hello. java这个文件,执行完后, 假如你查看当前,会发现多了一个Hello, class文件,那就是第一行产生的Java 二进制字节码。第二行就是执行一个Java程序的最普遍做法。执行结果如你所 料。在2中,你可能会想,为什么要这样才能输出。好,我们来分解一下这条语 句。(假如没有安装Java文档,请到Sun的官方网站浏览J2SE AP

3、I)首先, System是位于java, lang包中的一个核心类,假如你查看它的定义,你会发现有 这样一行:public static final PrintStream out;接着在进一步,点击 PrintStream这个超链接,在METHOD页面,你会看到大量定义的方法,查找 printin,会有这样一行:public void printin (String x)。好了,现在你应该明白为什么我们要那 样调用了,out是System的一个静态变量,所以可以直接使用,而out所属的 类有一个printin方法。静态方法通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即

4、 可调用此方法。如下所示:classSimple static void go() System. out. printin (Go); )public class Calpublic static void main(StringEargs) Simple. go();)调用一个静态方法就是“类名方法名”,静态方法的使用很简单如上所示。 一般来说,静态方法经常为应用程序中的其它类提供一些实用工具所用,在Java 的类库中大量的静态方法正是出于此目的而定义的。静态变量静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装 载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空

5、间,当然对于 final那么另当别论了。看下面这段代码:classValue static int c=0; static void inc () c+;)class Count(public static void prt(Strings) System, out. println(s);)public static void main(Stringargs) Value vl, v2;vl=new ValueO ; v2=new ValueO ; prt (,zvl. c=+vl. c+v2. c=+v2. c);vl. inc ();prt (vl. c=+vl. c+ v2. c=+v

6、2. c);)结果如下:vl. c=0 v2. c=0vl. c=l v2. c=l由此可以证实它们共享一块存储区。static变量有点类似于C中的全局变 量的概念。值得探讨的是静态变量的初始化问题。我们修改上面的程序:classValue( static int c=0;ValueO c=15;Value(inti) c=i;static void inc () c+;class Count(public static void prt(Strings) System. out. println(s);)Value v=new Value(10);static Value vl,v2;sta

7、tic prt(vl. c=+vl.c+v2. c=+v2. c);vl=ncw Value (27);prt (vl. c=+vl. c+ v2. c=+v2. c);v2=new Value(15);prt (vl. c=+vl. c+ v2. c=,+v2. c);public static void main(Stringargs) Count ct=new Count();prt (ct. c=+ct. v. c);prt (vl. c=+vl. c+ v2. c=,+v2. c);vl. inc();prt (vl. c=+vl. c+ v2. c=+v2. c);prt (z/c

8、t. c=+ct. v. c);)运行结果如下:vl. c=0 v2. c=0vl. c=27 v2. c=27vl. c=15 v2. c=15ct. c=10vl. c=10 v2. c=10vl. c=ll v2. c=llCt. c=ll这个程序展示了静态初始化的各种特性。假如你初次接触Java,结果可能 令你吃惊。可能会对static后加大括号感到困惑。首先要告诉你的是,static 定义的变量会优先于任何其它非static变量,不管其出现的顺序如何。正如在 程序中所表现的,虽然v出现在vl和v2的前面,但是结果却是vl和v2的初 始化在v的前面。在static后面跟着一段代码,这是

9、用来进行显式的静态变量 初始化,这段代码只会初始化一次,且在类被第一次装载时。假如你能读懂并 理解这段代码,会帮助你对static要害字的熟悉。在涉及到继续的时候,会先 初始化父类的static变量,然后是子类的,依次类推。非静态变量不是本文的 主题,在此不做具体讨论,请参考Think in Java中的讲解。静态类通常一个普通类不容许声明为静态的,只有一个内部类才可以。这时这个声 明为静态的内部类可以直接作为一个普通类来使用,而不需实例一个外部类。如 下代码所示:public class StaticCls(public static void main(Stringargs) OuterC

10、ls. TnnerCls oi=newOuterCls. InnerClsO ;)class OuterCls public static classInnerCls InnerClsO ( System. out. p rintln(,zTnnerClsz,);)输出结果会如你所料:InnerCls阅读提示:如果一个成员被声明为static,它就能够在它的类的任何对象创立 之前被访问,而不必引用任何对象。你可以将方法和变量都声明为statico static成员的最常见的例子是main()。因为在程序开始执行时必须调用 mainO ,所以它被声明为static。有时你希望定义一个类成员,使它

11、的使用完全独立于该类的任何对象。通常情况 下,类成员必须通过它的类的对象访问,但是可以创立这样一个成员,它能够被它 自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的) 就能创立这样的成员。如果一个成员被声明为static,它就能够在它的类的任 何对象创立之前被访问,而不必引用任何对象。你可以将方法和变量都声明为 statico static成员的最常见的例子是main( ) o因为在程序开始执行时必须 调用mainO ,所以它被声明为statico声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static 变量的拷贝,而是该类所有的实例变量

12、共用同一个static变量。声明为static 的方法有以下几条限制:它们仅能调用其他的static方法。它们只能访问static数据。它们不能以任何方式引用this或superpackage com. birdme;public class UseStatic /* param args*/private static int s;public UseStatic() System. out. printin (,zCreate new Class);)static System, out. printin (static block initialized); public int get

13、Static() return s;)public void setStatic(inti) s=i;public static void main(StringEJ args) / TODO Auto-generated method stub UseStatic classA= new UseStatic(); UscStatic classB= new UseStatic();System. out. printin(,zclassA. s=+classA. getStatic () + ;classB. s=+classB. getStatic ();classA. setStatic

14、(10);System. out. printin(,zclassA. s=+classA. getStatic () +” ;classB. s=+classB. getStatic ();classB. setStatic(classB. getStatic() +10);System. out. printin(classA. s=+classA. getStatic() +”;classB. s=,+classB. getStatic();)下面是该程序的输出:static block initialized reate new Classreate new ClassclassA. s=0;classB. s=0classA. s=10;classB. s=10classA. s=20;classB.s=20从结果可以看出类中static块程序是在类被装载的时候开始执行。而不是在创 建对象的时候执行。

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

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁