zoukankan      html  css  js  c++  java
  • Java中静态字段和静态方法

    在一个class中定义的字段,我们称之为实例字段。
    实例字段的特点是,每个实例都有独立的字段,各个实例的同名字段互不影响。

    还有一种字段,使用static修饰的字段,称为静态字段:static field

    实例字段在每个实例中都有自己的一个独立“空间”,但是静态字段只有一个共享“空间”,所有实例会共享该字段。

    package com.imooc.objectoriented;
    
    class Person {
        public String name;
        public int age;
        public static int number;
    
        public Person(String name,int age) {
            this.name = name;
            this.age = age;
        }
    }
    
    public class ObjectMethod2 {
        public static void main(String[] args) {
            Person ming = new Person("ming",18);
            Person mao = new Person("mao",26);
            ming.number = 88;
            System.out.println(mao.number);  //应改是默认值
            mao.number = 99;
            System.out.println(ming.number);
        }
    }

    对于静态字段,无论修改哪个实例的静态字段,效果都是一样。
    所有实例的静态字段都被修改了,原因是:静态字段并不属于实例。

    虽然实例可以访问静态字段,但是它们指向的其实都是Person class字段。
    所以,所有实例共享一个静态字段。

    可用通过 实例变量.静态字段 去访问静态字段。
    在Java程序中,实例对象并没有静态字段。
    推荐使用 类命.静态字段。

    有静态字段,就有静态方法。用static修饰的方法称为静态方法。
    调用实例方法必须通过一个实例变量,而调用静态方法则不需要实例变量,通过类命就可以调用。
    静态方法类似其他编程语言的函数。

    package com.imooc.objectoriented;
    
    class Person {
        public static String name;
        public static void setName(String na) {
            name = na;   //无法调用this,也无法访问实例字段,只能访问静态字段。
        }
    }
    
    public class ObjectMethod2 {
        public static void main(String[] args) {
            Person.setName("ming");  //不需要实例化对象,可以直接调用
            System.out.println(Person.name);
        }
    }

    因为静态方法属于class而不属于实例,因此,静态方法内部,无法访问this变量,
    也无法访问实例字段,它只能访问静态字段。
    通过实例变量也可以调用静态方法,但这只是编译器自动帮我们把实例改成类命而已。
    通常情况下,通过实例变量访问静态字段和静态方法,会得到一个编译警告。
    静态方法经常用于工具类。例如:

        Arrays.sort()
        Math.random()

    态方法也经常用于辅助方法。注意到Java程序的入口main()也是静态方法。

    接口的静态字段
    因为interface是一个纯抽象类,所以它不能定义实例字段。
    但是,interface是可以有静态字段的,并且静态字段必须为final类型。

    public interface Person {
        public static final int MALE = 1;
        public static final int FEMALE = 2;
    }

    实际上,因为interface的字段只能是public static final类型,
    所以我们可以把这些修饰符都去掉,上述代码可以简写为:

    public interface Person {
        int MALE = 1;
        int FEMALE = 2;
    }

    编译器自动把字段变为public static final类型。

  • 相关阅读:
    软件版本 —— Alpha、Beta、RC版本的区别
    linux删除回收站提示权限错误
    Centos7系统备份和还原脚本
    搭建Docker私服
    在深度Deepin 15.11系统上安装Python 3.7.4版本的方法
    Dockerfile范例
    Remmina无法远程连接的解决方法
    再生龙教程——对于Centos7进行备份和还原
    共享Excel编辑的一些资源
    【转载】怎样编写概要设计
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/12500887.html
Copyright © 2011-2022 走看看