java 中static关键字

本文详细介绍了Java中的static关键字,包括静态成员变量和方法的生命周期、访问方式以及它们与非静态成员的区别。通过示例代码展示了static如何在不创建对象的情况下进行访问,强调了main方法为何需要是静态的。此外,还解释了静态方法不能直接访问非静态成员的原因。
摘要由CSDN通过智能技术生成

static关键字

在类中,用static声明的成员变量为静态成员变量,也称为类变量。类变量的生命周期和类相同,在整个应用程序执行期间都有效。

被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,JVM则会为这些成员变量和成员方法在固定的位置开辟一个固定大小的内存区域,就可以通过类名去进行访问。

public class A {
    public static void main(String[] args) {
        B.print();
    }
}
class B{
    public static void print(){
        System.out.println("Hello");
    }
}

输出:
Hello

同时被static修饰的成员变量和成员方法是独立于该类的,它不依赖于某个特定的实例变量,也就是说它被该类的所有实例共享。所有实例的引用都指向同一个地方,任何一个实例对其的修改都会导致其他实例的变化。

public class A {
    public static void main(String[] args) {
        B b1 = new B();
        B b2 = new B();
        b1.add();
        b2.add();
        System.out.println("b1中的值为:"+B.a);
        System.out.println("b2中的值为:"+B.a);
    }
}
class B{
    static int a = 0;
    public void add(){
        a++;
    }
}

static可以用来修饰类的成员方法、类的成员变量,另外也可以编写static代码块来优化程序性能

在这里插入图片描述
从上面代码里看出:

静态方法ave()中调用非静态成员变量b,编译失败。这是因为,在编译期并没有对象生成,b变量根本就不存在。

静态方法ave()中调用非静态方法add(),编译失败。从逻辑上来说,静态方法已经在编译的时候生成了,但是非静态方法需要对象才能生成,在静态方法里面没有创建B的对象,肯定不能调用它的非静态方法。所以也不允许在静态方法中调用非静态方法。

但是非静态成员方法add()访问静态成员方法ave(),静态变量a是没有限制的

所以,如果想在不创建对象的情况下调用某个方法,就可以将这个方法设置为static。最常见的静态方法就是main方法,这就是为什么main方法是静态方法就一目了然了,因为程序在执行main方法的时候没有创建任何对象,只有通过类名来访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值