【问题标题】:How to call a method in another class of the same package?如何调用同一个包的另一个类中的方法?
【发布时间】:2011-04-12 10:26:27
【问题描述】:

如何调用Java中另一个相同包中的方法? 我所知道的是,使用一个对象,我们可以从不同的类中调用一个方法。 有没有其他方法可以调用不同类的方法?

【问题讨论】:

标签: java methods


【解决方案1】:

如果是静态方法,可以用类名代替对象调用。

【讨论】:

    【解决方案2】:

    如果将方法定义为静态方法,则无需先实例化类即可使用它,但您也没有可用的对象变量。

    public class Foo {
       public static String Bar() {
          return "bla";
       }
    }
    

    在这种情况下,您可以使用Foo.Bar() 调用它。

    【讨论】:

      【解决方案3】:

      方法是对象方法类方法

      对象方法:应用于对象。你必须使用一个实例:

      instance.method(args...);
      

      类方法:它应用于一个类。它没有隐式实例。你必须使用类本身。它更像是过程式编程。

      ClassWithStaticMethod.method(args...);
      

      反思

      通过反射,您可以通过 API 以编程方式访问方法,无论是对象方法还是类方法。

      实例方法:methodRef.invoke(instance, args...); 类方法:methodRef.invoke(null, args...);

      【讨论】:

        【解决方案4】:

        您可以创建一个静态方法或使用其他类作为您的类的成员调用构造函数中的函数。

        public class aClass {
              private SomeOtherClass oc;
              public class aClass( SomeOtherClass otherClass) {
                 oc = otherClass;
              }
        
              public callOtherClassMethod() {
                 oc.otherClassMethod();
               }
            }
        

        【讨论】:

          【解决方案5】:

          创建 B 类的实例:

          B b=new B();
          b.method();
          

          或者在B类中定义一个静态方法:

          class B
          {
           static void staticMethod();
          }
          

          然后这样称呼它:

          B.staticMethod();
          

          【讨论】:

            【解决方案6】:

            以这种格式进行:

            classmehodisin.methodname();

            例如:

            MyClass1.clearscreen();

            我希望这会有所帮助。` 注意:方法必须是静态的。

            【讨论】:

              【解决方案7】:

              来自 Fred Swartz (fredosaurus) 的笔记

              有两种类型的方法。

              • 实例方法与一个对象相关联并使用该对象的实例变量。这是默认设置。

              • 静态方法不使用定义它们的类的任何对象的实例变量。如果将方法定义为静态的,编译器会给出粗鲁的消息,如果您尝试访问任何实例变量。您可以访问静态变量,但除了常量之外,这是不寻常的。静态方法通常从参数中获取所有数据并从这些参数中计算一些东西,而不引用变量。这是进行某种通用计算的典型方法。一个很好的例子是预定义的Math 类中的许多实用方法。

              限定静态调用

              在定义类之外,通过在其前面加上一个对象来调用实例方法,然后将该对象作为隐式参数传递给实例方法,例如inputTF.setText("");

              静态方法通过在类名前加上前缀来调用,例如Math.max(i,j);。奇怪的是,它也可以用一个对象来限定,这将被忽略,但将使用对象的类。

              示例

              这是一个典型的静态方法:

              class MyUtils {
                  . . .
                  //================================================= mean
                  public static double mean(int[] p) {
                      int sum = 0;  // sum of all the elements
                      for (int i=0; i<p.length; i++) {
                          sum += p[i];
                      }
                      return ((double)sum) / p.length;
                  }//endmethod mean
                  . . .
              }
              

              此方法使用或更改的唯一数据来自参数(当然也包括局部变量)。

              为什么要声明一个方法static

              上面的mean() 方法如果没有声明为静态的,只要它是从同一个类中调用的,它也可以正常工作。如果从类外部调用并且未声明为静态,则必须使用对象进行限定(无用)。即使在类中使用,也有充分的理由将方法定义为静态方法。

              • 文档。 任何看到方法是静态的都会知道如何调用它(见下文)。同样,任何查看代码的程序员都会知道静态方法不能与实例变量交互,这使得阅读和调试更容易。
              • 效率。编译器通常会生成稍微更高效的代码,因为不需要将隐式对象参数传递给方法。

              调用静态方法

              有两种情况。

              在同一个类中调用

              只写静态方法名。例如:

              // Called from inside the MyUtils class
              double avgAtt = mean(attendance);
              

              从课堂外调用

              如果从另一个类调用方法(静态或实例),则必须在方法名称之前给出一些内容以指定定义该方法的类。对于实例方法,这是该方法将访问的对象。对于静态方法,应指定类名。例如:

              // Called from outside the MyUtils class.
              double avgAtt = MyUtils.mean(attendance); 
              

              如果在它之前指定了一个对象,则该对象的值将被忽略并使用该对象的类。

              访问静态变量

              尽管static 方法不能访问实例变量,但它可以访问static 变量。静态变量的一个常见用途是定义“常量”。 Java 库中的示例是Math.PIColor.RED。它们用类名限定,所以你知道它们是static。任何方法,static 与否,都可以访问static 变量。实例变量只能通过实例方法访问。

              备用调用

              有点特别但不推荐的是,可以使用类的对象而不是类名来访问静态方法。这很糟糕,因为它给人的印象是使用了对象中的某些实例变量,但事实并非如此。

              【讨论】:

                【解决方案8】:

                通过调用方法

                public class a 
                {
                    void sum(int i,int k)
                    {
                        System.out.println("THe sum of the number="+(i+k));
                    }
                }
                class b
                {
                    public static void main(String[] args)
                    {
                        a vc=new a();
                        vc.sum(10 , 20);
                    }
                }
                

                【讨论】:

                • 通过声明一个类的实例,在例子中被命名为'vc'并调用实例的方法。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-01-15
                • 2011-01-14
                • 2013-04-20
                • 1970-01-01
                • 2013-10-08
                • 1970-01-01
                相关资源
                最近更新 更多