关于Java虚拟机,jdk与jre还有sattic

Java虚拟机是一个可以执行字节码文件的虚拟机进程,java源文件被编译成能被java虚拟机执行的字节码文件,因此java虚拟机使得java具有了跨平台性。

jdk:java开发工具包,是完整的Java软件开发包,包含了JRE,编译器和其他的工具(比如:JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。

jre:Java运行时环境,是将要执行Java程序的Java虚拟机。

static关键字: “static”关键字表明一个成员变量或者是成员方法可以在没有所属的类的实例变量的情况下被访问。

          Java中static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static方法跟类的任何实例都不相关,所以概念上不适用。

 1、static修饰成员变量和方法

 2、修饰成员变量:整个类的实例共享该属性,可通过类直接调用该属性

 3、修改方法:类可以直接调用该方法,静态方法只能调用static修饰过的变量和类中的方法。而非静态方法没有限制,

   4、注意:static修饰过的成员变量或方法,跟着类的加载就加载到了内存,所以类可以直接调用这些修饰过的属性和方法,而静态方法只能调用static修饰          过的属性和方法也是因为这个原因,静态属性和方法先于非静态属性和方法加载,所以静态方法调用属性时,非静态还没加载完呢, 而当非静态调用静          态时,就没有这个顾虑。

 5、覆盖,也就是重写, 前提条件是需要继承,父类中用private修饰的方法,对子类都不可见,继承不了,所以没有所谓的重写

 6、不能重写static的方法,原因是 static在编译时期静态绑定的, 而方法的重写是基于运行时动态绑定的,而且static方法跟类的实例没有任何的关系。

   7、又抛出了运行时绑定的一些相关问题。运行时绑定又称动态绑定:前提是有继承、重写、父类对象指向子类实例, 这样就产生了多态,在运行时才能知          道父类对象指向了哪个子类实例。例如:B b = A a();在运行时才能知道b中存放着A实例a的地址。编译时绑定成静态绑定:就是在编译期间就已经            加载到了内存,包括private、static、final修饰的变量和方法,还有构造函数,都是静态绑定

static都跟随类的加载而加载,优先于非static变量。

猜你喜欢

转载自blog.csdn.net/weixin_32418175/article/details/80642359