java 小问题 中的static是什么作用

 我来答
漆海冬X4
2011-09-25 · TA获得超过371个赞
知道小有建树答主
回答量:579
采纳率:0%
帮助的人:249万
展开全部

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

声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制:
·
它们仅能调用其他的static 方法。
·
它们只能访问static数据。
·
它们不能以任何方式引用this 或super(关键字super 与继承有关,在下一章中描述)。
如果你需要通过计算来初始化你的static变量,你可以声明一个static块,Static 块仅在该类被加载时执行一次。下面的例子显示的类有一个static方法,一些static变量,以及一个static 初始化块:
// Demonstrate static variables,methods,and blocks.

class UseStatic {
static int a = 3;
static int b;

static void meth(int x) {
System.out.println("x = " + x);
System.out.println("a = " + a);
System.out.println("b = " + b);

}

static {
System.out.println("Static block initialized.");
b = a * 4;

}

public static void main(String args[]) {
meth(42);
}
}

一旦UseStatic 类被装载,所有的static语句被运行。首先,a被设置为3,接着static 块执行(打印一条消息),最后,b被初始化为a*4 或12。然后调用main(),main() 调用meth() ,把值42传递给x。3个println ( ) 语句引用两个static变量a和b,以及局部变量x 。

注意:在一个static 方法中引用任何实例变量都是非法的。

下面是该程序的输出:

Static block initialized.
x = 42
a = 3
b = 12
在定义它们的类的外面,static 方法和变量能独立于任何对象而被使用。这样,你只要在类的名字后面加点号运算符即可。例如,如果你希望从类外面调用一个static方法,你可以使用下面通用的格式:

classname.method( )

这里,classname 是类的名字,在该类中定义static方法。可以看到,这种格式与通过对象引用变量调用非static方法的格式类似。一个static变量可以以同样的格式来访问——类名加点号运算符。这就是Java 如何实现全局功能和全局变量的一个控制版本。

下面是一个例子。在main() 中,static方法callme() 和static 变量b在它们的类之外被访问。

class StaticDemo {
static int a = 42;
static int b = 99;
static void callme() {

System.out.println("a = " + a);
}
}

class StaticByName {

public static void main(String args[]) {
StaticDemo.callme();
System.out.println("b = " + StaticDemo.b);

}
}

下面是该程序的输出:

a = 42
b = 99参考资料:还有什么问题就到留言.以后相互学习
hyt0114
2011-09-24 · TA获得超过276个赞
知道答主
回答量:207
采纳率:0%
帮助的人:194万
展开全部
静态变量,全局只有一份内存,一旦改变则永久改变
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友547683c2f
2011-09-24 · TA获得超过191个赞
知道小有建树答主
回答量:158
采纳率:0%
帮助的人:121万
展开全部
引用一下threepi 的回答

1、static 关键字:可以用于修饰属性,也可以用于修饰方法,还可以用于修饰类。
2、static 修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量;一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量的值也会随之发生变化。如果一个成员变量是static 的,那么我们可以通过 类名 .成员变量名 成员变量名 成员变量名 的方式来使用它 的方式来使用它 (推荐使用这种方式) 。
3、static修饰方法: static 修饰的方法叫做静态。 对于静态方法来说,可以 使用 类名 .方法名的方式来访问。
4、静态方法只能继承,不重写(Override)
5、不能在静态方法中访问非静态成员变量;
6、不能在静态方法中使用this关键字。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
清心又谦恭丶布丁9
2011-09-24 · TA获得超过6604个赞
知道小有建树答主
回答量:1247
采纳率:100%
帮助的人:1851万
展开全部
楼主我先上例子。你运算一下,有个大概的感观,我再来讲

public class Person {
static int[] arr=new int[3];
public static void main(String[] args){
Person per1=new Person();
Person per2=new Person();
Person per3=new Person();
System.out.println("----改变之前-----");
System.out.print("per1-->");
per1.show();
System.out.print("per2-->");
per2.show();
System.out.print("per3-->");
per3.show();
//现在我改变它的值
Person.arr[2]=10;//这种方法是建议的
per1.arr[0]=1;//一般不用这种方法
System.out.println("----改变之后-----");
System.out.print("per1-->");
per1.show();
System.out.print("per2-->");
per2.show();
System.out.print("per3-->");
per3.show();

}
//为了方便,封装一个方法,来解释
public void show(){
for(int i=0;i<arr.length;i++){
System.out.print(arr[i] + "\t");
}
System.out.println("");
}
}

如果是不加static的arr[]我们应该很好理解吧。就是per1如果改变的话不会影响到per2的值。
加上static之后,所有这个类的对象共同指向同一个属性。
比如我现在这个类里多一个属性。static String place ="A城",假设我有五万个人。那么如果有一天,我A城要改名字成B城的话,如果你改一个对象的话,其他对象根本无法改变。所以需要用static,只要改一个,其他这个类的所有对象也会跟着改变。

从内存的原理来说。static 只开辟了一个空间。所有这个类的对象的引用共同指向它。
static还有很多地方可以用到,比如单例,比如统计一共产生多少对象。比如给对象按自增编号命名等等。

希望楼主根据我的例子。然后写一个非static 的进行对比。
希望对楼主有所帮助
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式