Java静态

静态方法

Java是面向对象的,但若处于某种特殊情况下(通常是实用方法),则不需要类的实例。static这个关键词可以标记出不需类实例的方法。一个静态的方法就是不需要实例变量、不需要对象的行为。

带有静态方法的含义

带有静态方法的类通常不打算要被初始化。
想要不让类被初始化可以有两种途径:

  • 用abstract标记类。抽象的类不能被初始化。
  • 用私有的构造函数来限制非抽象类被初始化(Math防止被初始化的方法)。

Math类

Math方法不需要创建Math实例就可使用,我们用的是类本身。

Math

静态变量

静态变量的值对所有实例来说都相同,静态变量是被同类的所有实例共享的变量。
静态变量会在该类的任何静态方法执行前就初始化。(默认值与实例变量相同)


public class Duck {
    private int size;
    public static int duckCount = 0;

    public Duck() {
        duckCount++;
        size = 20;
    }


    public static void main(String[] args) {
        System.out.println(Duck.duckCount);//实例创建前
        Duck d1 = new Duck();

        //类和类的实例共享静态变量

        System.out.println(d1.duckCount);
        Duck d2 = new Duck();
        System.out.println(Duck.duckCount);
        Duck d3= new Duck();
        System.out.println(d2.duckCount);
    }
}

输出:

0
1
2
3

静态的final变量是常量

一个被标记为final的变量代表它一旦被初始化之后就不会改动,也就是说类加载之后静态final变量就一直维持原值。以Math.PI为例:

public static final double PI = 3.141592653589793;
  • 此变量被标记为public,因此可供各方读取。
  • 此变量被标记为static,不需要Math实例。
  • 此变量被标记为final,其值不可改变。

静态final变量的初始化:

静态final变量必须人工初始化。

声明的时候
public class Foo {
    public static final int FOO_X = 20;
}
在静态初始化程序中

静态初始化程序是一段在加载类时会执行的程序代码,它会在其它程序可以调用该类之前就执行,所以很适合放静态final变量的起始程序。

public class Foo {
    public static final int FOO_X;
    static {//这段程序在类被加载时执行
        FOO_X = 20;
    }
}

非静态final变量

  • final的变量代表不能改变它的值。
  • final的方法不能被覆盖。
  • final的类不能被继承。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值