当前位置:生活全书馆 >

综合知识

> 静态为什么方法里定义静态变量

静态为什么方法里定义静态变量

静态为什么方法里定义静态变量

1、静态方法要在类被加载的时候就能够被调用,而在静态方法中定义静态变量可以使得该变量在类被加载时只初始化一次,而不是每次调用静态方法时重新初始化一次,这样可以提高代码的执行效率。

2、在静态方法中定义的静态变量可以被同一类中的所有实例对象所共享,这样在静态方法中定义的变量可以在类的任何其他静态方法或静态代码块中被访问和使用。

3、在许多情况下,静态变量在类的各个方法中都会使用到,为了避免定义多个副本,并且方便统一管理和修改,可以将其定义在静态方法中。

小编还为您整理了以下内容,可能对您也有帮助:

为什么要定义静态变量

static

静态方法里

定义的就是静态的变量,只不过作用域只在方法内。

你可以定义一个全局的静态变量。在这个方法中使用。

就可以达到你的计数增长的目的。

JAVA中,静态方法中调用全局变量时,为什么全局变量也要设置成静态的,这是为什么呢?

在java中,静态方法只能调用静态变量,如果你想要在静态方法调用一个变量,那么这个变量不论是全局与否,都得设置成静态。另外在静态块中也是一样的。如static{ }里面调用的变量也必须是静态的。

c#中为什么要定义静态变量和静态方法

静态变量和静态方法是不需要类的实例就可以访问,比较方便。比如

class Test

{

public void foo(){...}

public static void StaticFoo() {...}

}

// 调用foo需要Test的实例

Test test = new Test();

test.foo();

// StaticFoo可直接调用

Test.StaticFoo();

相当于C/C++的全局变量和全局方法

一般某类里的静态方法和函数都是跟这个类型本身有联系的

另一方面,C#是面向对象的,所有的函数和方法都必须属于某个类型

c#中为什么要定义静态变量和静态方法

静态变量和静态方法是不需要类的实例就可以访问,比较方便。比如

class Test

{

public void foo(){...}

public static void StaticFoo() {...}

}

// 调用foo需要Test的实例

Test test = new Test();

test.foo();

// StaticFoo可直接调用

Test.StaticFoo();相当于C/C++的全局变量和全局方法

一般某类里的静态方法和函数都是跟这个类型本身有联系的

另一方面,C#是面向对象的,所有的函数和方法都必须属于某个类型

在JAVA中为什么要申明静态方法和静态变量

静态变量能够在类的各个对象享,从而实现特定的目的;静态方法的话,不需要对象就能通过类名调用。有这些需求,因此要定义咯。

刚学JAVA,发现 static 静态方法里不能定义静态变量,这是为什么?

怎么说了,无论是static修饰的方法还是变量,首先,我们之所以用Static修饰有一个很直接的目的就是访问方便,当然,方法和变量各有它们的作用,方法的作用是告诉我们怎样去做具体的事,所以它里面的变量已经没有那么重要了,因为我们的方法具有普适性,对于它里面的变量的调用好像没有太大的价值,变量只不过是个形式,值都是从外面传进方法来的。所以方法体里面的变量一般不加任何修饰符

static函数里定义static变量

1、方法里面不能定义静态变量。由于JAVA规定,方法内定义的都是局部临时变量,且由于内存分配,会创建一个栈帧保存局部变量表、操作数栈,动态链栈等,在方法结束后,栈帧会出栈并释放掉所有局部变量。

2、静态变量只能定义为全局变量。

什么时候用静态变量 静态方法?为什么要使用静态变量 、静态方法?

静态方法和实例方法的区别主要体现在两个方面:

在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。

静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此。

下面几个例子展示了这一区别。

1、调用静态方法示例。

//-----------文件名hasStaticMethod.java,程序编号1-----------------public class hasStaticMethod{//定义一个静态方法public static void callMe(){System.out.println("This is a static method.");}}

下面这个程序使用两种形式来调用静态方法。

//-----------文件名invokeStaticMethod.java,2-----------------public class invokeStaticMethod{public static void main(String args[]){hasStaticMethod.callMe(); //不创建对象,直接调用静态方法 hasStaticMethod oa = new hasStaticMethod(); //创建一个对象oa.callMe(); //利用对象来调用静态方法}}

程序3.36两次调用静态方法,都是允许的,程序的输出如下:

This is a static method.This is a static method.

允许不创建对象而调用静态方法,是Java为了减少程序员调用某些常用方法时的麻烦,而允许程序员按照传统的C语言中使用函数的方式来使用方法。典型的例子是前面某些程序中使用"Math.ramdon()"来获取随机数。

2、静态方法访问成员变量示例。

