JAVA! static什么作用?

发布网友 发布时间:2022-03-25 09:12

我来回答

12个回答

热心网友 时间:2022-03-25 10:41

static是静态修饰符,static可以用来区分成员变量、方法是属于类本身还是属于类实例化后的对象。有static修饰的成员属于类本身,没有static修饰的成员属于类的实例。

static静态变量是属于类的,只有一份存储空间,是类之间共享的,牵一发而动全身,一处变,处处变。实例变量属于实例对象,创建几次对象,就有几份的成员变量(拷贝)。

扩展资料

static的使用

示例:

classa{

publicstatic$aa=1;

publicstaticfunctionaa(){

self::$aa+=1;

echoself::$aa;

}

}

classb{

publicfunctionbb(){

a::aa();

}

}

classc{

publicfunctioncc(){

a::aa();

}

}

$bbb=newb();

$ccc=newc();

$bbb->bb();

echo'*******************';

$ccc->cc();

热心网友 时间:2022-03-25 11:59

是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。这样做有什么意义呢?
在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是有种情况例外,就是该成员是用static声明的(在这里所讲排除了类的访问控制),例如:
未声明为static
class ClassA{
int b;
public void ex1(){

}
}
class ClassB{
void ex2{
int i;
ClassA a = new ClassA();
i = a.b; //这里通过对象引用访问成员变量b
a.ex1; //这里通过对象引用访问成员函数ex1
}
}

声明为static
class ClassA{
static int b;
static void ex1(){

}
}
class ClassB{
void ex2{
int i;
i = ClassA.b; //这里通过类名访问成员变量b
ClassA.ex1; //这里通过类名访问成员函数ex1
}
}
通过以上两种比较,就可以知道static用来修饰类成员的主要作用了,在java类库当中有很多类成员都声明为static,可以让用户不需要实例化对象就可以引用成员,最基本的有Integer.parseInt(),Float.parseFloat()等等用来把对象转换为所需要的基本数据类型。这样的变量和方法我们又叫做类变量和类方法。
接下来讲一下被static修饰后的变量的值的问题,刚才在前面讲过,被static修饰后的成员,在编译时由内存分配一块内存空间,直到程序停止运行才会释放,那么就是说该类的所有对象都会共享这块内存空间,看一下下面这个例子:
class TStatic{
static int i;

public TStatic(){
i = 4;
}

public TStatic(int j){
i = j;
}

public static void main(String args[]){
TStatic t = new TStatic(5); //声明对象引用,并实例化
TStatic tt = new TStatic(); //同上
System.out.println(t.i);
System.out.println(tt.i);
System.out.println(t.i);
}
}
这段代码里面Tstatic类有一个static的int变量I,有两个构造函数,第一个用于初始化I为4,第二个用于初始化i为传进函数的值,在main中所传的值是5,程序首先声明对象的引用t,然后调用带参数的构造函数实例化对象,此时对象t的成员变量I的值为5,接着声明对象tt,调用无参数的构造函数,那么就把对象tt的成员变量i的值初始化为4了,注意了,在这里i是static,那就是说该类的所有对象都共享该内存,那也就是说在实例化对象tt的时候改变了i的值,那么实际上对象t的i值也变了,因为实际上他们引用的是同一个成员变量。最后打印的结果是三个4。呵呵,写到这里大家是否明白了呢?不明白就再看看书或者多写几个例子印证一下,呵呵。

热心网友 时间:2022-03-25 13:34

java中的static关键字的作用是申明一个静态变量、静态函数或静态类,要说清static可以先说一下另外一个关键字,提问题的你应该懂得final关键字的作用吧,final申明的变量可以在类中所有地方都可以用,但其变量的值不可以在往后的成员函数中或任何编程的语句中被改变;而static关键字和final的不同就是static申明的变量的值可以被往后的编程语句改变;注意两点:(1)如果主类中的成员函数中也定义的变量和主类中定义静态变量同名,则成语函数中的同名变量会在其作用域内(即该成员函数内)暂时代替主类中的静态同名变量,就是说成语函数中的同名变量并不是主类中的静态同名函数;(2)静态类中只能申明静态成员函数和只能使用静态变量(注意是只能使用静态变量而不是只能申明静态变量)。

热心网友 时间:2022-03-25 15:25

(1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
(2)*变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3)*函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被*在声明它的模块内;
(4)在类中的static成员变量意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见;
(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。

热心网友 时间:2022-03-25 17:33

是这样的,static定义的变量是个所有该类对象共有的变量,那么我们可以举个例子来说明,比如,我编写一个Student类,该类中有个static变量count用来记录学生的个数,在构造方法中做count++。那么当我每创建一个对象时count都会做自加,也就是每创建一个Student的对象系统就会记录一个,那么很显然,我就可以调用这个count知道一共有多少Student对象了。这个是个很简单的例子,不过应该可以说明问题了。

热心网友 时间:2022-03-25 19:58

static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用,这样就容易理解多了。static前面加上其它访问权限关键字的效果也以此类推。

热心网友 时间:2022-03-25 22:39

static类型的变量是属于类的.
当这个类一个对象改变static类型变量的值,其他对象的这个值也会跟着一起改变.例如
class A{
public static int cunt = 0;
}
public class Test{
public static void main(String[] args){
A a1 = new A();
A a2 = new A();
a1.cunt = 100;//a1对象把cunt改变成100
System.out.println(a2.cunt);// 输出对象a2的cunt值也为100
}
}

热心网友 时间:2022-03-26 01:37

问题:雇员类有个雇员基本工资,对于员工A员工B都是一样的,但是管理员又有可能需要对这个工资做调整,也就是不能定义成常量.像这样的变量你要怎么处理呢?怎么保证这样的一致性?
于是static成员变量和成员方法就产生咯:
static int salary;
public static void setSalary(int salary){this.salary = salary;}
public static int getSalary(){return salary;}
这样的话我就直接用员工类.方法得到统一的基本工资值啦:
Employee.setSalary(800);
Employee.getSalary();
至于每个员工嘛,也可以调用这个方法查看自己的基本工资
Employee A = new Employee();
A.getSalary();
PS:这里还涉及到对员工实体屏蔽setSalary()方法的问题,我也懒得想啦.....

其实楼上的各位说得已经很清楚了,我只是更形象得告诉你,好理解一点.

热心网友 时间:2022-03-26 04:52

用它来修饰成员变量或方法的时候,就可直接用“类名.方法”来调用类里面的方法或成员变量,而不要再去new一个对象出来

热心网友 时间:2022-03-26 08:23

没有*

举个例子就明白了

public class testStatic {

public static void A() {

System.out.println("Hello World!");
}

public static void main(String[] args) {
testStatic.A();//类名+.直接调用 不用new了

}

}

输出 Hello World

热心网友 时间:2022-03-26 12:11

可以直接类名.静态方法或属性

热心网友 时间:2022-03-26 20:37

最佳答案第二个例子,怎么能在没有结束递归条件的情况下,在miain函数中进行递归调用。死循环么...
第一个例子写函数麻烦写个(), 调用时也不要忘记哦。 带参数或者不带都要写哦!
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com