java入门基础 static final 关键字 修饰符 解释(通俗易懂)
-
final
和static
和final static
区别解释?- static是用来修饰静态资源的(包括类、方法、变量等),final 是用来保证当前变量为常量,final static即保证为静态常量(意思就是不依赖于对象去调用,也不可以被改变)
- final 可以用在方法参数声明中,保证引用变量不会被改变(只读)。
-
这其中也需要看所修饰的为对象还是变量或者常量
首先解释一下static所修饰的变量、方法、类它们都是可以单独存在,静态类一定是静态内部类
-
静态内部类可以声明普通成员变量和方法,而普通内部类不能声明static变量和方法(final static为除外,他本质也是常量)。
-
静态内部类使用场景一般是当外部类需要使用内部类,而内部类无需依赖于外部类资源,并且内部类可以单独创建的时候
可修饰的位置介绍:
- 静态内部类和静态变量可无限套娃:static 可修饰成员变量和方法和内部类。
class T1 { static int n; public static void t() { } static class T2{ static int n; static class T3{ static int n; } } public static void main(String[] args) { System.out.println(T1.n); System.out.println(T1.T2.n); System.out.println(T1.T2.T3.n); } }
不可修饰的位置注意点:
- 内部类(非静态)不能有静态声明(成员变量、方法)原因:非静态内部类需要实例化外部类去调用该类,
class C1 { static int n; class C2 { static int n; // 编译报错: Inner classes cannot have static declarations } }
-
非静态变量、方法、类不可以被静态方法实例化引用
由于 this(main函数)为静态方法,相当于一定存在,但是 类C2 非静态(说明他为类C1的成员),静态方法main() 一定存在,编译器也需要方法内的实例化对象或者说引用的对象一定存在,但是类C2存在的前提是类C1实例也存在(无法保证)。
如下列代码中,可通过本类的非静态方法去实例化内部类调用方法,因为这样保证了C1类实例一定是存在的。
class C1 { class C2 { private int id; private String name; public void test2(){ } } public static void main(String[] args) { C2 c2 = new C2(); // 编译不通过, java: 无法从静态上下文中引用非静态 变量 this C1 c1 = new C1(); // 正确调用C2.test2() c1.test1(); } public void test1() { C2 c2 = new C2(); c2.test2(); } }
总结:无论是变量、方法、类。它们都可称为资源,所谓资源的静态和非静态。即静态资源就是可单独存在,非静态资源需要依赖于实例对象去调用,他不可单独存在。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY