我正在使用as3。只是一个简单的问题。 如果我创建了一个静态方法。说我决定在静态方法中调用其他方法。我呼吁的那些方法也需要是静态的吗?如果我使用了一些属性。不要永久存储数据,而只是在该过程中存储数据。这些属性是否需要是静态的?
答案 0 :(得分:1)
是。如果有什么叫static
,那意味着它不是与当前的类实例相关,而是与整个类相关,因此它必须与实例无关,例如,如果需要,使用其他静态字段和方法。
答案 1 :(得分:1)
不,他们没有。您可以在静态方法中使用任何类型的变量/方法,当然也包括局部变量。但是,静态方法中没有“this”的概念,因为该方法不是在实例上执行,而是在类本身上执行。因此,以下(在类声明中)是非法的:
public var myInstanceVariable : int;
public static function myStaticMethod() : void
{
// Illegal:
myInstanceVariable = 1;
// Illegal (same as above, "this" is implicit):
this.myInstanceVariebl = 1;
// This however is legal (local variable):
var localVal : int = 1;
}
上面对 myInstanceVariable 的引用是非法的,因为该变量是一个实例变量,静态方法无法访问该变量。因为静态方法首先不在实例上执行,所以“this”特殊变量无效。
如果您愿意,可以保留对实例的静态引用,并在所述实例上执行方法。这是普通单身人士模式背后的关键理念。
private static var _INSTANCE : MyClass;
public static function myStaticFunction() : void
{
_INSTANCE.doSomething();
}
这里,可以从静态方法引用_INSTANCE变量,因为变量本身被声明为static。
答案 2 :(得分:1)
为避免混淆,实际上您回答了两个问题:
静态方法中的方法调用需要是静态的吗? Li0liQ回答了这个问题。
静态方法中使用的变量是否需要是静态的? richardolsson回答了这个问题。
总而言之,在静态方法中,如果在静态方法的范围内定义局部变量,则只能访问静态变量和方法。
private var instanceVar : MyClass;
private static var staticVar : MyClass;
public static function myStaticFunction() : void
{
// Illegal, instance variable
instanceVar = new MyClass( 1 );
// Illegal, method on instance variable
instanceVar.someMethod();
// Legal, scoped local variable
localVar : MyClass = new MyClass( 1 );
// Legal, method on scoped local variable
localVar.someMethod();
// Legal, static variable
staticVar = new MyClass ( 1 );
// Legal, method on static variable
staticVar.someMethod();
}
如果你稍微考虑一下它是有道理的,但它起初并不是一个完全清晰的概念。