Java--静态字段与静态方法

1、静态字段

如果将一个字段定义为static,每个类只有一个这样的字段。而对于非静态的实例字段,每个对象都有自己的一个副本。

例如:

java 复制代码
class Employee 
{
    private static int nextId = 1;
    
    private int id;
    ...
}

其中,每一个Employee对象都有一个自己的id字段,但这个类的所有实例将共享一个nextId字段。换句话说,如果有1000个Employee类对象,则有1000个实例字段id,分别对应每一个对象。但是,只有一个静态字段nextId。即使没有Employee 对象,静态字段nextId 也存在。它属于类,而不属于任何单个的对象。

注释:

在一些面向对象程序设计语言中,静态字段被称为类字段。术语"静态"只是沿用了C++的叫法,并无实际意义。

2、静态常量

Math类中的一个静态常量

java 复制代码
public class Math
{
    ...
    public static final PI = 3.1415926535897932846;
    ...
}

在程序中用Math.PI来访问这个变量。

如果省略关键字static, PI 就变成了Math 类的一一个实例字段。也就是说,需要通过Math类的一个对象来访问PI,并且每一一个Math对象都有它自己的一个PI副本。

System类中你的一个静态常量

java 复制代码
public class System
{
    ...
    public static final PrntStream out = ...;
    ...
}

静态常量只能访问,不能直接修改。

如:

java 复制代码
System.out = new PrintStream(...); // ERROR--out is final

3、静态方法

静态方法是不在对象上执行的方法。例如,Math类中pow方法就是一个静态方法。表达式:Math.pow(x,a).

Employee类的静态方法不能访问id实例字段,因为它不能在对象上执行操作。但是,静态方法可以访问静态字段。

示例:

java 复制代码
public static int getNextId()
{
    return nextId; //返回静态字段
}

可以直接用类名调用该方法:

java 复制代码
int n = Employee.getNextId();

在下面两种情况下可以使用静态方法:

  • 方法不需要访问对象状态,因为它需要的所有参数都通过显式参数提供(例如:(Math.pow)。
  • 方法只需要访问类的静态字段( 例如: Employee . getNextId)。

4、main方法

​ 需要注意,可以调用静态方法而不需要任何对象。例如,不需要构造Math类的任何对象就可以调用Math,pow。同理,main 方法也是-一个静态方法。

java 复制代码
public class Application
    public static void main(String[] args)
    	// construct objects here
   		 ...
    }
}

​ main方法不对任何对象进行操作。事实上,在启动程序时还没有任何对象。静态的main方法将执行并构造程序所需要的对象。

提示:

每一个类可以有一个main方法。这是常用于对类进行单元测试的一个技巧。例如,可以在Employee类中添加一个main方法:

java 复制代码
class Employee
public Employee(String n, double s, int year, int month, int day)
{
   name = n;
   salary = s;
   hireDay = LocalDate. of(year, month, day);
}
public static void main(String[] args) // unit test
{
   var e = new Employee("Romeo", 50000, 2003, 3, 31);
   e.raiseSalary(10);
   System.out . println(e.getName() +""+ e.getSalary());
}

如果想要独立地测试Employee类,只需要执行

java 复制代码
java Employee

如果Employee类是一个更大型应用程序的一部分,就可以使用下面这条语句运行程序

java 复制代码
java Application

Employee类中的main方法永远不会执行

相关推荐
小小寂寞的城8 分钟前
Jenkins里构建一个简单流水线
java·运维·jenkins
wowocpp26 分钟前
idea springboot 配置文件 中文显示
java·spring boot·intellij-idea
User_芊芊君子29 分钟前
【Java面试题】——this 和 super 的区别
java·开发语言
柴薪之王、睥睨众生30 分钟前
(自用)Java学习-5.8(总结,springboot)
java·开发语言·spring boot·学习·mybatis
牛马baby30 分钟前
Java高频面试之并发编程-17
java·开发语言·面试
不辉放弃1 小时前
java连数据库
java·mysql
熊大如如9 小时前
Java 反射
java·开发语言
猿来入此小猿9 小时前
基于SSM实现的健身房系统功能实现十六
java·毕业设计·ssm·毕业源码·免费学习·猿来入此·健身平台
goTsHgo10 小时前
Spring Boot 自动装配原理详解
java·spring boot
卑微的Coder10 小时前
JMeter同步定时器 模拟多用户并发访问场景
java·jmeter·压力测试