java中Static修饰符静态方法为什么不能调用非静态方法或变量

结论:静态方法只能调用静态方法(或者变量),非静态方法可以调用静态方法(或者变量)
原因:
类的静态成员(变量或方法)属于类本身,在类加载的时候就会分配内存,可以通过类名直接访问
非静态成员(变量或方法)属于类的对象,只有在类的对象产生(实例化)时才会分配内存,然后通过类的对象(实例)去访问
所以,如果一个类的静态方法去调用非静态方法或变量的时候,因为类的静态方法存在的时候,类的非静态成员可能不存在,访问一个内存中不存在的东西当然会出错
转载
——————————————————————————————————
拓展问题:为什么java中的声明为static的main方法能调用非静态方法或变量?
原因:必须通过初始化(new)一个对象后,通过对象来调用,否则会报错。

class A{
    public static void main(String[]args){
        A a = new A();
        a.printHello();
    }
 
    void printHello(){
        System.out.println("Hello");
    }
}
//结果正常
class A{
    public static void main(String[]args){
//      A a = new A();
//      a.printHello();
        printHello();//报错
    }
 
    void printHello(){
        System.out.println("Hello");
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,902评论 1 32
  • 整理来自互联网 1,JDK:Java Development Kit,java的开发和运行环境,java的开发工具...
    Ncompass阅读 5,449评论 0 6
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 7,631评论 0 11
  • 恨铁不成钢 恨花还未开 恨水总长流 恨你还未来 恨我不能 拥你满怀
    谢谢噢阅读 1,540评论 0 1
  • 因为公司离家比较近,大约30-40分钟,每天下班回家路真的是长路漫漫,和大家讲一下路上的事。 家附近的十字路口是车...
    Amy依依阅读 1,603评论 0 0

友情链接更多精彩内容