Будучи новим у Java, я плутаюся між поняттями класу та типу . Наприклад, чи повинен "Hello World!"
належати об'єкт типу String
чи класу String
? А може, і те й інше?
Будучи новим у Java, я плутаюся між поняттями класу та типу . Наприклад, чи повинен "Hello World!"
належати об'єкт типу String
чи класу String
? А може, і те й інше?
Відповіді:
Клас - це тип. Інтерфейс - тип. Примітив - це тип. Масив - це тип.
Тому кожен тип також є або класом (включаючи константу перерахунку), інтерфейсом, примітивом або масивом.
Існує дві різні категорії типів: примітивні типи та типи посилань:
Object
. Референтні типи - це типи класів (включаючи типи переліку), типи інтерфейсів та масиви.Кожен фрагмент даних має тип, який визначає його структуру, а саме, скільки пам'яті вона займає, як вона викладається, і що ще важливіше, як ви можете з нею взаємодіяти.
Приклади примітивних типів:
int
float
char
boolean
Приклади типів класів:
Приклади типів інтерфейсу:
Приклади типів масивів:
int[]
String[]
Integer[][][]
В основному, все, що можна вказати як змінну, має тип, а класи - це тип.
Більше інформації тут: http://docs.oracle.com/javase/specs/jls/se8/html/jls-4.html
TLDR - Клас - один із типів у Java.
Примітка. Щоб повністю зрозуміти відповідь, ви повинні мати трохи уявлення про генеричні засоби на Java.
Щоб зрозуміти різницю, давайте спочатку розберемося, що таке тип у Java.
Відповідно до JLS SE 10 ,
У мові програмування Java існує два типи : примітивні типи ( §4.2 ) та типи посилань (§4.3).
Що таке примітивний тип?
а) Інтегральними типами є байт, короткий, int та довгий , значеннями яких є 8-бітні, 16-бітні, 32-розрядні та 64-бітні цілі цілі числа комплементу відповідно та char, значення яких 16-бітні непідписані цілі числа, що представляють кодові одиниці UTF-16 (§3.1).
б) типи з плаваючою точкою з плаваючою точкою , значення яких включають в себе 32-розрядні IEEE 754 числа з плаваючою точкою, і двічі , значення яких включають в себе 64-розрядні IEEE 754 числа з плаваючою крапкою.
в) Булевий тип має рівно два значення: істинне і хибне.
Тепер давайте підійдемо до того, що є еталонним типом?
Існує чотири типи посилальних типів: типи класів ( §8.1 ), типи інтерфейсів ( §9.1 ), змінні типу ( §4.4 ) та типи масивів ( §10.1 ).
Давайте обговоримо по черзі.
Якщо ви бачите, як у JLS клас визначається так:
Оголошення класу задає новий іменований контрольний тип.
Існує два види декларацій класу: звичайні декларації класу та декларації перерахунків .
ClassDeclaration:
NormalClassDeclaration
EnumDeclaration
NormalClassDeclaration:
{ClassModifier} class TypeIdentifier [TypeParameters] [Superclass] [Superinterfaces] ClassBody
Ви бачите, що [TypeParameters]
це показує, що тип класу включає і ці загальні класи.
class Example<T>{
}
Тип класу буде називатися Example
Коротше кажучи, тип класу охоплює наші переліки, наші звичайні (незагальні) класи, наприклад String
тощо, і наші загальні класи.
Так само я сподіваюся, що інтерфейси та масиви також зрозумілі. За типом масиву ми маємо в виду , як int[]
, і String[]
т.д.
Прийдемо до останньої частини - Введіть змінні. Хто вони ?
Змінна типу - це некваліфікований ідентифікатор, який використовується як тип у органах класу, інтерфейсу, методу та конструктора.
Давайте розберемося на прикладі в JLS під ним.
class Test {
<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" - це рядок -> "hello world" - це тип String (String - це не попереджувальна інформація на відміну від int .. тому ми можемо сказати, що "hello world" - це тип класу string)
10 - int -> 10 - цілий тип даних.