Java中的 static
创始人
2024-06-03 00:32:30
0

1 static 静态变量

1.1 静态变量的使用

static变量也称作静态变量,也叫做类变量

静态变量被所有的对象所共享,在内存中只有一个副本

当且仅当在类初次加载时会被初始化

静态变量属于类

通过类名就可以直接调用静态变量

也可以通过对象名.静态变量名调用

static 变量

public class Student{private String name;private static String schoolName;private static int count;public Student(String name){this.name = name;count++;}public void showStuInfo(){System.out.println("学生的姓名是" + this.name + ",学校的名字是" + Student.schoolName);}public static void main(String[] args){Student.schoolName = "实验中学";Student s1 = new Student("张三");Student s2 = new Student("李四");Student s3 = new Student("王五");s1.showStuInfo();s2.showStuInfo();s3.showStuInfo();System.out.println("学生的数量是:" + Student.count);System.out.println("学生的数量是:" + s1.count);}
}

1.2 实例变量和静态变量区别

  • 静态变量属于类,该类不生产对象,通过类名就可以调用静态变量;

实例变量属于该类的对象,必须产生该类的对象,才能调用实例变量。

  • 静态变量随着类的加载,存在于方法区中;

实例变量随着对象的建立,存在于堆内存中。

  • 静态变量在程序开始时创建,在程序结束时销毁;

实例变量在对象创建时创建,在对象被销毁时销毁。

2 静态方法

static修饰的方法,叫静态方法,也叫做类方法

静态方法中,不能直接访问非静态成员变量和非静态成员方法

静态方法中,不能使用 this 关键字

通过类名可以直接调用静态方法

也可以通过对象名.静态方法名调用

静态方法和静态方法访问

public class Student{private String name;private int age;private int studentId;private static String classRoom;public static void showClassRoom(){//静态方法中不能使用this关键字System.out.println("教室3301");}public static void main(String[] args){Student.showClassRoom();}
}

3 静态块

3.1 静态块的使用

静态代码块在类加载时执行,并且只执行一次

静态代码块中不能有this关键字

静态块可以有多个,按照顺序执行

public class Emp{static{System.out.println("欢迎");}static{System.out.println("再次光临");}
}

3.2 静态块、匿名构造块、构造函数

执行顺序

public class Son{static{System.out.println("静态块1");}private String name;public Son(String name){this.name = name;System.out.println("构造方法");}{System.out.println("匿名构造块");}static{System.out.println("静态块3");}public static void main(String[] args){Son s1 = new Son("张三");Son s2 = new Son("李四");Son s3 = new Son("王五");}
}

输出如下:

静态块1

静态块3

匿名构造块

构造方法

匿名构造块

构造方法

匿名构造块

构造方法

执行的顺序为:静态块 --> 匿名块 --> 构造方法

4 静态引入

如果我们需要频繁引用某一个类下的方法,比如 ​​java.lang.Math​​​ 类下相关的数据计算类,或者是用于进行单元测试的 ​​org.junit.Assert​​ 类下各种用于断言的方法,就可以采用静态引用,从而可以省去对前边类名的重复书写。

import static java.lang.Math.random;
import static org.junit.Assert.assertTrue;public class test {public static void main(String[] args) {double random = random(); //Math中的方法System.out.println(random);assertTrue(random > 0.3); //Assert中的方法new test().normalMethod();}//静态引入的方法,在普通方法中同样使用public void normalMethod(){double random = random();System.out.println(random);assertTrue(random > 0.7);}
}

通过静态引入的方法,在普通方法和静态方法中,都可以使用。

相关内容

热门资讯

专业师傅教你“奔富棋牌到底有挂... 专业师傅教你“奔富棋牌到底有挂吗?其实是有挂(揭秘手机上必赢技巧)是一款可以让一直输的玩家,快速成为...
专业师傅教你“雀神麻将到底有挂... 专业师傅教你“雀神麻将到底有挂吗?其实是有挂(揭秘手机上必赢技巧)一、雀神麻将AI软件牌型概率发牌机...
专业师傅教你“欢乐四喜到底有挂... 您好,欢乐四喜这款游戏可以开挂的,确实是有挂的,需要了解{请加QQ群客服咨询:1075075785}...
热点推荐“红洞王牌到底有没有透... 您好:红洞王牌确实真的有挂,软件请加QQ群客服咨询:1075075785确实是有挂的,很多玩家在这款...
热点推荐“姚记扯旋到底有没有透... 热点推荐“姚记扯旋到底有没有透视挂吗”原来真的有挂1、让任何用户在无需AI插件第三方神器的情况下就能...
热点推荐“哥哥斗地主到底有没有... 热点推荐“哥哥斗地主到底有没有透视挂吗”原来真的有挂是一款可以让一直输的玩家,快速成为一个“必胜”的...
热点推荐“功夫小熊到底有没有透... 您好:功夫小熊确实真的有挂,软件加微信【7198902】确实是有挂的,很多玩家在这款游戏中打牌都会发...
热点推荐“相约麻将十三水到底有... 热点推荐“相约麻将十三水到底有没有透视挂吗”原来真的有挂一、相约麻将十三水AI软件牌型概率发牌机制”...
热点推荐“色猫到底有没有透视挂... 您好,色猫这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打牌都...
热点推荐“山西棋牌到底有没有透... 您好:山西棋牌确实真的有挂,软件加微信【7198902】确实是有挂的,很多玩家在这款游戏中打牌都会发...
热点推荐“神赚棋牌到底有没有透... 亲,神赚棋牌这款游戏可以开挂的,确实是有挂的,。但是开挂要下载第三方辅助软件,神赚棋牌的开挂软件,名...
热点推荐“盛世娱乐到底有没有透... 热点推荐“盛世娱乐到底有没有透视挂吗”原来真的有挂;原来确实真的有挂(需添加指定薇7198902获取...
热点推荐“丰城比奖到底有没有透... 热点推荐“丰城比奖到底有没有透视挂吗”原来真的有挂1、让任何用户在无需AI插件第三方神器的情况下就能...
热点推荐“逍遥阁到底有没有透视... 热点推荐“逍遥阁到底有没有透视挂吗”原来真的有挂1、让任何用户在无需AI插件第三方神器的情况下就能够...
热点推荐“非非互娱到底有没有透... 热点推荐“非非互娱到底有没有透视挂吗”原来真的有挂1、让任何用户在无需AI插件第三方神器的情况下就能...
热点推荐“丫丫古诗到底有没有透... 热点推荐“丫丫古诗到底有没有透视挂吗”原来真的有挂1、让任何用户在无需AI插件第三方神器的情况下就能...
热点推荐“朋友圈到底有没有透视... 热点推荐“朋友圈到底有没有透视挂吗”原来真的有挂1、让任何用户在无需AI插件第三方神器的情况下就能够...
热点推荐“祥运斗地主到底有没有... 热点推荐“祥运斗地主到底有没有透视挂吗”原来真的有挂一、祥运斗地主AI软件牌型概率发牌机制”必胜“技...
热点推荐“比奇堡到底有没有透视... 您好,比奇堡这款游戏可以开挂的,确实是有挂的,需要了解加微{7198902}很多玩家在这款游戏中打牌...
热点推荐“四方麻将到底有没有透... 热点推荐“四方麻将到底有没有透视挂吗”原来真的有挂1、让任何用户在无需AI插件第三方神器的情况下就能...