1、java的编译和运行
(1)Java编译器,把源文件.java文件编译成.class字节码文件
(2)JVM,把字节码文件转化成当前机器对应的机器语言。
过程:1、类的加载:把.class文件加载到方法区,被static修饰的存放在静态区,没有被static的放在非静态区
2、链接
3、运行
2、被Stactic修饰的变量或者方法存储在静态区的
3、Static修饰的成员变量
(1)加载到方法区的时候就分配内存,在方法区的静态区,先于类的对象存在,属于类,被所有类的对象共享,只有一份内存空间
(2)可直接通过类名调用,也可通过对象调用,但通过对象调用在编译后实际时类名调用
3、普通成员变量
(1)加载的时候没有分配内存,在创建类的实例对象时(new),在堆中分配内存,每个对象都有一份
(2)先实例化对象后,通过对象才能调用
4、Static修饰的成员方法(方法只有被调用的时候才会分配内存,静态成员方法也不例外)
(1)静态成员方法内部只能调用静态方法和静态变量,不能调用非静态方法和非静态变量,因为非静态方法和非静态变量只有实例化对象后才会分配内存空间,但是静态成员方法可以通过类名直接调用,这时候非静态方法和非静态变量并没有分配内存
(2)通过类名调用静态成员方法
(3)静态成员方法不压栈,被调用的时候,在方法区分配存储空间
(4)没有this关键字,因为this关键字用来指向当前对象的指针
5、普通的成员变量
(1)非静态成员方法能调用静态和非静态方法和静态和非静态变量
(2)通过对象调用静态成员方法
(3)非静态成员方法被调用时压栈,在栈中分配存储空间
(4)有this关键字,指向当前的对象的指针