zoukankan      html  css  js  c++  java
  • 静态域与静态方法

    • 静态域

    如果将域定义为static,每个类中只有这样一个域.而每一个对象对于所有的实例域却都有自己的一份拷贝.例如需要给每一个雇员赋予唯一的标识码.这里给Employee类添加一个实例域id和一个静态域nextId:

    class Employee{
        private static int nextId = 1;
        private int id;
        ......  
    }

    现在每个雇员对象都有一个自己的id域,但这个类的所有实例将共享一个nextId域.换句话说,如果有1000个Employee类的对象,则有1000个实例域id,但是,只有一个静态域nextId.即使没有一个雇员对象,静态域nextId也存在.它属于类,而不属于任何独立的对象.

    • 静态常量

    静态变量使用得比较少,但静态常量却使用得比较多.例如,在Math类中定义了一个静态常量:

    public class Math{
        ....
        public static final double PI = 3.1415926;
        ....
    }    

    在程序中,可以采用Math.PI的形式获得这个常量.

    如果关键字static被省略,PI就变成了Math类的一个实例域.需要通多Math类的对象访问PI,并且每一个Math对想都有它自己的一份PI拷贝.

    • 静态方法

    静态方法是一种不能向对象实施操作的方法.例如Math类的pow方法就是一个静态方法.表达式

    Math.pow(x,a);

    在运算时,不使用任何Math对象.换句话说,没有隐式的参数.

    可以认为静态方法是没有this参数的方法(在一个非静态方法中,this参数表示这个方法的隐式参数)

    Employee类的静态方法不能访问Id实例域,因为它不能操作对象.但是,静态方法可以访问自身类中的静态域.

    public static int getNextId(){
        return nextId;
    }

    可以通过类名调用这个方法

    int n = Employee.getNextId();

    注意:可以使用对象调用静态方法.例如,如果harry是一个Employee对象,可以使用Harry.getNextId()代替Employee.getNextId().不过,这种方式和容易造成混淆,其原因是getNextId方法计算的结果与harry毫无关系,所以建议使用类名,而不是对象来调用静态方法

    一般在下面两种情况下使用静态方法:

    • 一个方法不需要访问对象状态,其所需参数都是通过显示参数提供(例如:Math.pow)
    • 一个方法只需要访问类的静态域(例如:Employee.getNextId())
  • 相关阅读:
    java之day4补充
    java之day4
    JAVA之day3对象
    JAVA之DAY3
    JAVA之DAY2
    element-ui表格添加复选框及根据列表中的数据判断是否可选
    h5手机端上传多张图片(界面上的展示图片,删除图片)
    模态框-开启关闭事件
    Vue-粒子特效(vue-particles)
    网页常用代码片段-sessionStorage存储JSON
  • 原文地址:https://www.cnblogs.com/liuzhidao/p/13704680.html
Copyright © 2011-2022 走看看