Sendo novo em Java, estou confuso entre os conceitos de classe e tipo . Por exemplo, se o objeto "Hello World!"pertencer ao tipoString ou classeString ? Ou talvez ambos?
Ultimamente, parece haver uma inclinação para votar negativamente em quaisquer questões do estilo "iniciante", sejam elas boas ou não. É irritante, para dizer o mínimo.
nico_c
9
Também para votar contra qualquer questão que o eleitor não entenda ...
Marquês de Lorne
4
Eu concordo que é meio rude votar negativamente enquanto você diz perguntas para iniciantes, mas, seja bom ou ruim, todas as perguntas para iniciantes têm suas respostas apenas pesquisando na web. O problema e a razão pela qual as pessoas estão votando negativamente é porque isso está levando a um estouro de pilha :)
Marko Lazić
13
Esta é uma ótima pergunta - e os 3 votos para fechar são o motivo pelo qual precisamos votar para manter a abertura . Ainda me lembro de quando estava aprendendo Java que o jargão OO era o maior obstáculo.
Lawrence Dol de
4
@nickecarlo Costumava haver um ponto no FAQ, que parece ter sido retirado durante o ano passado ou assim - "a questão mostra uma séria falta de pesquisa e não mostra sinais de esforço feito para resolvê-la antes de fazer a pergunta " Acho irritante que haja MUITAS perguntas besteiras que o Google poderia resolver, em vez de as pessoas aqui realmente perderem seu tempo explicando "programação 101" para os outros.
TC1 de
Respostas:
123
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:
Uma variável de tipo primitivo sempre mantém um valor primitivo desse mesmo tipo. Esse valor só pode ser alterado por operações de atribuição nessa variável.
Uma variável do tipo de referência sempre contém o valor de uma referência a um objeto. Todos os objetos, incluindo arrays, oferecem suporte aos métodos de classe 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.
Não vou fazer a edição sozinho porque não tenho certeza se é isso que você pretendia escrever, mas pode funcionar melhor dizendo que classes são "um tipo de tipo" em vez de "um tipo de tipo".
um CV
@ MichaelKjörling Sim, essa é a melhor maneira de dizer isso. Vou atualizá-lo.
Brandon
3
Você esqueceu o tipo nulo (consulte JLS 4.1).
user1803551
1
@AndyDong Uma classe abstrata ainda é uma classe.
Brandon
6
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.
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 .
Veja isso [TypeParameters], isso mostra que o tipo de classe inclui essas classes genéricas também.
classExample<T>{}
O tipo de classe será chamado Example
Resumindo, um tipo de classe cobre nossos enums, nossas classes regulares (não genéricas) como Stringetc 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.
classTest{<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)
"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.
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)
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:
String
Integer
Boolean
ArrayList
StringBuilder
Exemplos de tipos de interface:
Collection
List
Map
Serializable
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
fonte
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 ,
O que é tipo primitivo?
Agora, vamos ver o que é tipo de referência?
Vamos discutir um por um.
Se você vir como no JLS, a classe é definida assim:
Veja isso
[TypeParameters]
, isso mostra que o tipo de classe inclui essas classes genéricas também.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 ?
Vamos entender pelo exemplo no JLS abaixo dele.
Você vê que seu objeto no parâmetro do método é do tipo
T
. Sim, estaT
é 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.
fonte
"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.
fonte
"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.
fonte