有无Static修饰的成员函数和成员变量的区别

本文详细介绍了Java的编译和运行过程,包括JVM如何将字节码转化为机器语言,以及静态和非静态成员变量与方法的区别。静态成员在类加载时即分配内存,可通过类名直接调用;而非静态成员在对象创建时分配内存,只能通过对象调用。此外,还阐述了静态方法和非静态方法的调用特点以及内存分配情况。
摘要由CSDN通过智能技术生成

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关键字,指向当前的对象的指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值