Classe de objeto em Java
Classe de objeto em Java está presente em java.lang pacote.
- Cada classe é direta ou indiretamente derivada da classe Object. Se uma classe não estende nenhuma outra classe, então ela é uma classe filha direta da Classe de objeto Java e se estender outra classe, será derivado indiretamente.
- A classe Object fornece vários métodos, como toString()é igual() código hash() e muitos outros.
- A classe Object atua como raiz da hierarquia de herança em qualquer programa Java.
Aqui usamos o toString() e código hash() métodos da classe Object para fornecer uma representação de string personalizada para uma classe .
Java // Java Code to demonstrate Object class class Person { String n ; //name // Constructor public Person ( String n ) { this . n = n ; } // Override toString() for a // custom string representation @Override public String toString () { return 'Person{name:'' + n + ''}' ; } public static void main ( String [] args ) { Person p = new Person ( 'Geek' ); // Custom string representation System . out . println ( p . toString ()); // Default hash code value System . out . println ( p . hashCode ()); } }
Saída
Person{name:'Geek'} 321001045 Explicação: No exemplo acima, substituímos o toString() método para fornecer um representação de string personalizada da classe Person e use o código hash() método para exibir o valor do código hash padrão do objeto.
Métodos de classe de objeto
A classe Object fornece vários métodos que são os seguintes:
- Método toString()
- Método hashCode()
- método igual (objeto obj)
- método finalizar()
- método getClass()
- Método clone()
- wait() notify() notifyAll() (métodos de simultaneidade)
1. Método toString()
O toString() fornece uma representação String de um objeto e é usado para converter um objeto em uma String. O método toString() padrão para a classe Object retorna uma string que consiste no nome da classe da qual o objeto é uma instância, o caractere de arroba `@' e a representação hexadecimal não assinada do código hash do objeto.
Observação: Sempre que tentamos imprimir qualquer referência de objeto, o método toString() é chamado internamente.
Exemplo:
classe pública Aluno {
string pública paraString() {
return 'Objeto aluno';
}
}
Explicação: O método toString() é substituído para retornar uma representação de string personalizada do objeto Student.
2. Método hashCode()
Para cada objeto, a JVM gera um número exclusivo que é um código hash. Ele retorna inteiros distintos para objetos distintos. Um equívoco comum sobre este método é que o método hashCode() retorna o endereço do objeto que não está correto. Ele converte o endereço interno do objeto em um número inteiro usando um algoritmo. O método hashCode() é nativo porque em Java é impossível encontrar o endereço de um objeto, então ele usa linguagens nativas como C/C++ para encontrar o endereço do objeto.
Uso do método hashCode():
Ele retorna um valor hash que é usado para pesquisar objetos em uma coleção. JVM (Java Virtual Machine) usa o método hashcode ao salvar objetos em estruturas de dados relacionadas a hash, como HashSet HashMap Hashtable etc. A principal vantagem de salvar objetos com base em código hash é que a pesquisa se torna fácil.
Observação: Substituição de código hash() O método precisa ser feito de forma que para cada objeto geremos um número único. Por exemplo, para uma classe Student, podemos retornar o roll no. de um aluno do método hashCode(), pois é único.
Exemplo:
classe pública Aluno {
rolo interno;
@Substituir
public int hashCode() {
rolo de retorno;
}
}
Explicação: O código hash() é substituído para retornar um valor de hash personalizado com base na rolagem do objeto Student.
3. Método igual (objeto obj)
O é igual() O método compara o objeto fornecido com o objeto atual. Recomenda-se substituir este método para definir condições de igualdade personalizadas.
Observação: Geralmente é necessário substituir o código hash() método sempre que este método for substituído de modo a manter o contrato geral para o método hashCode que afirma que objetos iguais devem ter códigos hash iguais.
Exemplo:
classe pública Aluno {
rolo interno;
@Substituir
público booleano igual a (Objeto o) {
if (ou instância do Aluno) {
return this.roll == ((Aluno) o).roll;
}
retornar falso;
}
}
Explicação: O é igual() o método é substituído para comparar rolar entre dois objetos Student.
4. Método getClass()
O getClass() O método retorna o objeto de classe deste objeto e é usado para obter a classe de tempo de execução real do objeto. Também pode ser usado para obter metadados desta classe. O objeto Class retornado é o objeto bloqueado pelos métodos estáticos sincronizados da classe representada. Como é final, não o substituímos.
Exemplo:
Java // Demonstrate working of getClass() public class Geeks { public static void main ( String [] args ) { Object o = new String ( 'GeeksForGeeks' ); Class c = o . getClass (); System . out . println ( 'Class of Object o is: ' + c . getName ()); } }
Saída
Class of Object o is: java.lang.String
Explicação: O getClass() O método é usado para imprimir a classe de tempo de execução do objeto 'o'.
Observação: Após carregar um arquivo .class, a JVM criará um objeto do tipo java.lang.Class na área Pilha. Podemos usar este objeto de classe para obter informações em nível de classe. É amplamente utilizado em Reflexão
5. Método finalize()
O finalizar() O método é chamado logo antes de um objeto ser coletado como lixo. É chamado de Coletor de lixo em um objeto quando o coletor de lixo determina que não há mais referências ao objeto. Devemos substituir o método finalize() para descartar recursos do sistema, realizar atividades de limpeza e minimizar vazamentos de memória. Por exemplo, antes de destruir o contêiner da web dos objetos Servlet, sempre chamamos o método finalize para realizar atividades de limpeza da sessão.
Observação: O método finalize é chamado apenas uma vez em um objeto, mesmo que esse objeto seja elegível para coleta de lixo diversas vezes.
Exemplo:
Java // Demonstrate working of finalize() public class Geeks { public static void main ( String [] args ) { Geeks t = new Geeks (); System . out . println ( t . hashCode ()); t = null ; // calling garbage collector System . gc (); System . out . println ( 'end' ); } @Override protected void finalize () { System . out . println ( 'finalize method called' ); } }
Saída
1510467688 end finalize method called
Explicação: O finalizar() O método é chamado logo antes do objeto ser coletado como lixo.
6. Método clone()
O clone() O método cria e retorna um novo objeto que é uma cópia do objeto atual.
Exemplo:
classe pública Book implementa Cloneable {
String privada t; //título
livro público(String t) {
isto.t = t;
}
@Substituir
clone de objeto público() lança CloneNotSupportedException {
retornar super.clone();
}
}
Explicação: O clone() método é substituído para retornar uma cópia clonada do Objeto livro .
7. Métodos de simultaneidade: wait() notify() e notifyAll()
Esses métodos estão relacionados comunicação de thread em Java . Eles são usados para fazer threads esperar ou notificar outros em programação simultânea.
Exemplo de uso de todos os métodos de classe de objeto em Java
Java import java.io.* ; public class Book implements Cloneable { private String t ; // title private String a ; // author private int y ; // year public Book ( String t String a int y ) { this . t = t ; this . a = a ; this . y = y ; } // Override the toString method @Override public String toString () { return t + ' by ' + a + ' (' + y + ')' ; } // Override the equals method @Override public boolean equals ( Object o ) { if ( o == null || ! ( o instanceof Book )) { return false ; } Book other = ( Book ) o ; return this . t . equals ( other . getTitle ()) && this . a . equals ( other . getAuthor ()) && this . y == other . getYear (); } // Override the hashCode method @Override public int hashCode () { int res = 17 ; res = 31 * res + t . hashCode (); res = 31 * res + a . hashCode (); res = 31 * res + y ; return res ; } // Override the clone method @Override public Book clone () { try { return ( Book ) super . clone (); } catch ( CloneNotSupportedException e ) { throw new AssertionError (); } } // Override the finalize method @Override protected void finalize () throws Throwable { System . out . println ( 'Finalizing ' + this ); } public String getTitle () { return t ; } public String getAuthor () { return a ; } public int getYear () { return y ; } public static void main ( String [] args ) { // Create a Book object and print its details Book b1 = new Book ( 'The Hitchhiker's Guide to the Galaxy' 'Douglas Adams' 1979 ); System . out . println ( b1 ); // Create a clone of the Book object and print its // details Book b2 = b1 . clone (); System . out . println ( b2 ); // Check if the two objects are equal System . out . println ( 'b1 equals b2: ' + b1 . equals ( b2 )); // Get the hash code of the two objects System . out . println ( 'b1 hash code: ' + b1 . hashCode ()); System . out . println ( 'b2 hash code: ' + b2 . hashCode ()); // Set book1 to null to trigger garbage collection // and finalize method b1 = null ; System . gc (); } }
Saída
The Hitchhiker's Guide to the Galaxy by Douglas Adams (1979) The Hitchhiker's Guide to the Galaxy by Douglas Adams (1979) b1 equals b2: true b1 hash code: 1840214527 b2 hash code: 1840214527
Explicação: O exemplo acima demonstra o uso de toString() igual() hashCode() e clone() métodos no Aula de livros .