Java中无需创建对象即可通过类名访问类成员的原理是什么?
为什么不用创建对象就能访问KeyEvent和ActionEvent的字段?
代码示例:
JMenuItem print = new JMenuItem("Print"); print.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, ActionEvent.CTRL_MASK));我是Java新手,此前学习到若要访问类的成员,必须先创建该类的对象,再通过对象访问类的成员。但在上述代码中,KeyEvent和ActionEvent这两个类无需创建对象,即可直接访问它们的字段VK_P和CTRL_MASK。请问这是如何实现的?
嗨,这是个特别棒的入门问题——刚接触Java的时候,很容易把实例成员和静态成员的访问规则搞混,我来给你讲明白:
这些字段是静态(static)成员
Java里,用static关键字修饰的类成员(不管是字段还是方法),属于类本身,而不是类的某个实例对象。也就是说,当JVM加载这个类的时候,静态成员就已经在内存中存在了,完全不需要你创建任何对象,直接通过类名.静态成员名的方式就能访问。举个实际的例子,KeyEvent里VK_P的定义大概是这样的:
public class KeyEvent extends InputEvent { public static final int VK_P = 0x50; // 其他键盘按键的静态常量... }这里的
static让它变成了类级别的成员,加上final就把它定义成了固定不变的常量,所以你直接写KeyEvent.VK_P就能调用,根本不用new一个KeyEvent对象。静态成员的适用场景
像这类代表通用固定值的常量(比如键盘按键码、事件掩码),或者不需要依赖对象状态的工具方法,都会被设计成静态成员——这样既不用反复创建对象,使用起来更方便,还能节省内存开销。
总结一下:你之前学到的"必须创建对象访问成员",针对的是实例成员(没有static修饰的成员,它们属于每个具体对象),而静态成员属于类本身,直接用类名就能访问啦!
内容的提问来源于stack exchange,提问作者Jose Jayant
相关产品推荐
相关产品推荐

