Normalmente, um membro da classe deve ser acessado emem conjunto com um objeto de sua classe. Haverá momentos em que você desejará definir o membro da classe que pode ser acessado sem instanciar essa classe. Isso pode ser realizado por "estático". Para criar esse membro, preceda sua declaração com a palavra-chave "estático".
Vantagens da estática
Quando um membro é declarado estático, ele pode ser acessado antes que qualquer objeto de sua classe seja criado ou sem referência a qualquer objeto.
Por que declaramos main () como estático?
main () é o ponto de entrada de uma classe. Em java, tudo é escrito em uma classe. Agora, quando você executa o nome do arquivo java no prompt de comando, o loader carrega a classe e a JVM pesquisa o método principal para entrar na classe. Portanto, tornar o main () como estático, fará com que a JVM o acesse diretamente através do classname.main ()
É por isso que o nome do programa deve ser igual ao nome da classe, onde escrevemos a função principal.
Pontos importantes a serem lembrados
- Variáveis de instância declaradas como estáticas são essencialmente variáveis globais. Quando você cria objetos de sua classe, nenhuma cópia de uma variável estática é feita. Mesmo todos os objetos compartilham a mesma variável estática.
- variáveis estáticas ou funções-membro serão carregadas durante a aula. Isso significa que, antes de criar quaisquer instâncias (objetos), a função principal é a primeira função executável de qualquer programa que executamos manualmente.
- Se você deseja executar algo / inicialização de variáveis estáticas antes do carregamento real da classe, coloque todas elas no bloco estático.
Por exemplo.
estático{
System.out.println (“Bloco estático inicializado…”);
}
Ele é executado mesmo antes do método main () durante o carregamento da classe.
Restrições Ao usar o Static
- O método static pode acessar apenas variáveis estáticas.
- O método static pode chamar apenas o método estático.
- método estático não pode se referir a isso e super de qualquer maneira.
Programa
class Addition{ static int num1; static int num2; int a; int b; Addition(){ num1 = -1; num2 = -1; a = -1; b = -1; } Addition(int num1,int num2,int a,int b){ this.num1 = num1; this.num2 = num2; this.a = a; this.b = b; } static void sum(){ //System.out.println("Sum of 4 numbers is: "+(num1+num2+a+b)); /*static method can’t access static vars */ System.out.println("Sum of 'num1' and 'num2' is: "+(num1+num2)); System.out.println(); } void add(){ System.out.println("Addition of 4 numbers is: "+(num1+num2+a+b)); System.out.println(); } } class AditionDemo1{ public static void main(String args[]){ System.out.println(); System.out.println("Static method sum() called without creating any object"); System.out.println("------------------------------------------------------"); Addition.sum(); Addition ad1 = new Addition(); System.out.println("Static Method sum() is invoked second time"); System.out.println("-----------------------------------------------"); Addition.sum(); System.out.println("Non-Static Method add() is invoked using Object ad1"); System.out.println("-----------------------------------------------"); ad1.add(); Addition ad2 = new Addition(10,20,30,40); System.out.println("Static Method sum() is invoked second time"); System.out.println("-----------------------------------------------"); Addition.sum(); System.out.println("Non-Static Method add() is invoked using Object ad2"); System.out.println("-----------------------------------------------"); ad2.add(); System.out.println("Static Method sum() is invoked third time"); System.out.println("-----------------------------------------------"); Addition.sum(); System.out.println("Static Method sum() is invoked using Object"); System.out.println("-------------------------------------------"); ad1.sum(); ad2.sum(); } }
Resultado
Explicação do código e saída Java
Se você vir o código com cuidado, encontrarátomamos duas variáveis estáticas e duas variáveis não estáticas que são inicializadas por dois construtores viz. um é parametrizado e outro é o padrão. Definimos um método estático e um método não estático.
Em main (), primeiro invocamos o método estático sum () sem criar nenhum objeto da Classe de Adição.
No código, você pode ver que o método estático não pode acessar variáveis não estáticas. Se você tentar acessar, receberá o seguinte erro:
Agora, se você vir, variáveis estáticas são apenas variáveis globais. Independentemente dos objetos, ele obteve o mesmo resultado sempre que o método estático sum () é chamado por qualquer objeto.
O método não estático pode acessar variáveis estáticas.
O método não estático pode chamar métodos estáticos.
Os métodos estáticos podem ser chamados com <classname>. <Static method name> e com <objectname>. <Static static name> também.
Para variáveis não estáticas, cada objeto terá cópias diferentes de variáveis não estáticas com valores diferentes para objetos diferentes.
A seguir, aprenderemos sobre como usar a palavra-chave "this" em Java.
Confira tutoriais mais úteis e diretrizes definitivas sobre programação Java aqui.
Comentários