写在开头
静态(static)关键字在Java的众多关键字中举足轻重!也是很多大厂面试官特别喜欢问的面试高频知识点,今天我们就一起学习,梳理,重温一下这个关键吧,之所以用重温修饰是因为在过往的文章中早已提到了static,无论是变量中还是方法中甚至于类中,static都是不可或缺的!
我们知道要想调用类中的属性和方法,通常情况下,需要创建一个对象,初始化完成之后,通过对象的引用去访问,而static修饰的方法和变量为类所有,因此,可以直接跳过对象的初始化,主要类被加载了就可以直接通过类名.属性名/方法名进行直接调用!
一、静态变量
【代码示例】
public class Person { //成员变量 //在类内部但在方法体外声明的变量称为成员变量,或者实例变量,或者字段。 //之所以称为实例变量,是因为该变量只能通过类的实例(对象)来访问。 int data1 = 3; //静态变量 //通过 static 关键字声明的变量被称为静态变量(类变量), //它可以直接被类访问 static int data2 = 4; public int sum(){ //局部变量 //在方法体内声明的变量被称为局部变量,该变量只能在该方法内使用, //类中的其他方法并不知道该变量。 int a = 1; int b = 2; return a+b; } public static void main(String[] args) { Person person = new Person(); System.out.println(person.data1 == person.sum()); System.out.println(Person.data2 == person.sum()); } }
二、静态方法
【代码示例】
public class Test { public static void main(String[] args) { System.out.println(sub(2,1)); } //若方法的声明中加上了static关键字,静态方法是属于类的, //而不是属于类创建的对象或实例的,故在调用时无需通过对象实例。 public static int sub(int a,int b){ return a - b; } }
三、静态代码块
虽然静态代码块和main()方法都被static修饰,但静态代码块通常用来初始化一些静态变量,它会优先于 main() 方法执行。来段代码感受一下:
【代码示例】
public class Test { public static void main(String[] args) { System.out.println("main 方法"); } static { System.out.println("静态代码块"); } }
输出:
静态代码块 main 方法
四、静态内部类
静态嵌套类,并没有对实例的共享关系,仅仅是代码块在外部类内部
静态的含义是该内部类可以像其他静态成员一样,没有外部类对象时,也能够访问它
静态嵌套类仅能访问外部类的静态成员和方法
在静态方法中定义的内部类也是静态嵌套类,这时候不能在类前面加static关键字。
【代码示例】
class OuterFish { static class InnerFish { } } class TestStaticFish { public static void main(String[] args) { //创建静态内部类对象 OuterFish.InnerFish iFish = new OuterFish.InnerFish(); } }
static在Java中的主要用法就这么多了,那么好,接下来我们就根据它的用法来进行最后的总结
总结
1、static 可以修饰变量、方法、代码块和内部类 static 变量是这个类所有,由该类创建的所有对象共享同一个 static
2、可以通过创建的对象名.属性名 和 类名.属性名两种方式访问 static 变量在内存中只有一份 static
3、修饰的属性,也就是类变量,是在类加载时被创建并进行初始化,只会被创建一次 static 修饰的变量可以重新赋值 static
4、方法可以通过对象名.方法名和类名.方法名两种方式来访问 static 方法中不能用 this 和 super 关键字 static
5、方法必须被实现,而不能是抽象的abstract static 方法不能被重写 static
6、代码块在类被第一次加载时执行静态代码块,且只被执行一次,主要作用是实现 static 属性的初始化 static
7、内部类属于整个外部类,而不属于外部类的每个对象,只可以访问外部类的静态变量和方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律