1,static 修饰的常量为静态常量,该常量属于该类【注意不是对象,因为没有创建该类的对象也能使用它】,该常量只会在类第一次加载的时候生成,被jvm分配内存空间。举个生活中的例子,我有一张银行卡,我去超市,商场,食堂都是需要这一张银行卡消费,那么这张银行卡就可以是一个静态常量【然后因为这个银行卡我不想信息能被更改,使用final修饰,那么就是一个不变的常量】
上代码 :
对象我自己
public interface People {
public static final String CardNo="1234567"; //使用static能保证被其他人即使不生成对象也难访问
//使用final能保证银行卡信息的全员共享是一样的,不被修改
}
超市
public class SuperMarket implements People{
{
System.out.println("超市使用的银行卡:"+People.CardNo);
}
}
商场
public class Market implements People {
{
System.out.println("商场使用的银行卡:"+People.CardNo);
}
}
食堂
public class Canteen implements People {
{
System.out.println("食堂使用的银行卡:"+People.CardNo);
}
}
消费
public class Constant {
public static void main(String[] args) {
SuperMarket superMarket = new SuperMarket();
Market market = new Market();
Canteen canteen = new Canteen();
}
}
生成结果:
2,static修饰方法
static修饰的方法也是会在类第一次加载的时候加载,
test1类
public class Test1 {
public Test1() {
System.out.println("test1的构造方法");
}
{
System.out.println("test1的初始化");
}
static {
System.out.println("test1的静态常量的加载");
}
}
test2类
public class Test2 extends Test1 {
public Test2() {
System.out.println("test2的构造方法");
}
{
System.out.println("test2的初始化");
}
static {
System.out.println("test2的静态常量的加载");
}
}
test3类
public class Test3 extends Test2 {
public Test3(){
System.out.println("test3的构造方法");
}
{
System.out.println("test3的初始化");
}
static {
System.out.println("test3的静态常量的加载");
}
}
测试类
public class StaticTest {
public static void main(String[] args) {
Test3 test3 = new Test3();
System.out.println("----------------------");
Test2 test2 = new Test2();
}
}
测试结果