Na programação Java, alguns conhecimentos não podem ser aprendidos apenas por meio de especificações de idiomas ou documentos da API padrão. Este artigo o lista para você.
1. Realização
1. Agora é igual a ()
classe pessoa {nome da string; Int Aniversário do ano; byte [] cru; public boolean é igual (objeto obj) {if (! obj instância de pessoa) retorna false; Pessoa outra = (pessoa) obj; retornar name.equals (outros.name) && aniversárioyear == outros.birthyear && Arrays.equals (Raw, outros.raw); } public int hashCode () {...}} 2. HashCode ()
classe pessoa {string a; Objeto B; byte c; int [] d; public int hashCode () {return a.hashcode () + b.hashcode () + c + arrays.hashcode (d); } public boolean é igual (objeto o) {...}}3. Implementar compareto ()
a classe Pessoa implementa comparável <Person> {String FirstName; String lastName; int aniversário; // Compare pelo primeiro nome, quebre os laços por último nome, finalmente quebre os laços com a data de nascimento public int compareto (pessoa outra) {if (primeironame.compareto (outros.firstname)! = 0) retornar primeironame.compareto (outros.firstname); caso contrário, if (lastName.compareto (outros.lastName)! = 0) return lastName.compareto (outros.lastName); senão se (data de nascimento <outro.birthate) retornar -1; senão se (data de nascimento> outros.birthate) retornar 1; caso contrário, retorne 0; }} Sempre implemente a versão genérica comparável em vez do tipo primitivo comparável. Porque isso pode salvar o volume de código e reduzir o aborrecimento desnecessário.
Apenas se preocupe com os sinais (negativos/zero/positivos) que retornam o resultado, seu tamanho não importa.
Comparator.compare () A implementação é semelhante a esta.
4. Implementar Clone ()
A classe valores implementa clonável {string abc; duplo foo; int [] barras; Data contratada; valores públicos clone () {try {valores result = (valores) super.clone (); resultado.bars = resultado.bars.clone (); resultado.hired = resultado.hired.clone (); resultado de retorno; } catch (clonenotsupportEdException e) {// impossível jogue novo assertionError (e); }}}2. Testes preventivos
1. Valor de verificação defensiva
int fatorial (int n) {if (n <0) lançar novas ilegalargumentException ("indefinido"); caso contrário, se (n> = 13) lança nova aritmeticexception ("Overflow de resultado"); else if (n == 0) retornar 1; caso contrário, retorne n * fatorial (n - 1);} 2. Objetos de teste preventivo
int findIndex (list <string> list, string alvo) {if (list == null || Target == null) lança novo nullPointerException (); ...}3. Índice de matriz de detecção preventiva
Void Frob (byte [] B, Int Index) {if (b == null) lança novo NullPointerException (); if (índice <0 || índice> = b.length) lança novo indexOutOfBoundSexception (); ...}Não pense que o índice da matriz dado não cruzará os limites. Para detectá -lo explicitamente.
4. Intervalo de matriz de detecção preventiva
void frob (byte [] b, int off, int len) {if (b == null) lança novo nullPointerException (); if (off <0 || off> b.Length || len <0 || b.Length - Off <len) lança novo indexOutOfBoundSexception (); ...}Não pense que o intervalo de matriz fornecido (por exemplo, a partir de desativado, a leitura de elementos) não vai além dos limites. Para detectá -lo explicitamente.
3. Array
1. Preencha os elementos da matriz
Usando loops:
// preencha cada elemento da matriz 'a' com 123byte [] a = (...); para (int i = 0; i <a.length; i ++) a [i] = 123; (Preferencial) métodos para usar a biblioteca padrão: Arrays.fill (a, (byte) 123);
2. Copie um elemento de matriz em um intervalo
Usando loops:
// copie 8 elementos da matriz 'a' começando no deslocamento 3 // para matar 'b' a partir do deslocamento 6, // assumindo 'a' e 'b' são distintos Arraysbyte [] a = (...); byte [] b = (...); para (int i = 0; i <8; i ++) b [6 + i] = a [3 + i]; (Preferencial) Métodos para usar a Biblioteca Padrão: System.arraycopy (A, 3, B, 6, 8);
3. Ajuste o tamanho da matriz
Use loops (dimensionando):
// Faça a matriz 'a' maior para newlenbyte [] a = (...); byte [] b = novo byte [newlen]; para (int i = 0; i <A.Length; i ++) // sobe até o comprimento de a b [i] = a [i]; a = b;
Use loops (reduz o tamanho):
// Faça a matriz 'a' menor para newlenbyte [] a = (...); byte [] b = novo byte [newlen]; para (int i = 0; i <b.length; i ++) // sobe até o comprimento de b [i] = a [i]; a = b;
Métodos (preferenciais) para usar a biblioteca padrão:
1a = Arrays.copyof (a, newlen);
4. Embalando 4 bytes em um int
int packbigendian (byte [] b) {return (b [0] & 0xff) << 24 | (b [1] e 0xff) << 16 | (B [2] e 0xFF) << 8 | (b [3] & 0xff) << 0;} int packLittleendian (byte [] b) {return (b [0] & 0xff) << 0 | (B [1] & 0xff) << 8 | (B [2] e 0xFF) << 16 | (b [3] & 0xff) << 24;}5. Decompor int em 4 bytes
byte[] unpackBigEndian(int x) { return new byte[] { (byte)(x >>> 24), (byte)(x >>> 16), (byte)(x >>> 8), (byte)(x >>> 0) };} byte[] unpackLittleEndian(int x) { return new byte[] { (byte)(x >>> 0), (byte)(x >>> 8), (byte) (x >>> 16), (byte) (x >>> 24)};}Sempre use o operador de deslocamento direito não assinado (>>>) para embrulhar os bits, não use o operador aritmético de deslocamento direito (>>).
O exposto acima é tudo sobre este artigo, espero que seja útil para o aprendizado de todos.