В чем разница между полями и константами в документах андроидов? Например, в View Class у нас есть поля и константы. Я думаю, что константы в классе вида являются полями. Поскольку каждая переменная в каждом классе является полем. Пожалуйста, пример для меня об этой двусмысленности.В чем разница между полями и константами в андроидной документации?
ответ
Когда ваше приложение скомпилировано, любые константные значения скомпилируются непосредственно в приложение. Используя пример из комментария @ CommonsWare, ACCESSIBILITY_LIVE_REGION_ASSERTIVE
является целым числом со значением 2. Это значение будет по-прежнему использоваться вашим приложением, даже если класс View будет обновлен в будущей версии Android, поэтому вы не можете поставить " какую версию Android я сейчас запускаю на «в константе». И наоборот, это прекрасный способ записать, какую версию SDK было скомпилировано вашим приложением.
Поля окончательные, что означает, что вы не можете их изменить, если только вы не используете JNI, и в этом случае вы можете. Однако, поскольку компилятор использует значения напрямую, когда это возможно, изменение значения конечных полей не повлияет на какой-либо код - если только он не обратится к ним через отражение.
Таким образом, различие между «постоянным» и «полем» может иметь важное значение.
Примитивные типы и строки могут быть константами. Для массивов и других типов объектов, таких как int[]
, используемых для SELECTED_STATE_SET
, эта ссылка сама по себе доступна только для чтения, но содержимое объекта не является. Это относится к любому изменяемому типу объектов, поэтому нет смысла перечислять их под «константами».
В Java нет такой вещи, как константа. Есть только поля, которые можно пометить static, чтобы стать полем класса (то есть одним экземпляром для каждого класса для всех объектов одного и того же класса, а не по одному на каждый объект, как будто без «статического»). Вы можете получить доступ к статическим полям по ссылке на класс, не создавая экземпляр класса (т. Е. MyClassName.sMyStaticField) Кроме того, вы можете пометить свое поле final. Это означает значение поля, назначенное в коде инициализации, и никогда не изменится. Если вы назначаете статическое окончание, укажите постоянное значение (например, число), это значение не изменится и будет одинаковым для всех экземпляров класса. Таким образом, в Java он используется как постоянное значение, чтобы назначить определенное значение конкретному имени. Поскольку их значения известны во время компиляции, их можно использовать для создания условной компиляции. Часть коды, в зависимости от таких постоянных величин, может быть исключена во время компиляции
public static final boolean ENABLE_MY_SUPER_DUPER = false;
...
if (ENABLE_MY_SUPER_DUPER) {
doSuperDuper(); // Not just never executed, but not even compiled
}
Это не может быть произошло, если значение, присвоенное поле не может быть известно во время выполнения приложения (например, ссылки на объекты или массивы)
таким образом, технически, статического конечные поля и так называемый «постоянное» то же самое, но в документации «константы» обозначают некоторые предопределенные постоянные значения, которые одинаковы для всех приложений (то есть числа, строки константы и т. д.). В «поле» под «статическим финалом» есть некоторые объекты, которые создаются один раз сразу после запуска приложения, но его значение не может быть известно во время компиляции. Например, массивы, некоторые экземпляры объектов и т. Д. Технически вы не можете изменять свои значения, так как они являются финалами, но вы можете изменить их внутренний контент. То есть вы не можете создать новый объект или массив и назначить его в одно и то же поле, но вы можете изменить элементы или поля уже созданного массива/объекта.
- 1. разница между шестнадцатеричными константами и десятичными константами в сервере SQL
- 2. В чем разница между этими двумя полями?
- 3. В чем разница между @Property и {полями} в объекте c?
- 4. Разница между константами HUGE_VALF и INFINITY
- 5. В чем разница между полями IPAddress.Any и IPAddress.IPv6Any?
- 6. В чем разница между переменными «Pentaho DI» и «полями»?
- 7. В чем разница между полями CCK Decimal и Float?
- 8. Различия между «локальными константами» и «постоянными полями» в настройках R #?
- 9. Разница между литеральной строкой и константами
- 10. Разница между кордовой и андроидной студией
- 11. Разница между источником и полями
- 12. В чем разница между «Я» и «Я»?
- 13. В чем разница между «и»?
- 14. В чем разница между `{}` и `[]`?
- 15. В чем разница между == и ===?
- 16. В чем разница между «+» и «\ +»?
- 17. В чем разница между + = и = +?
- 18. В чем разница между/* ... */и/** ... */
- 19. В чем разница между: и +:
- 20. В чем разница между $ {} и # {}
- 21. В чем разница между $ _. и $ _
- 22. В чем разница между = и: =
- 23. В чем разница между && и &?
- 24. В чем разница между $ {} и # {}?
- 25. В чем разница между + и%?
- 26. В чем разница между + = и = +
- 27. В чем разница между # {} $ {} и% {}?
- 28. В чем разница между «» и «»?
- 29. В чем разница между ['#'] и [. = '#']?
- 30. В чем разница между == ~ и! =?
Как правило, различают ли они чтение/запись.Константы объявляются 'final' и доступны только для чтения (например,' public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE'). При этом я не знаю, как их генераторы JavaDoc различают «окончательные» значения, такие как «SELECTED_STATE_SET» (перечисленные в Полях) и «ACCESSIBILITY_LIVE_REGION_ASSERTIVE» (перечислены в Константах). – CommonsWare