static方法(请问java语言中的static的用法)
本文目录
请问java语言中的static的用法
1)static方法 static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。2)static变量 static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。3)static代码块 static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
static方法和非static方法的区别
static方法是静态方法,没有static的是非静态方法。非静态方法访问静态或者非静态成员的方式是一样的,可以直接访问。静态(static)方法 可以直接类名。方法名调用 静态方法必须创建对象才能访问非静态成员。静态方法可以不创建对象,直接访问静态成员,也可以通过创建对象来访问。
java中static的用法
1.静态方法通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法声明为static的方法有以下几条限制:·它们仅能调用其他的static 方法。·它们只能访问static数据。·它们不能以任何方式引用this 或super。class Simple {staticvoid go() { System.out.println(“Welcome“); }}publicclass Cal {publicstaticvoid main(String args) { Simple.go(); }} 调用一个静态方法就是“类名.方法名”,静态方法的使用很简单如上所示。一般来说,静态方法常常为应用程序中的其它类提供一些实用工具所用,在Java的类库中大量的静态方法正是出于此目的而定义的。2.静态变量声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间,当然对于final则另当别论了class Value {staticintc = 0;staticvoid inc() {c++; }}publicclass Count2 {publicstaticvoid prt(String s) { System.out.print(s); }publicstaticvoid 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.c=“ + v2.c); }}结果为:v1.c=0 v2.c=0 v1.c=1 v2.c=1由此可以证明它们共享一块存储区。static变量有点类似于C中的全局变量的概念。值得探讨的是静态变量的初始化问题。如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static 块仅在该类被加载时执行一次。下面的例子显示的类有一个static方法,一些static变量,以及一个static 初始化块:class Value3 {staticintc = 0; Value3() {c = 15; } Value3(int i) {c = i; }staticvoid inc() {c++; }}publicclass Count {publicstaticvoid prt(String s) { System.out.println(s); } Value3 v = new Value3(10);static Value3 v1, v2;static {//此即为static块prt(“v1.c=“ + v1.c + “ v2.c=“ + v2.c);v1 = new Value3(27);prt(“v1.c=“ + v1.c + “ v2.c=“ + v2.c);v2 = new Value3(15);prt(“v1.c=“ + v1.c + “ v2.c=“ + v2.c); }publicstaticvoid main(String args) { Count ct = new Count();prt(“ct.c=“ + ct.v.c);prt(“v1.c=“ + v1.c + “ v2.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=11 这个程序展示了静态初始化的各种特性。如果你初次接触Java,结果可能令你吃惊。可能会对static后加大括号感到困惑。首先要告诉你的是,static定义的变量会优先于任何其它非static变量,不论其出现的顺序如何。正如在程序中所表现的,虽然v出现在v1和v2的前面,但是结果却是v1和v2的初始化在v的前面。在static{后面跟着一段代码,这是用来进行显式的静态变量初始化,这段代码只会初始化一次,且在类被第一次装载时。如果你能读懂并理解这段代码,会帮助你对static关键字的认识。在涉及到继承的时候,会先初始化父类的static变量,然后是子类的,依次类推。3.静态类通常一个普通类不允许声明为静态的,只有一个内部类才可以。这时这个声明为静态的内部类可以直接作为一个普通类来使用,而不需实例一个外部类。publicclass StaticCls {publicstaticvoid main(String args) {OuterCls.InnerCls oi = newOuterCls.InnerCls(); }}classOuterCls {publicstaticclass InnerCls { InnerCls() { System.out.println(“InnerCls“); } }} 结果为:InnerCls
如何用static
static三种用法:
用于变量前,表示每次重新使用该变量所在方法、类或自定义类时,变量的值为程序这次运行最后一次为变量赋值时的值
在方法(函数)前用 static修饰,表示此方法为所在类或所在自定义类所有,而不是这个类的实例所有
用于class 前,说明此类型无法新建实例,简单点说这个类型的方法全是静态方法,这个类里的非静态方法是不能使用的
Singleton模式的实现基于两个要点:
不直接用类的构造函数,而另外提供一个Public的静态方法来构造类的实例。通常这个方法取名为Instance。Public保证了它的全局可见性,静态方法保证了不会创建出多余的实例。
将类的构造函数设为Private,即将构造函数“隐藏“起来,任何企图使用构造函数创建实例的方法都将报错。这样就阻止了开发人员绕过上面的Instance方法直接创建类的实例。
希望对你有帮助
更多文章:

windows7激活码(Windows7激活码有吗求一个可以用的谢谢)
2025年3月7日 15:10

mobilephone什么意思中文(cell phone 和mobile phone 意思上有什么区别)
2025年3月24日 21:40

个人博客选择wordpress还是typecho好呢?如何让emlog支持代码高亮
2025年2月9日 17:40

grammar focus(初二英语第七单元grammar focus的翻译)
2025年3月28日 15:10

ignore的变形(ignore,neglect和overlook的区别)
2025年2月27日 10:50

layout使用教程(SketchUp中的LayOut和Style Builder究竟有什么用)
2025年3月1日 11:30

suspecting(suspecting与suspicious的区别)
2025年2月18日 13:50

网页制作教程视频自学(怎么自学DW8网页制作哪里的的教学视频好用需要看PPT版的DW教程吗)
2025年3月2日 23:10

浮点型和双精度型区别(什么叫单精度浮点型什么叫双精度浮点型)
2025年4月10日 13:50

pushstate是什么意思(html5history.pushstate有什么用)
2025年3月19日 05:40

current password(开机出现entercurrentpassword怎么弄)
2025年2月12日 03:00