JAVA实例说明静态方法和非静态方法的区别

JAVA实例说明静态方法和非静态方法在内存空间方面的区别

首先我们要了解Java运行会独占空间,该空间叫Java运行池(JVM),即将.class文件和.java文件放在磁盘中,运行时把.class文件加载到方法区,类里面存有方法,执行时将方法复制到栈里,运行结束后,将其清除。
若想在代码里对某一方法进行操作,该方法必须在内存里有自己的空间。

静态方法:当类加载静态方法区时,静态方法就已经在内存里拥有了自己的实际空间,因此静态方法无需实例化。

    public static int num;
    public static void main( String[] args ){
    	num = 23;
    	System.out.println("静态方法num = " + num");
    }

非静态方法:在内存中没有自己的实际空间,需要new一下,new的作用就是在堆里按照非静态的方式申请空间,存放非静态的信息。即非静态方法需要实例化

public String name;
public int age;
public static void main( String[] args ){   
    Test01 aa = new Test01();    //实例化,申请内存空间   
    aa.name = "张三";
    System.out.println("非静态方法name = " + aa.name);
}

图解如下:
JAVA实例说明静态方法和非静态方法的区别_第1张图片
在外部调用静态方法和非静态方法的区别:
调用静态方法时:可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。

public class Person{
    public static String name;
    public int age;
}

public class Test{
    public static void main( String[] ar ){
        Person.name = "张三";
        System.out.println("类名.方法名:name = " + Person.name);
        Person pre = new person();
        pre.name = "李四";
        System.out.println("对象名.方法名:name = " + pre.name);
    }
}

调用非静态方法时:只能先申请空间,故只可以使用"对象名.方法名"的方式。

public class Test{
    public static void main( String[] ar ){
         Person pre = new person();
         pre.age = 20;
         System.out.println("对象名.方法名:age = " + pre.age);
    }
}

图解如下:
JAVA实例说明静态方法和非静态方法的区别_第2张图片
当然静态方法在初始化之后也可以通过对象.方法调用。一旦静态对象被初始化了,那么他们永远也不会再被初始化,即初始化只会执行一次,只会分配一次空间。

你可能感兴趣的:(java,jvm,内存管理)