//-----------文件名accessMember.java,程序编号3.37-----------------class accessMember{private static int sa; //定义一个静态成员变量private int ia; //定义一个实例成员变量//下面定义一个静态方法static void statMethod(){int i = 0; //正确,可以有自己的局部变量sa = 10; //正确,静态方法可以使用静态变量otherStat(); //正确,可以调用静态方法ia = 20; //错误,不能使用实例变量insMethod(); //错误,不能调用实例方法}static void otherStat(){} //下面定义一个实例方法 void insMethod(){int i = 0; //正确,可以有自己的局部变量sa = 15; //正确,可以使用静态变量ia = 30; //正确,可以使用实例变量statMethod(); //正确,可以调用静态方法}}

本例其实可以概括成一句话:静态方法只能访问静态成员,实例方法可以访问静态和实例成员。之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象。同样,因为实例方法可以访问实例成员变量,如果允许静态方法调用实例方法,将间接地允许它使用实例成员变量,所以它也不能调用实例方法。基于同样的道理,静态方法中也不能使用关键字this。

main()方法是一个典型的静态方法,它同样遵循一般静态方法的规则,所以它可以由系统在创建对象之前就调用。

静态变量作为一个局部变量是很合适的,它在函数退出后不会失去其本身的值。例如,有一个要被调用很多次的函数,它的一部分功能就是计算自己被调用的次数。你不能用一个简单的局部变量来实现这部分功能,因为每次进入该函数时,这个变量都没有被初始化。如果把这个计数变量说明为静态的,那么它就会象一个全局变量那样保留自己的当前值。

那么为什么不直接使用一个全局变量呢?你可以使用一个全局变量,而且这样做没有错误。问题是使用了大量全局变量的程序维护起来很麻烦,尤其是有许多函数都各自访问一个全局变量的程序。再说一遍,这样做没有错误,这只是一个程序设计和可读性是否好的问题。如果你把这样的变量说明为静态的,你就可以提醒自己(或者其它可能读你的程序的人)它是局部变量,但要象全局变量那样被处理(保留自己的值)。如果你把它说明为全局的,那么读这个程序的人一定会认为有很多地方要引用它,尽管实际上并不是这样。

总而言之,当你需要一个能保持自己的值的局部变量时,使用静态变量是一种好的编程习惯。

静态方法就不再多解释了,道理差不多

静态方法里面为什么不能声明静态变量

static是用来修饰成员变量和成员方法,也可以形成静态static代码块。

不能在方法里声明一个变量为static的。

static修饰的变量,任何一个类的实例对象都可以访问,是共享的。

而方法中声明的变量都是局部的,方法执行完后就要销毁,释放缓存空间的。

静态方法和静态变量的目的是什么?

一般静态变量都是公用的、全局的,程序一启动就会在内存开辟一块空间,存放它们。静态的不必实例化就能直接使用,是说在没有生成任何对象时就能运用该方法,所以静态方法里不能对非静态的成员变量做操作。一般静态方法操作静态成员变量或全局变量。

为什么要定义静态变量

static

静态方法里

定义的就是静态的变量,只不过作用域只在方法内。

你可以定义一个全局的静态变量。在这个方法中使用。

就可以达到你的计数增长的目的。

JAVA中,静态方法中调用全局变量时,为什么全局变量也要设置成静态的,这是为什么呢?

在java中,静态方法只能调用静态变量,如果你想要在静态方法调用一个变量,那么这个变量不论是全局与否,都得设置成静态。另外在静态块中也是一样的。如static{ }里面调用的变量也必须是静态的。

c#中为什么要定义静态变量和静态方法

静态变量和静态方法是不需要类的实例就可以访问,比较方便。比如

class Test

{

public void foo(){...}

public static void StaticFoo() {...}

}

// 调用foo需要Test的实例

Test test = new Test();

test.foo();

// StaticFoo可直接调用

Test.StaticFoo();

相当于C/C++的全局变量和全局方法

一般某类里的静态方法和函数都是跟这个类型本身有联系的

另一方面,C#是面向对象的,所有的函数和方法都必须属于某个类型

c#中为什么要定义静态变量和静态方法

静态变量和静态方法是不需要类的实例就可以访问,比较方便。比如

class Test

{

public void foo(){...}

public static void StaticFoo() {...}

}

// 调用foo需要Test的实例

Test test = new Test();

test.foo();

// StaticFoo可直接调用

Test.StaticFoo();相当于C/C++的全局变量和全局方法

一般某类里的静态方法和函数都是跟这个类型本身有联系的

另一方面,C#是面向对象的,所有的函数和方法都必须属于某个类型

在JAVA中为什么要申明静态方法和静态变量

静态变量能够在类的各个对象享,从而实现特定的目的;静态方法的话,不需要对象就能通过类名调用。有这些需求,因此要定义咯。

刚学JAVA,发现 static 静态方法里不能定义静态变量,这是为什么?

怎么说了,无论是static修饰的方法还是变量,首先,我们之所以用Static修饰有一个很直接的目的就是访问方便,当然,方法和变量各有它们的作用,方法的作用是告诉我们怎样去做具体的事,所以它里面的变量已经没有那么重要了,因为我们的方法具有普适性,对于它里面的变量的调用好像没有太大的价值,变量只不过是个形式,值都是从外面传进方法来的。所以方法体里面的变量一般不加任何修饰符

