From f521cf869883c3c6bf40cdf2924a2ed54b20f4b0 Mon Sep 17 00:00:00 2001 From: sunguoliang Date: Fri, 23 Apr 2021 09:40:32 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9D=99=E6=80=81=E6=96=B9=E6=B3=95=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E9=9D=9E=E9=9D=99=E6=80=81=E6=88=90=E5=91=98=E8=A1=A8?= =?UTF-8?q?=E8=BF=B0=E4=B8=8D=E5=87=86=E7=A1=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/java/basis/Java基础知识.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/java/basis/Java基础知识.md b/docs/java/basis/Java基础知识.md index 86e233be..2aea1f50 100644 --- a/docs/java/basis/Java基础知识.md +++ b/docs/java/basis/Java基础知识.md @@ -790,7 +790,7 @@ public void f5(int a) { ### 在一个静态方法内调用一个非静态成员为什么是非法的? -由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。 +这个需要结合 JVM 的相关知识,静态方法是属于类的,在类加载的时候就会分配内存,可以通过类名直接访问。而非静态成员属于实例对象,只有在对象实例化之后才存在,然后通过类的实例对象去访问。在类的非静态成员不存在的时候静态成员就已经存在了,此时调用在内存中还不存在的非静态成员,属于非法操作。 ### 静态方法和实例方法有何不同?