“static要领就是没有this的要领。在static要领内部不能挪用非静态要领,反过来是能够的。而且能够在没有建立任何对象的前提下,仅仅经由过程类自身来挪用static要领。这实际上恰是static要领的主要用途。”
这段话虽然只是说清晰明了static要领的特别的地方,然则能够看出static关键字的基础作用,简而言之,一句话来形貌就是:
方便在没有建立对象的状况下来举行挪用(要领/变量)。
很显然,被static关键字润饰的要领或许变量不需要依靠于对象来举行接见,只需类被加载了,就能够经由过程类名去举行接见。
static能够用来润饰类的成员要领、类的成员变量,别的能够编写static代码块来优化递次机能。
static要领
static要领平常称作静态要领,由于静态要领不依靠于任何对象就能够举行接见,因而关于静态要领来讲,是没有this的,由于它不依附于任何对象,既然都没有对象,就谈不上this了。而且由于这个特征,在静态要领中不能接见类的非静态成员变量和非静态成员要领,由于非静态成员要领/变量都是必需依靠细致的对象才能够被挪用。
然则要注意的是,虽然在静态要领中不能接见非静态成员要领和非静态成员变量,然则在非静态成员要领中是能够接见静态成员要领/变量的。
举个简朴的例子:
在上面的代码中,由于print2要领是独立于对象存在的,能够直接用过类名挪用。假如说能够在静态要领中接见非静态要领/变量的话,那末如果在main要领中有下面一条语句:
MyObject.print2();
此时对象都没有,str2基础就不存在,所以就会产生矛盾了。一样关于要领也是一样,由于你没法预知在print1要领中是不是接见了非静态成员变量,所以也制止在静态成员要领中接见非静态成员要领。
而关于非静态成员要领,它接见静态成员要领/变量显然是毫无限定的。
因而,如果说想在不建立对象的状况下挪用某个要领,就能够将这个要领设置为static。我们最常见的static要领就是main要领,至于为何main要领必需是static的,如今就很清晰了。由于递次在实行main要领的时刻没有建立任何对象,因而只要经由过程类名来接见。
static变量
static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被一切的对象所同享,在内存中只要一个副本,它当且仅当在类首次加载时会被初始化。而非静态变量是对象所具有的,在建立对象的时刻被初始化,存在多个副本,各个对象具有的副本互不影响。
static成员变量的初始化递次根据定义的递次举行初始化。
private static int i=0;
以上就是java中static怎样用的细致内容,更多请关注ki4网别的相干文章!