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方法永远不会执行

相关推荐
m0_736927049 分钟前
想抓PostgreSQL里的慢SQL?pg_stat_statements基础黑匣子和pg_stat_monitor时间窗,谁能帮你更准揪出性能小偷?
java·数据库·sql·postgresql
Jabes.yang12 分钟前
Java面试大作战:从缓存技术到音视频场景的探讨
java·spring boot·redis·缓存·kafka·spring security·oauth2
Query*26 分钟前
Java 设计模式——适配器模式进阶:原理深挖、框架应用与实战扩展
java·设计模式·适配器模式
Sirens.35 分钟前
Java核心概念:抽象类、接口、Object类深度剖析
java·开发语言·github
Meteors.36 分钟前
23种设计模式——中介者模式 (Mediator Pattern)详解
java·设计模式·中介者模式
望获linux38 分钟前
【实时Linux实战系列】使用 u-trace 或 a-trace 进行用户态应用剖析
java·linux·前端·网络·数据库·elasticsearch·操作系统
焰火19991 小时前
[Java]基于Spring的轻量级定时任务动态管理框架
java·后端
Seven971 小时前
Springboot 常见面试题汇总
java·spring boot
程序员阿鹏1 小时前
49.字母异位词分组
java·开发语言·leetcode
云中隐龙1 小时前
mac使用本地jdk启动elasticsearch解决elasticsearch启动时jdk损坏问题
java·elasticsearch·macos