Поскольку я новичок в Java, я запутался в понятиях класса и типа . Например, должен ли объект "Hello World!"принадлежать к типуString или классуString ? А может и то, и другое?
В последнее время, кажется, есть склонность отрицать любые вопросы в стиле «новичок», хороши они или нет. Это, мягко говоря, раздражает.
nico_c
9
Также, чтобы проголосовать против любого вопроса, который избиратель не понимает ...
Маркиз Лорн
4
Я согласен, что это отчасти грубо отрицать, когда вы задаете вопросы для начинающих, но независимо от того, хорошо это или плохо, на все вопросы для начинающих есть ответы, просто поискав в Интернете. Проблема и причина, по которой люди голосуют против, в том, что это приводит к переполнению стека :)
Марко Лазич
13
Это отличный вопрос - и 3 голоса до закрытия - это то, почему мы должны иметь возможность голосовать, чтобы оставаться открытыми . Я до сих пор помню, когда изучал Java, жаргон объектно-ориентированного программирования был самым большим препятствием.
Лоуренс Дол
4
@nickecarlo Раньше в FAQ был пункт, который, кажется, убрали в течение последнего года или около того - "вопрос показывает серьезное отсутствие исследований и не показывает признаков усилий, предпринятых для его решения, прежде чем задать вопрос ". Меня раздражает, что есть ТОННА дерьмовых вопросов, которые Google может решить, вместо того, чтобы люди здесь тратят свое время, объясняя «программирование 101» другим.
TC1
Ответы:
123
Класс - это тип. Интерфейс - это тип. Примитив - это тип. Массив - это тип.
Следовательно, каждый тип также является либо классом (включая константу перечисления), либо интерфейсом, либо примитивом, либо массивом.
Есть две различные категории типов: примитивные типы и ссылочные типы:
Переменная примитивного типа всегда содержит примитивное значение того же типа. Такое значение можно изменить только с помощью операций присваивания этой переменной.
Переменная ссылочного типа всегда содержит значение ссылки на объект. Все объекты, включая массивы, поддерживают методы класса Object. Ссылочные типы - это типы классов (включая типы перечислений), типы интерфейсов и типы массивов.
У каждой части данных есть тип, который определяет ее структуру, а именно, сколько памяти она занимает, как она размещена и, что более важно, как вы можете с ней взаимодействовать.
Я не буду вносить изменения сам, потому что не уверен, что вы хотели написать, но, возможно, лучше будет сказать, что классы являются «разновидностью типа», а не «типом типа».
CVn
@ MichaelKjörling Да, это лучший способ сказать это. Я обновлю его.
Брэндон
3
Вы забыли нулевой тип (см. JLS 4.1).
user1803551
1
@AndyDong Абстрактный класс по-прежнему остается классом.
Брэндон
6
TL; DR - класс является одним из типов в Java.
Примечание. Чтобы полностью понять ответ, вы должны иметь некоторое представление о дженериках в Java.
Чтобы понять разницу, давайте сначала разберемся, что такое тип в Java.
В языке программирования Java есть два типа типов :
примитивные типы ( §4.2 ) и ссылочные типы (§4.3).
Что такое примитивный тип?
a) Целочисленные типы - это byte, short, int и long , значения которых представляют собой 8-битные, 16-битные, 32-битные и 64-битные целые числа с дополнением до двух со знаком, соответственно, и char, значения которых являются 16-битными. целые числа без знака, представляющие кодовые единицы UTF-16 (§3.1).
б) Типы с плавающей запятой - это float , значения которого включают 32-битные числа с плавающей запятой IEEE 754, и double , значения которого включают 64-битные числа с плавающей запятой IEEE 754.
c) Логический тип имеет ровно два значения: истина и ложь.
Теперь давайте перейдем к тому, что такое ссылочный тип?
Есть четыре вида ссылочных типов: типы класса ( §8.1 ), типы интерфейсов ( §9.1 ), переменные типа ( §4.4 ), а также типы массивов ( §10.1 ).
Давайте обсудим по порядку.
Если вы видите, как в JLS, класс определяется следующим образом:
Объявление класса определяет новый именованный ссылочный тип.
Есть два вида объявлений классов: обычные объявления классов и объявления перечислений .
Как видите [TypeParameters], это показывает, что тип класса также включает в себя эти общие классы.
classExample<T>{}
Тип класса будет называться Example
Короче говоря, тип класса охватывает наши перечисления, наши обычные (не общие) классы, такие как и Stringт.д., а также наши общие классы.
Точно так же я надеюсь, что интерфейс и типы массивов тоже понятны. Под типом массива мы подразумеваем подобное int[]и String[]т. Д.
Перейдем к последней части - Переменные типа. Кто они такие ?
Переменная типа - это неквалифицированный идентификатор, используемый как тип в телах класса, интерфейса, метода и конструктора.
Давайте разберемся на примере в JLS под ним.
classTest{<T extends C & I>void test(T t){
t.mI();// OK
t.mCPublic();// OK
t.mCProtected();// OK
t.mCPackage();// OK}}
Вы видите, что ваш объект в параметре метода имеет тип T. Да, это Tпеременная типа, которую можно использовать в качестве справочной. Да, это так. (Не могу понять этот странный пример - узнайте, что такое универсальный метод в Java)
«Тип» - более инклюзивная категория. Переменные в Java могут иметь три типа: 8 «примитивных» типов, таких как int и float, интерфейсы и классы. Значения (в отличие от переменных) могут быть примитивными или экземплярами класса.
Пример: «hello world» - это String -> «hello world» - это String (String не является предварительными данными, в отличие от int .. поэтому мы можем сказать, что «hello world» - это строковый тип класса)
10 - это int -> 10 - это целочисленный тип данных.
Ответы:
Класс - это тип. Интерфейс - это тип. Примитив - это тип. Массив - это тип.
Следовательно, каждый тип также является либо классом (включая константу перечисления), либо интерфейсом, либо примитивом, либо массивом.
Есть две различные категории типов: примитивные типы и ссылочные типы:
Object
. Ссылочные типы - это типы классов (включая типы перечислений), типы интерфейсов и типы массивов.У каждой части данных есть тип, который определяет ее структуру, а именно, сколько памяти она занимает, как она размещена и, что более важно, как вы можете с ней взаимодействовать.
Примеры примитивных типов:
int
float
char
boolean
Примеры типов классов:
String
Integer
Boolean
ArrayList
StringBuilder
Примеры типов интерфейсов:
Collection
List
Map
Serializable
Примеры типов массивов:
int[]
String[]
Integer[][][]
По сути, все, что вы можете назвать переменной, имеет тип, а классы - это своего рода тип.
Подробнее здесь: http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html
источник
TL; DR - класс является одним из типов в Java.
Примечание. Чтобы полностью понять ответ, вы должны иметь некоторое представление о дженериках в Java.
Чтобы понять разницу, давайте сначала разберемся, что такое тип в Java.
Согласно JLS SE 10 ,
Что такое примитивный тип?
Теперь давайте перейдем к тому, что такое ссылочный тип?
Давайте обсудим по порядку.
Если вы видите, как в JLS, класс определяется следующим образом:
Как видите
[TypeParameters]
, это показывает, что тип класса также включает в себя эти общие классы.Тип класса будет называться
Example
Короче говоря, тип класса охватывает наши перечисления, наши обычные (не общие) классы, такие как и
String
т.д., а также наши общие классы.Точно так же я надеюсь, что интерфейс и типы массивов тоже понятны. Под типом массива мы подразумеваем подобное
int[]
иString[]
т. Д.Перейдем к последней части - Переменные типа. Кто они такие ?
Давайте разберемся на примере в JLS под ним.
Вы видите, что ваш объект в параметре метода имеет тип
T
. Да, этоT
переменная типа, которую можно использовать в качестве справочной. Да, это так. (Не могу понять этот странный пример - узнайте, что такое универсальный метод в Java)Это завершает ответ.
источник
«Тип» - более инклюзивная категория. Переменные в Java могут иметь три типа: 8 «примитивных» типов, таких как int и float, интерфейсы и классы. Значения (в отличие от переменных) могут быть примитивными или экземплярами класса.
источник
"Тип" определяет "какой это тип данных"
Пример: «hello world» - это String -> «hello world» - это String (String не является предварительными данными, в отличие от int .. поэтому мы можем сказать, что «hello world» - это строковый тип класса)
10 - это int -> 10 - это целочисленный тип данных.
источник