ACCESS_MODIFER static DATA_TYPE VARNAME;
例如,用这种方式声明整数类型的公共静态变量。
public static Integer staticVar;
静态变量最重要的一点是它们属于类级别。这意味着在运行时只能有一个变量的副本。当在类定义中定义静态变量时,类的每个实例都可以访问该单一副本。单独的类实例不会有它们自己的本地副本,就像它们对非静态变量一样。public class JavaStaticExample
{
public static void main(String[] args)
{
DataObject objOne = new DataObject();
objOne.staticVar = 10;
objOne.nonStaticVar = 20;
DataObject objTwo = new DataObject();
System.out.println(objTwo.staticVar); //10
System.out.println(objTwo.nonStaticVar); //null
DataObject.staticVar = 30; //Direct Access
System.out.println(objOne.staticVar); //30
System.out.println(objTwo.staticVar); //30
}
}
class DataObject {
public static Integer staticVar;
public Integer nonStaticVar;
}
10
null
30
30
注意我们如何将值更改为30,并且这两个对象现在看到的更新值为30。ACCESS_MODIFER static RETURN_TYPE METHOD_NAME;
public static Integer getStaticVar(){
return staticVar;
}
要记住的一些事项。
public class JavaStaticExample
{
public static void main(String[] args)
{
DataObject.staticVar = 30; //Direct Access
Integer value1 = DataObject.getStaticVar(); //access with class reference
DataObject objOne = new DataObject();
Integer value2 = objOne.getStaticVar(); //access with instance reference
System.out.println(value1);
System.out.println(value2);
}
}
class DataObject
{
public Integer nonStaticVar;
public static Integer staticVar; //static variable
public static Integer getStaticVar(){
return staticVar;
}
}
输出内容:
30
30
正常的导入声明从包中导入类,因此它们可以在没有包引用的情况下使用。类似地,静态导入声明从类中导入静态成员,并允许它们在没有类引用的情况下使用。
静态导入声明也有两种类型:单静态导入和静态导入。单静态导入声明从类型中导入一个静态成员。静态输入-点播声明导入了类型的所有静态成员。
//Single-static-import declaration:
import static <<package name>>.<<type name>>.<<static member name>>;
//Static-import-on-demand declaration:
import static <<package name>>.<<type name>>.*;
例如, System.out
is
//Static import statement
import static java.lang.System.out;
public class JavaStaticExample
{
public static void main(String[] args)
{
DataObject.staticVar = 30;
out.println(DataObject.staticVar); //Static import statement example
}
}
class DataObject
{
public static Integer staticVar; //static variable
}
输出:
30
static {
//initialize static members of class
}
当类装入内存时,将执行静态块。一个类可以有多个静态块,并且它们将以相同的顺序执行,它们在类定义中出现。
import static java.lang.System.out;
class DataObject
{
public Integer nonStaticVar;
public static Integer staticVar; //static variable
//It will be executed first
static {
staticVar = 40;
//nonStaticVar = 20; //Not possible to access non-static members
}
//It will be executed second
static {
out.println(staticVar);
}
}
输出:
40
public class JavaStaticExample
{
public static void main(String[] args)
{
//Static inner class example
System.out.println( DataObject.StaticInnerClas.innerStaticVar );
}
}
class DataObject
{
public Integer nonStaticVar;
public static Integer staticVar; //static variable
static class StaticInnerClas {
Integer innerNonStaticVar = 60;
static Integer innerStaticVar = 70; //static variable inside inner class
}
}
请注意,静态内部类无法访问外部类的非静态成员。它只能访问来自外部类的静态成员。
public class JavaStaticExample
{
public static void main(String[] args)
{
//Static inner class example
DataObject.StaticInnerClas.accessOuterClass();
}
}
class DataObject
{
public Integer nonStaticVar;
public static Integer staticVar; //static variable
static {
staticVar = 40;
//nonStaticVar = 20; //Not possible to access non-static members
}
public static Integer getStaticVar(){
return staticVar;
}
static class StaticInnerClas
{
public static void accessOuterClass()
{
System.out.println(DataObject.staticVar); //static variable of outer class
System.out.println(DataObject.getStaticVar()); //static method of outer class
}
}
}
输出:
40
地址:https://www.leftso.com/article/218.html