static函数里定义static变量

1、方法里面不能定义静态变量。由于JAVA规定,方法内定义的都是局部临时变量,且由于内存分配,会创建一个栈帧保存局部变量表、操作数栈,动态链栈等,在方法结束后,栈帧会出栈并释放掉所有局部变量。

2、静态变量只能定义为全局变量。

什么时候用静态变量 静态方法?为什么要使用静态变量 、静态方法?

静态方法和实例方法的区别主要体现在两个方面:

在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。

静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此。

下面几个例子展示了这一区别。

1、调用静态方法示例。

//-----------文件名hasStaticMethod.java,程序编号1-----------------public class hasStaticMethod{//定义一个静态方法public static void callMe(){System.out.println("This is a static method.");}}

下面这个程序使用两种形式来调用静态方法。

//-----------文件名invokeStaticMethod.java,2-----------------public class invokeStaticMethod{public static void main(String args[]){hasStaticMethod.callMe(); //不创建对象,直接调用静态方法 hasStaticMethod oa = new hasStaticMethod(); //创建一个对象oa.callMe(); //利用对象来调用静态方法}}

程序3.36两次调用静态方法,都是允许的,程序的输出如下:

This is a static method.This is a static method.

允许不创建对象而调用静态方法,是Java为了减少程序员调用某些常用方法时的麻烦,而允许程序员按照传统的C语言中使用函数的方式来使用方法。典型的例子是前面某些程序中使用"Math.ramdon()"来获取随机数。

2、静态方法访问成员变量示例。

//-----------文件名accessMember.java,程序编号3.37-----------------class accessMember{private static int sa; //定义一个静态成员变量private int ia; //定义一个实例成员变量//下面定义一个静态方法static void statMethod(){int i = 0; //正确,可以有自己的局部变量sa = 10; //正确,静态方法可以使用静态变量otherStat(); //正确,可以调用静态方法ia = 20; //错误,不能使用实例变量insMethod(); //错误,不能调用实例方法}static void otherStat(){} //下面定义一个实例方法 void insMethod(){int i = 0; //正确,可以有自己的局部变量sa = 15; //正确,可以使用静态变量ia = 30; //正确,可以使用实例变量statMethod(); //正确,可以调用静态方法}}

本例其实可以概括成一句话:静态方法只能访问静态成员,实例方法可以访问静态和实例成员。之所以不允许静态方法访问实例成员变量,是因为实例成员变量是属于某个对象的,而静态方法在执行时,并不一定存在对象。同样,因为实例方法可以访问实例成员变量,如果允许静态方法调用实例方法,将间接地允许它使用实例成员变量,所以它也不能调用实例方法。基于同样的道理,静态方法中也不能使用关键字this。

main()方法是一个典型的静态方法,它同样遵循一般静态方法的规则,所以它可以由系统在创建对象之前就调用。

静态变量作为一个局部变量是很合适的,它在函数退出后不会失去其本身的值。例如,有一个要被调用很多次的函数,它的一部分功能就是计算自己被调用的次数。你不能用一个简单的局部变量来实现这部分功能,因为每次进入该函数时,这个变量都没有被初始化。如果把这个计数变量说明为静态的,那么它就会象一个全局变量那样保留自己的当前值。

那么为什么不直接使用一个全局变量呢?你可以使用一个全局变量,而且这样做没有错误。问题是使用了大量全局变量的程序维护起来很麻烦,尤其是有许多函数都各自访问一个全局变量的程序。再说一遍,这样做没有错误,这只是一个程序设计和可读性是否好的问题。如果你把这样的变量说明为静态的,你就可以提醒自己(或者其它可能读你的程序的人)它是局部变量,但要象全局变量那样被处理(保留自己的值)。如果你把它说明为全局的,那么读这个程序的人一定会认为有很多地方要引用它,尽管实际上并不是这样。

总而言之,当你需要一个能保持自己的值的局部变量时,使用静态变量是一种好的编程习惯。

静态方法就不再多解释了,道理差不多

静态方法里面为什么不能声明静态变量

static是用来修饰成员变量和成员方法,也可以形成静态static代码块。

不能在方法里声明一个变量为static的。

static修饰的变量,任何一个类的实例对象都可以访问,是共享的。

而方法中声明的变量都是局部的,方法执行完后就要销毁,释放缓存空间的。

静态方法和静态变量的目的是什么?

一般静态变量都是公用的、全局的,程序一启动就会在内存开辟一块空间,存放它们。静态的不必实例化就能直接使用,是说在没有生成任何对象时就能运用该方法,所以静态方法里不能对非静态的成员变量做操作。一般静态方法操作静态成员变量或全局变量。

标签: 变量 静态
  • 文章版权属于文章作者所有,转载请注明 https://shqsg.com/zh-sg/zonghezhishi/4l0vrz.html