java — В чем разница между «static final» VS «final»?

Вопрос задан

Изменён 1 месяц назад

Просмотрен 2k раза

static final и final.

Оба значения константы и изменению не подлежат.

В чем же разница?

  • java
  • static
  • final

2

final — значит неизменяемая, если быть точнее, то разрешается только одна операция присвоения

static — означает единая для всех экземпляров класса.

class Foo {
    static final int FOO1=1;
    final int foo2;
}

В данном примере:

  • для всех экземпляров класса Foo переменная FOO1
    всегда будет равна 1
  • переменная foo2 — может быть разной для разных экземпляров класса Foo

При этом оба безусловно неизменяемые.

Начнем с общего. static и final являются модификаторами.

На этом пожалуй всё.

Static — с англ. «статичный», «постоянный» — делает переменную или метод «независимыми» от объекта. Link

А суть модификатора final — сделать дальнейшее изменение объекта невозможным. Link

Т.е. Эти модификаторы находятся совсем в разных плоскостях взаимодействия на то, к чему они были пременены.

Это и является ответов на Ваш вопрос.

Если же вы хотите понять, что такое static и final и с чем это всё едят, то рекомендую ознакомиться ссылками представленные выше. Так как не возможно описать эти модификаторы один предложения не целяя за собой ряд тем. Уже всё хорошо описано в книгах по теме или же смело гуглить по каждому модификатору.

3

Если коротко (если подробно):

Ключевое слово static указывает, что константа существует в единственном числе.

Ключевое слово final указывает, что значение константы остается неизменным.

Константа с ключевыми словами static и final, существует в памяти в единственном экземпляре и ее значение не может быть изменено.

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки

Зачем нужен static java — automated-testing — java

mindjin (Alex)

Январь.2015 09:26:15

#1

Прочитал о static, но не могу понять до конца его принцип работы и чем чревато его использование. Иногда в коде требуется (например при использовании enum) использование static переменных или методов. Почему коду вообще требуется статик? Для того чтобы можно было проще писать PageOne.setName()? И почему когда мы обращаемся к static, все что к нему “прикасается”, тоже превращается в static? Я понимаю что все элементы с этой припиской занимают в памяти место только один раз и в дальнейшем только она используется, но я не понимаю этого момента. Почему тогда все методы и переменные не делать static? Спасибо.

1 симпатия

ArtOfLife (Sergey Korol)

#2

mindjin:

Почему коду вообще требуется статик?

  • Для вызова статического метода или филда не нужно создавать экземпляр класса.
  • Константы могут быть только статическими.
  • Значения статических филдов шарятся между всеми инстансами.
  • Статический импорт сокращает написание кода.
  • При помощи статики легче организовать централизованный доступ к нужному функционалу.
  • Статический контекст в основном используют в так называемых хэлперах.

mindjin:

Почему тогда все методы и переменные не делать static?

Потому что основные концепции ООП предполагают осознание того факта, что принципиально разные по своей природе объекты не могут изменять свойства или управлять поведением друг друга. А родственные объекты должны уметь хранить “секреты”. Бездумное использование публичного статического контекста может привести к печальным последствиям.

Банальный пример: распространенная ошибка всех начинающих автоматизаторов, желающих распараллелить свои тесты со статическим потокоуязвимым драйвером.

9 симпатий

mindjin (Alex)

Январь.2015 11:41:16

#3

ArtOfLife:

  • Статический контекст в основном используют в так называемых хэлперах.

В видео от Баранцева, он часто упоминает, что логику для тестов нужно разделять, для этого надо использовать хелперы (помощников), в данном варианте это одно и тоже?

1 симпатия

ArtOfLife (Sergey Korol)

#4

Не могу сказать наверняка, не будучи уверенным в том, о каком видео идет речь. Но мне кажется, что там была другая идея. В общем случае, тестовая логика — это часть написанного вами DSL, представленного в виде методов PageObjects. Эти методы по дефолту сложно будет связать со статическим контекстом, т.к. там используется чистое наследование с цепочечным вызовом.

Говоря о хэлперах, представьте модули, облегчающие вам жизнь в процессе автоматизации: DateTimeUtils, CurrencyUtils, EmailUtils, StringUtils, ReflectionUtils, PropertiesUtils, XMLUtils, DataProviderUtils, ReportUtils и т.п. Все те вещи, которые фактически могут быть использованы в разных частях приложения, и технически не требуют создания дополнительных сущностей. Оборачивая сырые API каких-нибудь готовых библиотек, и формируя своеобразный single public entry point, вы облегчаете себе разработку как фреймворка в целом, так и доменной части.

1 симпатия

olexsbas (Olexsandr Borisov)

#5

static определяется на этапе компиляции, поэтому в коде ты всегда смело можешь к ним обращаться, и тебе не требуется создавать экземпляр класса.

тебе нужно понять как выполняется код в java

mindjin (Alex)

#6

Да я понимаю, просто мне всегда казалось что использовать везде статик плохо. Например, мне нужно использовать аннотации @BeforeClass и @AfterClass, а методы связанные с ними обязывает сделать все вокруг статик (и сами методы и все что в них). И пока я не совсем понимаю как в дальнейшем это отразится на работе Framework.

olexsbas (Olexsandr Borisov)

#7

канешно плохо, все зависит от задачи где то тебе нужна динамика, где то статика

vmaximv (vmaximv)

#8

mindjin:

Ну вот даже например мне нужно использовать аннотации @BeforeClass и @AfterClass, а методы связанные с ними обязывает сделать все вокруг статик (и сами методы и все что в них).

Мувайтесь на TestNG

mindjin (Alex)

#9

На него можно без “потерь перейти”? Или в коде нужно будет много чего поменять?

