JAVA中static关键字详解、静态方法为什么不能访问非静态的方法和非静态的变量

public class _04static {
    //静态变量(类成员变量)
    static int number = 10;
    //非静态变量(实例成员变量)
    int sum = 100;
    
    public static void computerNumber() {
        System.out.println("通过类名访问的数量是: "+_04static.number);
    }

    public static void main(String[] args) {
        //类调用静态方法
        _04static.computerNumber();
        
        _04static s = new _04static();
        //对象访问属性
        System.out.println("通过对象访问的数量是————: "+s.number);
        
        System.out.println("========对象调用=============");
        //对象调用方法
        s.computerNumber();

    }

}

一、程序执行流程
1、从硬盘读取文件到内存
2、编译生成.class字节码
3、字节码存放在jvm内存中的方法区、把类中所有static修饰的方法和变量都存放在方法区中。
4、找到main()方法,程序入口进行运行,
5、调用方法必须开辟栈,把main()方法,压入到栈底。
6、开始执行main方法中的代码块,次时:静态方法、变量之间可以互相调用。
7、此时 静态方法已经存在,但是对象没有创建出来,非静态方法和变量是和实例对象绑定在一起的,所以静态方法不能访问。
8、对象在new的一瞬间才调用构造方法进行对成员变量初始化,对象在调用完成后就成为垃圾等待回收
9、对象已死,事情干完了,main()方法出栈,程序结束。
10.但是jvm内存中方法区中存放的.clss文件、静态方法、变量都一直存活着!于孤魂野鬼一般游走于方法区中,直到JVM关闭,才得以转世投胎!

二、static关键字修饰的内容的特性!

1.1.1      Static 修饰的内容都在方法区


1.1.2       Static 修饰的属性、方法属于类。


1.1.2.1   Static 修饰的属性、方法属于类。那么对象是怎么访问的?本质:(查看反编译代码,系统自动转换为类名进行调用)


1.1.3      类名、对象名 . Static 修饰的属性、方法进行访问。


1.1.4      Static 修饰的内容优先于对象存在(先有静态的方法、属性,后创建对象后才有 非静态的方法。属性)


1.1.5      Static 修饰的内容,被该类型的所有对象共享、


1.1.6      需要共享的才设置成static


1.1.7    只有非privatestatic成员才能通过类名的 方式访问。


1.1.8    非静态方法可以访问静态成员、非静态方法。


1.1.9    静态方法不可以访问 非静态成员


1.1.10静态变量,当java虚拟机停止的时候才消失


静态方法为什么不能方法非静态方法,静态方法main方法开始执行,压如栈底,整个程序都调用结束才出栈。


静态方法在没有创建对象时就已经存在,所有静态方法直接可以互相调用,


非静态方法和变量是属于对象的,不能访问。


(通俗一点:你想去取隔壁美女的女儿做老婆,但是美女还没怀孕呢!)


 


 


 


 如有错误之处:欢迎批评指正!本人将万分感激!互相学习!

posted @ 2018-04-25 15:23  马鞍山  阅读(789)  评论(0编辑  收藏  举报