如何在java中调用一个方法?
如何调用一个方法,这是在java中的另一个类相同的包 ? 我知道的是,使用一个对象我们可以调用一个不同类的方法。 有没有其他的方法来调用不同类的方法?
创build一个B类的实例:
B b=new B(); b.method();
或者在B类中定义一个静态方法:
class B { static void staticMethod(); }
并像这样调用它:
B.staticMethod();
方法是对象方法或类方法 。
对象方法:它适用于一个对象。 你必须使用一个实例:
instance.method(args...);
类方法:它适用于一个类。 它没有一个隐式的实例。 你必须使用这个类本身。 这更像程序编程。
ClassWithStaticMethod.method(args...);
reflection
通过reflection,您可以使用API以编程方式访问方法,无论是对象方法还是类方法。
实例方法: methodRef.invoke(instance, args...);
类方法: methodRef.invoke(null, args...);
如果将方法定义为静态方法,则可以在不初始化类的情况下使用该方法,但是也可以不使用对象variables。
public class Foo { public static String Bar() { return "bla"; } }
在这种情况下,你可以用Foo.Bar()
来调用它。
如果是静态方法,可以使用类名代替对象来调用它。
你既可以创build一个静态方法,也可以使用另一个类作为调用该构造函数的类的成员。
public class aClass { private SomeOtherClass oc; public class aClass( SomeOtherClass otherClass) { oc = otherClass; } public callOtherClassMethod() { oc.otherClassMethod(); } }
有两种types的方法。
-
实例方法与对象关联,并使用该对象的实例variables。 这是默认的。
-
静态方法不使用它们定义的类的任何对象的实例variables。如果你定义一个方法是静态的,如果你尝试访问任何实例variables,编译器会给你一个粗鲁的信息。 你可以访问静态variables,但是除了常量之外,这是不寻常的。 静态方法通常从参数中获取所有数据,并从这些参数计算出某些内容,而不涉及variables。 这是进行某种通用计算的方法的典型例子。 一个很好的例子是预定义的
Math
类中的许多实用方法。
限定静态呼叫
从定义类的外部,实例方法通过在对象前加上一个对象来调用,然后将该对象作为隐式parameter passing给实例方法,例如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 . . . }
此方法使用或更改的唯一数据来自参数(当然是局部variables)。
为什么声明一个方法是static
上面的mean()
方法如果没有声明为静态的,只要从同一个类中调用它就可以。 如果从外部调用,并且没有被声明为静态的,那么必须对对象进行限定(无用)。 即使在课堂上使用,也有充分的理由将方法定义为静态。
- 文档。 任何人看到一个方法是静态的将知道如何调用它(见下文)。 同样,任何查看代码的程序员都会知道静态方法不能与实例variables交互,这使得阅读和debugging变得更容易。
- 效率。 编译器通常会生成稍微高效的代码,因为不需要将隐式对象parameter passing给该方法。
调用静态方法
有两种情况。
从同一个class级中调用
只需编写静态方法名称。 例如:
// Called from inside the MyUtils class double avgAtt = mean(attendance);
从课外打来
如果从另一个类中调用一个方法(静态或实例),则必须在方法名称前面指定方法定义的类。 例如方法,这是方法将访问的对象。 对于静态方法,应该指定类名称。 例如:
// Called from outside the MyUtils class. double avgAtt = MyUtils.mean(attendance);
如果之前指定了对象,则对象值将被忽略,对象的类将被使用。
访问静态variables
虽然static
方法不能访问实例variables,但可以访问static
variables。 静态variables的常见用法是定义“常量”。 来自Java库的示例是Math.PI
或Color.RED
。 他们是合格的类名,所以你知道他们是static
。 任何方法, static
或不可以,都可以访问static
variables。 实例variables只能由实例方法访问。
备用电话
有什么特别的,不推荐的是,可以使用一个类的对象而不是类名来访问静态方法。 这是不好的,因为它造成了对象中的一些实例variables被使用的印象,但事实并非如此。
以这种格式来做:
classmehodisin.methodname();
例如:
MyClass1.clearscreen();
我希望这有助于。注意:方法必须是静态的。