vmaximv (vmaximv)

#10

Кроме вас на этот вопрос никто не ответит. Минимум нужно перебить импорты.

1 симпатия

sawa (alexander)

#11

Я конечно не знаю на сколько большой и мудреный Вы задумываете фреймворк тестирования, но JUnit обычно хватает с головой. И это совсем не повод муваться на TestNG. JUnit взят за основной фреймворк на многих проектах. И лишь иногда, когда обстоятельства выше нас… приходится муваться на TestNG.

а методы связанные с ними обязывает сделать все вокруг статик (и сами методы и все что в них).

В Java не запрещается в static методах создавать экземпляры классов и вызывать соответствующие методы.

методов. Что означает «public static void» в Java?

спросил

Изменено 3 года, 10 месяцев назад

Просмотрено 596 тысяч раз

Что означает public static void в Java?

Я в процессе обучения. Во всех примерах в книге я работаю с public static void предшествует любому методу, который используется или создается. Что это значит?

  • Java
  • методы

0

Это три совершенно разные вещи:

public означает, что метод виден и может вызываться из других объектов других типов. Другими альтернативами являются private , protected , package и частный пакет . Подробнее см. здесь.

static означает, что метод связан с классом, а не с конкретным экземпляром (объектом) этого класса. Это означает, что вы можете вызывать статический метод без создания объекта класса.

void означает, что метод не имеет возвращаемого значения. Если бы метод возвращал int , вы бы написали int вместо void .

Комбинация всех трех из них чаще всего наблюдается на основной метод , который будет включен в большинство руководств.

3

Эти три слова имеют ортогональные значения.

public означает, что метод будет виден из классов в других пакетах.

static означает, что метод не привязан к конкретному экземпляру, и у него нет « this «. Это более или менее функция.

void — тип возвращаемого значения. Это означает, что «этот метод ничего не возвращает».

0

Ключевое слово public — это спецификатор доступа, который позволяет программисту управлять видимостью членов класса. Когда члену класса предшествует public, доступ к этому члену может быть получен из кода вне класса, в котором он объявлен. (Противоположностью public является private, что предотвращает использование члена кодом, определенным вне его класса.)

В этом случае main() должен быть объявлен как public, так как он должен вызываться кодом вне класса. его класс при запуске программы.

Ключевое слово static позволяет вызывать main() без создания конкретного экземпляра класса. Это необходимо, поскольку main() вызывается интерпретатором Java до того, как будут созданы какие-либо объекты.

Ключевое слово void просто сообщает компилятору, что main() не возвращает значение. Как вы увидите, методы также могут возвращать значения.

0

Это означает, что:

  • публичный — можно звонить откуда угодно
  • статический — у него нет состояния объекта, поэтому вы можете вызывать его без создания экземпляра объекта
  • void — ничего не возвращает

Можно подумать, что отсутствие возврата означает, что он мало что делает, но может, например, что-то сохранять в базе данных.

Это означает три вещи.

Первый общедоступный означает, что любой другой объект может получить к нему доступ.

static означает, что класс, в котором он находится, не должен быть сначала создан, прежде чем функция может быть вызвана.

void означает, что функция не возвращает значение.

Поскольку вы только учитесь, не беспокойтесь о первых двух, пока не изучите классы, а третья не будет иметь большого значения, пока вы не начнете писать функции (кроме main).

Лучший совет, который я получил, когда учился программировать, и который я передаю вам: не беспокойтесь о мелких деталях, которые вы не сразу понимаете. Получите общий обзор основ, а затем вернитесь и позаботьтесь о деталях. Причина в том, что вы должны использовать некоторые вещи (например, public static void ) в ваших первых программах, которые не могут быть хорошо объяснены без предварительного изучения множества других вещей. Итак, на данный момент просто примите, что это так, и двигайтесь дальше. Вскоре вы их поймете.

Учитывая типичный класс высшего уровня. На верхнем уровне можно использовать только модификаторы доступа public и no modifier, поэтому вы либо увидите public, либо вообще не увидите никаких модификаторов доступа.

`static« используется, потому что вам может не понадобиться создавать фактический объект на верхнем уровне. (но иногда вам может понадобиться, чтобы вы не всегда могли видеть/использовать static. Есть и другие причины, по которым вы также не должны включать static, но это типичная причина на верхнем уровне.)

void используется, потому что обычно вы не собираетесь возвращать значение с верхнего уровня (класса). (иногда вы захотите вернуть значение, отличное от NULL , поэтому void не всегда может использоваться, особенно в случае, когда вы объявили, инициализировали объект на верхнем уровне, которому вы присваиваете какое-то значение).

Отказ от ответственности: Я сам новичок, поэтому, если этот ответ неверен, пожалуйста, не вешайте меня. Днем я рекрутер, а не разработчик; кодирование — мое хобби. Кроме того, я всегда открыт для конструктивной критики и люблю учиться, поэтому, пожалуйста, не стесняйтесь указывать на любые ошибки.

1

Public — означает, что класс (программа) доступен для использования любым другим классом.

Static — создает класс. Также может применяться к переменным и методам, делая их методами/переменными класса, а не просто локальными для конкретного экземпляра класса.

Void — это означает, что после завершения обработки класса продукт не возвращается. Сравните это с вспомогательными классами, которые возвращают значение для основного класса, они работают как функции; у них нет пустоты в декларации.

  • public означает, что вы можете получить доступ к классу из любого места в классе/объекте или за пределами пакета или класса
  • static означает константу, в которой блок оператора используется только 1 раз
  • void означает отсутствие возвращаемого значения

2

static означает, что метод связан с классом, а не с конкретным экземпляром (объектом) этого класса.