Sendo novo em Java, estou confuso entre os conceitos de classe e tipo . Por exemplo, se o objeto "Hello World!"
pertencer ao tipo String
ou classe String
? Ou talvez ambos?
Sendo novo em Java, estou confuso entre os conceitos de classe e tipo . Por exemplo, se o objeto "Hello World!"
pertencer ao tipo String
ou classe String
? Ou talvez ambos?
Respostas:
Uma classe é um tipo. Uma interface é um tipo. Um primitivo é um tipo. Uma matriz é um tipo.
Portanto, cada tipo também é uma classe (incluindo uma constante enum), uma interface, um primitivo ou um array.
Existem duas categorias distintas de tipos: tipos primitivos e tipos de referência:
Object
. Os tipos de referência são tipos de classe (incluindo tipos de enum), tipos de interface e tipos de array.Cada pedaço de dado tem um tipo que define sua estrutura, ou seja, quanta memória ele ocupa, como é organizado e, mais importante, como você pode interagir com ele.
Exemplos de tipos primitivos:
int
float
char
boolean
Exemplos de tipos de classes:
Exemplos de tipos de interface:
Exemplos de tipos de matriz:
int[]
String[]
Integer[][][]
Basicamente, qualquer coisa a que você possa se referir como uma variável tem um tipo e as classes são uma espécie de tipo.
Mais informações aqui: http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html
TLDR - Classe é um do Tipo em Java.
Observação - para entender completamente a resposta, você deve ter uma pequena ideia sobre os genéricos em Java.
Para entender a diferença, vamos primeiro entender o que é um tipo em Java.
De acordo com JLS SE 10 ,
Existem dois tipos de tipos na linguagem de programação Java: tipos primitivos ( §4.2 ) e tipos de referência (§4.3).
O que é tipo primitivo?
a) Os tipos integrais são byte, short, int e long , cujos valores são inteiros de dois complementos com sinal de 8 bits, 16 bits, 32 bits e 64 bits, respectivamente, e char, cujos valores são 16 bits inteiros sem sinal que representam unidades de código UTF-16 (§3.1).
b) Os tipos de ponto flutuante são float , cujos valores incluem os números de ponto flutuante IEEE 754 de 32 bits, e double , cujos valores incluem os números de ponto flutuante IEEE 754 de 64 bits.
c) O tipo booleano possui exatamente dois valores: verdadeiro e falso.
Agora, vamos ver o que é tipo de referência?
Existem quatro tipos de referência: tipos de classe ( §8.1 ), tipos de interface ( §9.1 ), variáveis de tipo ( §4.4 ) e tipos de matriz ( §10.1 ).
Vamos discutir um por um.
Se você vir como no JLS, a classe é definida assim:
Uma declaração de classe especifica um novo tipo de referência nomeado.
Existem dois tipos de declarações de classe: declarações normais de classe e declarações enum .
ClassDeclaration:
NormalClassDeclaration
EnumDeclaration
NormalClassDeclaration:
{ClassModifier} class TypeIdentifier [TypeParameters] [Superclass] [Superinterfaces] ClassBody
Veja isso [TypeParameters]
, isso mostra que o tipo de classe inclui essas classes genéricas também.
class Example<T>{
}
O tipo de classe será chamado Example
Resumindo, um tipo de classe cobre nossos enums, nossas classes regulares (não genéricas) como String
etc e nossas classes genéricas também.
Da mesma forma, espero que os tipos de interface e array também estejam claros. Por tipo de array queremos dizer como int[]
, String[]
etc.
Vamos para a última parte - variáveis de tipo. O que eles são ?
Uma variável de tipo é um identificador não qualificado usado como um tipo na classe, interface, método e corpos do construtor.
Vamos entender pelo exemplo no JLS abaixo dele.
class Test {
<T extends C & I> void test(T t) {
t.mI(); // OK
t.mCPublic(); // OK
t.mCProtected(); // OK
t.mCPackage(); // OK
}
}
Você vê que seu objeto no parâmetro do método é do tipo T
. Sim, esta T
é a variável de tipo e é / pode ser usada como uma referência. Sim, ele é. (Não foi possível entender este exemplo estranho - Aprenda o que é método genérico em Java)
Isso completa a resposta.
"Tipo" é a categoria mais abrangente. Variáveis em Java podem ter três tipos de tipos: os 8 tipos "primitivos" como int e float, interfaces e classes. Os valores (em oposição às variáveis) podem ser instâncias primitivas ou de classe.
"Tipo" define 'que tipo de dados é'
Ex: "hello world" é uma String -> "hello world" é o tipo String (String não é um dado pré-conjunto ao contrário de int .. então podemos dizer que "hello world" é um tipo de classe de string)
10 é um int -> 10 é um tipo de dados inteiro.