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;
}
}