Java高级特性之static与final(一)

时间:2020-12-26 18:20:22
package three.day.newcharacter;




public class StaticFinalUsage {


/**
* @param args
*/
//定义静态数据成员sVar1,sVar2;
public static int sVar1 = 10;//定义时初始化
public static int sVar2;//利用静态初始化器初始化,但不能在构造函数中初始化
static 
{
sVar2 = 20;
}

//定义最终数据成员fVar1,fVar2;
public final int fVar1 = 30;//定义时初始化
public final int fVar2;
public StaticFinalUsage()//利用构造函数进行初始化,与static有区别
{
fVar2 = 40;
}

public static final int sfVar1 = 50; //定义静态、最终数据成员sfVar1,只能在定义时初始化

public void output1()//定义非静态成员方法
{
//非静态成员方法可以调用静态数据成员,也可以调用非静态数据成员(包括final最终数据成员)
sVar1 = 9;//静态数据成员可以改变数值
sVar2 = 19;
System.out.println("output static member(Change):");
System.out.println("sVar1="+sVar1+"  sVar2="+sVar2);
System.out.println("output final member(Cann't Change):");//final最终数据成员不可以改变其数值
System.out.println("fVar1="+fVar1+"  fVar2="+fVar2);
System.out.println("output static final member(Cann't Change):");//static final最终数据成员也不可以改变其数值
System.out.println("sfVar1="+sfVar1);
}
public static void output2()//定义静态成员方法
{
//静态成员方法只能调用静态成员方法和静态数据成员(有点绝对)
//其实有时编译可以通过,但链接执行就出错啦
sVar1 = 11;//静态数据成员可以改变数值
sVar2 = 21;
System.out.println("output static member(Change):");
System.out.println("sVar1="+sVar1+"  sVar2="+sVar2);
System.out.println("output static final member(Cann't Change):");//static final最终数据成员也不可以改变其数值
System.out.println("sfVar1="+sfVar1);
}
public static void main(String[] args) 
{
sVar1 = 12;//静态数据成员可以改变数值
sVar2 = 22;
System.out.println("output static member in main(Change):");
System.out.println("sVar1="+sVar1+"  sVar2="+sVar2);
System.out.println("output static final member in main(Cann't Change):");//static final最终数据成员也不可以改变其数值
System.out.println("sfVar1="+sfVar1);

StaticFinalUsage sfu1 = new StaticFinalUsage();
sfu1.output1();//对于非静态成员方法,只能通过定义类对象,然后对象打点使用成员方法

sfu1.output2();//而对于静态成员方法,既可以通过定义类对象,然后对象打点使用成员方法,也可以类名打点直接使用成员方法
StaticFinalUsage.output2();

sfu1.sVar1 = 1000;//非静态成员方法和静态成员方法有这样的区别,同样,非静态数据成员和静态数据成员也有这样的区别
StaticFinalUsage.sVar1 = 1001;


}


}