Java中static关键字

static变量

static变量为静态变量,static关键字本来就是静态的意思。静态变量与非静态变量的区别是:静态变量为所有对象共享,在内存中的数据区,它当且仅当在类加载时被初始化被加载初始化。而非静态变量是对象所拥有的,在对象被创建时被初始化。
static变量的初始化顺序按照定义的顺序进行初始化。

static方法
格式 pulbic static 返回值 方法名(形参列表){方法体}
静态成员方法注意事项

1,静态成员方法推荐使用静态方式调用,即通过类名直接调用,不推荐使用实例化对象进行调用。
2,静态方法中不能使用非静态成员
3,静态方法中不能使用this关键字
4,静态成员方法可以使用类内的其他成员变量
5,静态成员方法可以通过new构造方法创建对象

静态成员方法相关解释

1,静态方法随着.class字节码文件的加载直接定义在方法区,此时的静态方法已经可以直接调用,此时没有执行创建实例化对象这一步,所以不推荐使用对象调用,因为此时并没有实例化对象。
2,静态方法不能调用非静态成员变量
静态方法和静态成员在字节码文件加载时就已经在方法区和数据区,但此时没有实例化对象,也就不存在对象的成员变量,通过静态方法就无法调用非静态成员变量,因为此时不存在成员变量.此时的成员变量只是一个逻辑片段,只有实例化对象之后,成员变量才被初始化,才存在堆内存中,可以被调用。
3,静态方法为什么不能使用this关键字
参考 https://blog.csdn.net/Kevinmakai/article/details/104333783
我们可以发现,this关键字的值和实例化对象的堆内存首地址值是一样的,this就是对对象的引用。而静态方法在没有实例化对象之前就已经进入方法区,可以执行,此时并没有对象,this关键字没有任何实际意义。或者说没有对象,就无法通过this这个关键字调用任何对象的成员变量和成员方法,因为此时this就没有意义,this是随着对象的创建而产生的。
4,静态成员方法可以调用静态变量。

在这里插入图片描述
在上面这张图中可以看到,当我们去掉mian函数前面的static时,程序并没有执行选项。因为main作为程序的入口,但是它依然在类Demo3里面,如果没有static,要想执行main函数,就必须对Demo3进行实例化,但是main函数作为程序的入口不可能先实例化在被调用,这样程序就没有入口了。
也就是说,加上static关键字,告诉编译器这是一个静态函数,在 .class(字节码文件)被加载时就执行main函数,这样就可以执行里面的 Father father = new Father(“狗狗”,‘雄’);创建实例化对象father,程序就可以运行了。
静态方法是属于类的,随着类的加载而加载。在类加载时,程序就为静态方法分配内存。非静态方法是属于对象的,先有类,后才有对象,通过类创建实例化对象。非静态方法是属于对象的,也就是说静态方法在对象创建之前就已经存在。当你创建一个对象是,程序为这个对象在堆内存中分配空间,并通过this指针指向该对象。所以静态方法不依赖与对象就可以调用。所以也就无法通过静态方法访问非静态的成员变量和非静态的成员方法。因为此时没有对象,也就没有成员变量和成员方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值