java基础静态与非静态

静态

java中static修饰的变量、常量、方法、类叫做静态的变量、常量、方法、类,而非静态就是没有static修饰

静态和非静态的区别

静态是指在JVM装载的时候,所有静态的东西也会一并装载到内存中,也就是说在加载一个类的时候所有静态的东西,就已经在内存中加载好了,所以静态的量不依赖于对象的存在而存在,可以在不实例化对象的情况下使用静态的量。
而非静态的量是相对于对象而言的,比如实例变量、实例方法他们都是依赖于对象而存在的只有对象创建了,才会给属于该对象的变量、方法分配内存空间。所以想引用实例变量或者实例方法必须先新建该实例的对象,然后通过对象去调用变量和方法。

1. 静态变量:

由static关键字修饰的变量,在JVM中静态变量的加载顺序在对象之前,因此静态变量不依赖于对象而存在,可以在不实例化对象的情况下直接使用静态变量;

2. 静态方法:

由static关键字修饰的方法,静态方法和静态成员变量一样属于类本身,在JVM装载时,就被装载进入内存中,会一直存在于内存中,不会进行自行的销毁,直到JVM关闭。使用的时候也不需要实例化类,直接通过方法名调用进行使用。静态方法不能够被重写。值得注意的是在静态方法中只能调用该类的静态成员变量和静态方法,无法直接使用实例变量和实例方法,如果想要使用实例变量和实例方法可以先创建该实例的对象,然后通过对象来调用实例变量和实例方法

3. 实例变量:

必须依赖于对象存在,只有实例化后才能使用

4. 实例方法:

实例方法属于对象,对象被实例化后才会被分配内存,必须通过类的实例来引用,不会在内存中一直存在,当实例对象被JVM回收之后,实例方法分配的内存空间也随着消失。

5. **线程安全问题:

由于静态方法是共享代码段,静态变量是共享数据段,所以存在高并发的问题;而非静态方法是针对确定的对象的,所以不存在线程安全的问题。而且如果静态的量定义的太多,就会大量占用系统的内存,最终导致内存溢出,所以静态方法要慎用,不要滥用。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值