当前位置: 首页 > 面试题库 >

为什么getClass()不能用作静态方法?

支才
2023-03-14
问题内容

在静态上下文中,为什么不能调用的静态版本getClass()(而不是必须使用my.package.name.MyClassName.class)?

编译器不够聪明,无法确定何时使用对象方法+何时使用静态方法吗?

注意:

我并不是说static getClass()应该使用a 而不 是非静态方法getClass()(这很明显-
如果SpecialFoo是的子类Foo,则a的getClass()of
Foo可能返回Foo.classSpecialFoo.class其他,必须在运行时确定)。

我是说我想知道为什么没有 两个
版本getClass(),一个是仅适用于静态上下文的静态方法,另一个是常规的非静态方法getClass()。如果不可能,那就不可能了,那就是答案。如果有可能,但还没有完成,那就是历史选择,也许有充分的理由。这就是我想知道的。

最好宣布

final static Logger logger = LoggerFactory.getLogger(getClass());

代替

final static Logger logger = LoggerFactory.getLogger(my.package.name.MyClass.class);

前者可以逐字逐句地从一个类复制到下一个类,而后者则需要您在每个文件中复制类名称。


问题答案:

如果没有其他原因,则因为同时拥有方法的版本static和非static版本的方法是不合法的(可能是因为不鼓励static在非static上下文中调用方法是合法的)。

我也觉得这样的方法虽然在定义记录器或其他内容的上下文中很有用,但在其他上下文中(例如从实例方法中调用时)可能会造成混淆。



 类似资料:
  • 伙计们,我有一个简单但令人讨厌的问题。据我所知,基本上意味着,对于该类的每个实例,这个方法将是相同的,如果我们改变它,这将改变该类的每个实例,它也被称为类方法。那么,如果我有一个类,它实现了某种格式的方法,让我们说: 为什么不能设置为静态?因为该类的每个实例的格式都是相同的。。。?

  • 问题内容: 为什么我们不能在非静态内部类中使用静态方法? 如果我将内部类设为静态,则可以工作。为什么? 问题答案: 因为内部类的实例与外部类的实例隐式关联,所以它本身不能定义任何静态方法。由于静态嵌套类无法直接引用其封闭类中定义的实例变量或方法,因此只能通过对象引用使用它们,因此在静态嵌套类中声明静态方法是安全的。

  • 问题内容: 为什么我们不能在非静态内部类中使用静态方法? 如果我将内部类设为静态,则可以工作。为什么呢 问题答案: 因为内部类的实例与外部类的实例隐式关联,所以它本身不能定义任何静态方法。由于静态嵌套类无法直接引用其封闭类中定义的实例变量或方法,因此只能通过对象引用使用它们,因此在静态嵌套类中声明静态方法是安全的。

  • 我真的对此感到困惑!我有2个班,俱乐部和会员。在Membership中,我有方法getMonth();在Club中,我有joinedMonth(),它接受参数'month'--所以用户输入一个月,然后我希望它返回在该特定月份加入的成员资格。 我试图从Club类调用getMonth()方法,这样我就可以继续比较月份的整数。但是,当我试图调用该方法时,我只得到提到的“非静态方法getMonth()不能

  • 问题内容: 问题是在Java中为什么不能定义抽象静态方法?例如 问题答案: 因为“抽象”的意思是:“不实现任何功能”,而“静态”的意思是:“即使没有对象实例也有功能”。这是一个逻辑上的矛盾。

  • 问题内容: 问题是在Java中为什么不能定义抽象的静态方法?例如 问题答案: 因为“抽象”表示:“不执行任何功能”,而“静态”表示:“即使没有对象实例也具有功能”。这是一个逻辑上的矛盾。