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方法开始执行,压如栈底,整个程序都调用结束才出栈。

 
  

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

 
  

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

 
  

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

 
  

 

 
  

 

 
  

 

 
 

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

转载于:https://www.cnblogs.com/itBulls/articles/8944993.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值