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类型。

  • 相关阅读:
    冲刺五
    ubuntu安装utorrent
    struts2中properties属性
    Hadoop下的word count程序
    导入svn项目时eclipse崩溃
    Struts2 中jsp直接跳转到action
    用eclipse开发hadoop程序
    ubuntu下安装java
    【橙色警报】最新盗qq号方式,连我这个老鸟都一不小心被骗了
    在ubuntu上安装hadoop(书和官方文档结合的)
  • 原文地址:https://www.cnblogs.com/yangmingxianshen/p/12500887.html
Copyright © 2011-2022 走看看