您的位置 首页 java

Java 中static和非static有什么区别

Java static 和非static有什么区别

JAVA中有关键字 static ,可以修饰方法或者字段。那么, static 修饰的方法和字段,与没有 static 修饰的方法和字段,有什么区别呢?

在JAVA中,大部分方法和字段都是没有被 static 修饰的,也被称为 实例变量 实例方法 ,而被 static 修饰的则叫做 静态变量 静态方法

实例方法和实例变量

实例方法一般是一个new 出来的对象关联的方法,只能在一个new出来的实例上使用,实例变量也是与new 出来的对象关联,不同的对象之间实例变量不互相影响。
实例方法内部可以使用实例变量和静态变量。
下面是一个相关示例:

 // 类声明
class ClassA {
    // 实例变量
     private  int val;

    public ClassA(int val) {
        this.val = val;
    }

    // 实例方法
    public  void  hello() {
        // 使用实例变量
        System.out.println("hello" + val);
    }
}


// 使用
ClassA classA1 = new  Class A(1);
// 使用实例方法
// 输出 hello1
classA1.hello();

ClassA classA2 = new ClassA(2);
// 输出 hello2
// classA2里面的val变量是独立的,与classA1无关
classA2.hello();
  

静态方法和静态变量

静态变量和静态方法是 独立存在 的,并且 每个类的 静态变量 只有一份,不论这个类new了多少对象 。所有new出来的对象都可以访问到这一份数据,对这份数据的任何修改,其他的实例都可以看到。
静态方法由于是独立存在的,不和任何一个实例关联,所以不能直接访问实例变量和实例方法。如果想要访问,只能通过某个实例的引用来访问实例变量和实例方法。

以下面这个类为例,解释一下上面的关系:

 class ClassA {
    // 实例变量
    private int val;
    private static int staticVal;
}
  

关系如图所示:

可以看到,静态变量和静态方法是独立的,各个实例只是单向地访问他们。另外,他们不仅仅可以被这个类的实例访问,也可以被其他类直接访问。

静态变量和静态方法的访问方式

静态变量和静态方法一般通过类名访问,比如 ClassA.staticVal ,它可以被实例的引用访问,但是一般不建议,比如: classA1.staticVal 。使用类名访问可以明确标识出这是静态变量,可以使代码更加清晰。

文章来源:智云一二三科技

文章标题:Java 中static和非static有什么区别

文章地址:https://www.zhihuclub.com/182839.shtml

关于作者: 智云科技

热门文章

网站地图