Propriedades estáticas
Assim como variáveis de instância, variáveis estáticas são criadas usando a palavra chave var. Porém, para criar uma propriedade estática, devemos associar a variável o atributo static.
class Matemática {
static var numero = 19;
}
Assim como outras propriedades de classe, os acessos modificadores devem ser explicitamente definidos (protected, internal, public, private). Caso não sejam definidos, internal é o padrão.
Por convenção, o atributo static deve vir depois do acesso modificador:
public static var numero = 19;
Um detalhe é que uma variável de instância pode ter o mesmo nome que uma variável estática. Logo, dentro do código, sempre usaremos o nome da classe junto à propriedade estática.
package {
public class Matematica {
public static var numero = 23;
public var numero = 3.14;
}
}
Constantes estáticas
Uma constante é uma variável estática, que mantém seu valor inalterado por todo o algoritmo. Os eventos mantêm essa convenção como padrão, vimos isso durante todo o curso:
MouseEvent.CLICK = "click";
Event.ENTER_FRAME = "enterFrame";
Normalmente utilizamos essas constantes para definir configurações do programa.
package {
public class Matematica {
public static const PI = Math.PI;
}
}
Métodos estáticos
Métodos estáticos são equivalentes às propriedades e constantes estáticas: são acessados pela própria classe sem a necessidade de instanciá-los para usar.
A classe Mouse contém dois métodos estáticos hide() e show(), ambos para esconder e mostrar o cursor. Outra classe que contám somente métodos estáticos é a conhecida classe Math, que mantém diversos métodos matemáticos, como randomização, potenciação, log e coseno, entre outros.
Um método estático, no entanto, não pode acessar variáveis de instância diretamente em seu corpo, um meio de acessá-lo seria passar essa variável de instância via parâmetro de método.
package {
public class Matematica {
public static const PI = Math.PI;
public static function round(num:Number):Number {
return Math.round(num);
}
public static function sin(num:Number):Number {
return Math.sin(num);
}
public static function atan(num:Number):Number {
return Math.atan(num);
}
public static function cos(num:Number):Number {
return Math.cos(num);
}
}
}
package {
public class StringUtils {
public static function inverse(string:String):String {
var str:String = "";
for (var i:Number = string.length; i>=0; i--) {
str += string.charAt(i);
}
return str;
}
public static function startsWith(string:String, prefix:String):Boolean {
var count:Number = prefix.length;
if (string.substr(0, count) == prefix) {
return true;
} else {
return false;
}
}
public static function endsWith(string:String, suffix:String):Boolean {
var count:Number = suffix.length;
if (string.substr(string.length-count) == suffix) {
return true;
} else {
return false;
}
}
public static function equalsIgnoreCase(stringA:String, stringB:String):Boolean {
if (stringA.toLowerCase() == stringB.toLowerCase()) {
return true;
} else {
return false;
}
}
public static function lTrim(string:String):String {
var size:Number = string.length;
for (var i:Number = 0; i<size; i++) {
if (string.charCodeAt(i)>32) {
return string.substring(i);
}
}
return "";
}
public static function rTrim(string:String):String {
var size:Number = string.length;
for (var i:Number = size; i>0; i--) {
if (string.charCodeAt(i)>32) {
return string.substring(0, i+1);
}
}
return "";
}
public static function trim(string:String):String {
string = rTrim(string);
string = lTrim(string);
return string;
}
public static function abbreviate(string:String, length:uint, pattern:String = "..."):String {
string = string.substr(0, length);
string = string.substr(0, string.lastIndexOf(" "));
return string += pattern;
}
}
}
Herança
Diferentemente das variáveis, constantes e métodos de instância, características e comportamentos estáticos não são herdados por suas especializações.