Use of Static Methods
我正在编写一个简单的接口类,如下所示。我只需要让它的一个方法对用户可用。使用这个类的用户只需要这个特定方法的返回值(
由于我是C程序员,我对Java世界还是陌生的。请看一下我的代码框架,告诉我所做的声明是否正确地表达了其含义。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | package com.prog.Test; import java.net.*; import java.io.*; public class Iface{ private static final int MSG_OK = 0x01; private static final int MSG_NOK = 0x00; private static final int MSG_FAIL = 0xFF; private static byte[] getBytesFromUrl(URL link) throws IOException { ...... return bytes; } private static int[] msg_header(byte[] msg) throws Exception { int len = msg.length; System.out.println("len ="+len); int[] headerMsg =new int [3]; headerMsg[0]= MSG_OK; ...... return headerMsg; } private static byte[] Tobyte(int[]src) { .... } protected static int checkLink (URL url ) throws IOException { byte[] rbuffer = null; byte[] hdr = null; int status = -1; try{ rbuffer = getBytesFromUrl(url); .. .. hdr = Tobyte(msg_header(rbuffer)); ... ... status = 0; }catch (Exception e) { System.err.println("Exception: " + e); } return status; } } |
所以当我在一个应用程序中使用这个
1 2 3 4 5 6 7 8 9 10 11 12 13 |
我也尝试过这个方法(在删除
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
有什么区别吗?
在爪哇中,通过实例和类调用静态方法在功能上是等价的。下列内容:
1 | Iface.checkLink(<url>); |
在功能上等同于
1 2 | Iface foo = new Iface(); // or Iface foo; but with the caveats below foo.checkLink(<url>); |
但是,请注意,不建议使用后者,因为它既混乱又不必要。有人认为这是因为Java语言设计者的错误而被允许的。
警告:在您的示例中,您没有初始化您的
实际上,您应该尽量使这个类不可实例化,因为它似乎是一个只包含静态方法的实用程序类。
从技术上讲,您发布的代码示例都不起作用。
EDCOX1的"5"关键字告诉Java只允许类访问该变量,如果它们扩展了EDCOX1×0类。您没有在调用代码中扩展类,因此如果方法不是
请注意,使方法
如果该方法是非静态的,您可以这样使用它:
1 2 | Iface callInterface = new Iface(); int retval = callInterface.checkLink(url); |
您可能还需要对工厂模式和依赖注入模式进行一些研究,这将使您在确定要使用的特定
当然有区别。
静态方法不是对象的成员,它们属于类。
因此,如果
从一个对象的引用中调用它是可行的,但从逻辑上讲,它不是正确的含义。因为该方法不属于该对象,并且无法处理该对象的实际状态。
对,通过这样做:
所以在执行方面,没有什么区别。在内存/垃圾收集方面,会有。
我想你的问题会很准确,就像"静电是什么意思?".
对于我来说,简单的"静态"意味着,这些变量在每个类中只存在一次,所有其他变量都在来自该类的每个对象中。