⑴ 在java中什么时候使用static ,static是不是等于全局变量
static是静态变量,并不是常量,全局变量是相对于局部变量来说的,全局变量可以改变,在程序的任何地方都可以读取和修改,而局部变量只能在语句块内作用,超出作用范围就失效了.
静态变量(static)是相对自动变量(auto)等而言的,一旦声明为静态变量,在编译时刻开始永远存在,不受作用域范围约束,但是如果是局部静态变量,则此静态变量只能在局部作用域内使用,超出范围不能使用,但是它确实还占用内存,还存在.自动变量就是一般的变量,在C语言中auto关键字可以省略.
int d;//全局变量
static int a;//静态全局变量
void func()
{
int c;//局部变量
}
main()
{
static int d;//静态局部变量
int b;//局部变量
}
⑵ java中什么时候该用static修饰方法有什么好处或者坏处
有时你希望定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字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.
classUseStatic{
staticinta=3;
staticintb;
staticvoidmeth(intx){
System.out.println("x="+x);
System.out.println("a="+a);
System.out.println("b="+b);
}
static{
System.out.println("Staticblockinitialized.");
b=a*4;
}
publicstaticvoidmain(Stringargs[]){
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在它们的类之外被访问。
classStaticDemo{
staticinta=42;
staticintb=99;
staticvoidcallme(){
System.out.println("a="+a);
}
}
classStaticByName{
publicstaticvoidmain(Stringargs[]){
StaticDemo.callme();
System.out.println("b="+StaticDemo.b);
}
}
下面是该程序的输出:
a = 42
b = 99
⑶ java 什么时候用static
当一个方法或者变量需要初始化加载,或者是经常被调用的时候可以加上static。
用static修饰的方法可以用类名. 直接调用,不用的一定要先实例化一个对象然后才可以调用
⑷ java什么时候用static
static可以修饰变量,方法,类。
1)修饰变量,变量内存中只有一份,即使创建多个类,这个变量在内存也只有一份,所有对象都引用这一个变量。且访问这个变量可以直接用类名.变量名访问,跟是否有对象实例无关
2)修饰方法,该方法在虚拟机加载主方法时就会被创建,用类名.方法名可以直接调用,跟是否有对象实例无关
3)Java里面static一般用来修饰成员变量或函数。但有一种特殊用法是用static修饰内部类。修饰内部类不用创建实例,外部类知己使用
⑸ java 中的static 存在时间问题
final表示不可以修改,和c++的const一样
static的变量,从定义开始,一直到程序结束都是存在的,就算这个对象被销毁了,依然存在,
比如有一个类A,其中有一个静态变量s,
定义A a;
a.s=1;
则即使
a=null;
A b;
b中的s还是1
⑹ java中,什么时候用static修饰method
当一个方法或者变量需要初始化加载,或者是经常被调用的时候可以加上static。
用static修饰的方法可以用类名直接调用,不用的一定要先实例化一个对象然后才可以调用
比如 person这个类里面有一个方法public static add(){}
那么可以直接用person类调用 person.add();当然也可以用下面的方法先出一个对象在调用也是可以
如果这个方法前面没有static 比如 public add(){}
那么先要person p=new person();
然后用p.add();
类加载器在加载这个类的时候就已经实例化了这个类。
⑺ java static 方法 什么时候执行
当然是被调用时执行,而static块是在java虚拟机加载这个类时,就被执行。
⑻ java中static什么时候使用,知道static是静态变量
声明为static的变量实质上就是全局变量。当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制: ◆它们仅能调用其他的static 方法。 ◆它们只能访问static数据。 ◆它们不java中static什么时候使用,知道static是静态变量
⑼ java static 一般都什么时候能用呢
一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用
比如main方法就必须是静态的 这是程序入口
两者的区别就是:静态代码块是自动执行的;
静态方法是被调用的时候才执行的.
静态方法
(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如:
public static int maximum(int n1,int n2)
使用类的静态方法时,注意:
a在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。
b 静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。
(2)静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,例如:
fun()
{
static int i=0;//非法。
}
(3)一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化。例如:
static
{
}
http://www.cnblogs.com/panjun-Donet/archive/2010/08/10/1796209.html
⑽ java static方法什么时候执行
先说一下static方法的特点吧。
方法被定义为static就表示这个方法不需要声明类的实例即可执行;比如main方法。而某个类成员被定义为static的时候,它就几乎完全独立于这个类了。
根据think in java2 还有java参考大全中所述,static方法在类刚刚被加载的时候就执行了。
因此,可以说,static方法是在对程序进行解释的时候执行。