pax*_*blo 14 java methods static instance
在最近的一个问题中,有人问过静态方法,其中一个答案表明你通常会用以下方法调用它们:
MyClassName.myStaticMethod();
Run Code Online (Sandbox Code Playgroud)
对此的评论还表明你也可以通过一个对象来调用它:
MyClassName myVar;
myVar.myStaticMethod();
Run Code Online (Sandbox Code Playgroud)
但它被认为是不好的形式.
现在在我看来,这样做实际上可以让我的生活更轻松,所以我不必担心什么是静态的(a).
是有一些问题,通过对象调用静态函数?显然你不想创建一个全新的对象来调用它:
Integer xyzzy;
int plugh = xyzzy.parseInt ("42", 10);
Run Code Online (Sandbox Code Playgroud)
但是,如果您已经有一个所需类型的对象,使用它是否有问题?
(a)显然,我不能用以下方法调用非静态方法:
MyClassName.myNonStaticMethod();
Run Code Online (Sandbox Code Playgroud)
但这不是我在这里问的问题.
Mar*_*ers 35
在我看来,使这个如此难以理解的真实用例是这样的.下面的代码是什么打印的?
//in a main method somewhere
Super instance = new Sub();
instance.method();
//...
public class Super {
public static void method() {
System.out.println("Super");
}
}
public class Sub extends Super {
public static void method() {
System.out.println("Sub");
}
}
Run Code Online (Sandbox Code Playgroud)
答案是它打印"超级",因为静态方法不是虚拟的.即使instance是-a Sub,编译器也只能继承变量的类型Super.但是,通过调用方法instance而不是Super,您巧妙地暗示它将是虚拟的.
实际上,读取它的开发人员instance.method()必须查看方法的声明(它的签名)以了解它实际被调用的方法.你提到
在我看来,这样做实际上可以让我的生活更轻松,所以我不必担心什么是静态的
但在上述情况下,上下文实际上非常重要!
我可以相当自信地说语言设计者首先允许这样做是错误的.远离.
Ray*_*oal 18
糟糕的表单评论来自Java编码约定
请参阅http://www.oracle.com/technetwork/java/codeconventions-137265.html#587
如果你考虑它,它的原因是该方法是静态的,不属于任何特定的对象.因为它属于类,为什么要将特定对象提升到看似拥有方法的特殊状态?
在您的特定示例中,您可以使用现有的整数来调用parseInt(也就是说,它在Java中是合法的),但这会使读者专注于该特定的整数对象.它可能会让读者感到困惑,因此指导就是避免这种风格.
关于这一点,程序员可以让生活更轻松,转过身来询问是什么让读者的生活更轻松?有两种方法:实例和静态.当您看到表达式C.m并且您知道C是一个类时,您知道m必须是静态方法.当你看到x.m(x实例在哪里)你无法分辨,但它看起来像一个实例方法,所以大多数人都只为实例方法保留这种语法.
| 归档时间: |
|
| 查看次数: |
14108 次 |
| 最近记录: |