【发布时间】:2011-04-12 10:26:27
【问题描述】:
如何调用Java中另一个相同包中的方法? 我所知道的是,使用一个对象,我们可以从不同的类中调用一个方法。 有没有其他方法可以调用不同类的方法?
【问题讨论】:
-
编辑:链接不再有效 - 将链接更改为 oracle java 教程。 Java Static Methods
如何调用Java中另一个相同包中的方法? 我所知道的是,使用一个对象,我们可以从不同的类中调用一个方法。 有没有其他方法可以调用不同类的方法?
【问题讨论】:
如果是静态方法,可以用类名代替对象调用。
【讨论】:
如果将方法定义为静态方法,则无需先实例化类即可使用它,但您也没有可用的对象变量。
public class Foo {
public static String Bar() {
return "bla";
}
}
在这种情况下,您可以使用Foo.Bar() 调用它。
【讨论】:
方法是对象方法或类方法。
对象方法:应用于对象。你必须使用一个实例:
instance.method(args...);
类方法:它应用于一个类。它没有隐式实例。你必须使用类本身。它更像是过程式编程。
ClassWithStaticMethod.method(args...);
反思
通过反射,您可以通过 API 以编程方式访问方法,无论是对象方法还是类方法。
实例方法:methodRef.invoke(instance, args...);
类方法:methodRef.invoke(null, args...);
【讨论】:
您可以创建一个静态方法或使用其他类作为您的类的成员调用构造函数中的函数。
public class aClass {
private SomeOtherClass oc;
public class aClass( SomeOtherClass otherClass) {
oc = otherClass;
}
public callOtherClassMethod() {
oc.otherClassMethod();
}
}
【讨论】:
创建 B 类的实例:
B b=new B();
b.method();
或者在B类中定义一个静态方法:
class B
{
static void staticMethod();
}
然后这样称呼它:
B.staticMethod();
【讨论】:
以这种格式进行:
classmehodisin.methodname();
例如:
MyClass1.clearscreen();
我希望这会有所帮助。` 注意:方法必须是静态的。
【讨论】:
来自 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.PI 或Color.RED。它们用类名限定,所以你知道它们是static。任何方法,static 与否,都可以访问static 变量。实例变量只能通过实例方法访问。
有点特别但不推荐的是,可以使用类的对象而不是类名来访问静态方法。这很糟糕,因为它给人的印象是使用了对象中的某些实例变量,但事实并非如此。
【讨论】:
通过调用方法
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);
}
}
【讨论】: