JAVA! static啥作用?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA! static啥作用?相关的知识,希望对你有一定的参考价值。
静态只能调用静态变量.. 这个我知道... 我想知道static有什么作用?
老师讲的太术语话... 听不太懂... 通俗点说... 谢谢
那这个static有使用限制么?
比如包里好使.. 或类里才好使之类的...
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();
参考技术A 是静态修饰符,什么叫静态修饰符呢?大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。这样做有什么意义呢?在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。呵呵,写到这里大家是否明白了呢?不明白就再看看书或者多写几个例子印证一下,呵呵。本回答被提问者采纳 参考技术B java中的static关键字的作用是申明一个静态变量、静态函数或静态类,要说清static可以先说一下另外一个关键字,提问题的你应该懂得final关键字的作用吧,final申明的变量可以在类中所有地方都可以用,但其变量的值不可以在往后的成员函数中或任何编程的语句中被改变;而static关键字和final的不同就是static申明的变量的值可以被往后的编程语句改变;注意两点:(1)如果主类中的成员函数中也定义的变量和主类中定义静态变量同名,则成语函数中的同名变量会在其作用域内(即该成员函数内)暂时代替主类中的静态同名变量,就是说成语函数中的同名变量并不是主类中的静态同名函数;(2)静态类中只能申明静态成员函数和只能使用静态变量(注意是只能使用静态变量而不是只能申明静态变量)。 参考技术C (1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
(2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;
(4)在类中的static成员变量意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见;
(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。 参考技术D 是这样的,static定义的变量是个所有该类对象共有的变量,那么我们可以举个例子来说明,比如,我编写一个Student类,该类中有个static变量count用来记录学生的个数,在构造方法中做count++。那么当我每创建一个对象时count都会做自加,也就是每创建一个Student的对象系统就会记录一个,那么很显然,我就可以调用这个count知道一共有多少Student对象了。这个是个很简单的例子,不过应该可以说明问题了。
请问各位高手 java中static修饰的成员不能访问没有static修饰的成员是啥意思?谢谢大家了!!
static 是预加载的,在编译的时候就加载到jvm中了,而非static修士的成员没有预加载,所以不能访问,具体例子和一楼的一样。 参考技术A static class装载的时候,就存在了。 而类的其他部分,变量,方法,都需要在类成为实例的时候才会建立。 static的生命周期长于非static的对像,所以static的成员如果访问无static的成员时。对方可能还未产生。会发生错误。所以禁止了。 参考技术B 比如在两个类中,一个类中有一个静态成员,另一个类想调用这个类里面的静态成员,你只需要用那个类名直接打点调用那个静态成员。如果没有静态修饰的话,你要去new那个类,拿那被new出那个类名打点去调用。这个说法只是一个用new,一个不用new的区别。。。。 参考技术C 由于static方法可以由类名.方法直接调用,即一个类只有一个实例,所以它不能调用非static的方法,因为非static的成员或者方法是每个对象独有的。 参考技术D 就是说 static 方法不能按类内部的方式来访问非 static 成员而只能通过对象的方式来访问,相当于类外访问这些成员一样
以上是关于JAVA! static啥作用?的主要内容,如果未能解决你的问题,请参考以下文章
JAVA语言中,被static关键字修饰的成员变量和类变量有啥区别?
java中static关键字的用法?主要对new User().getName()和User.name比较疑惑,啥区别呢?