Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
#1

Как объявить статический класс? - Программирование Android

14.08.2015, 16:43. Просмотров 1003. Ответов 20
Метки нет (Все метки)

В Android Studio заметил интересную вещь, есть некий класс (AlertDialog.Builder), объявлен как static, но в то же время можно создавать его экземпляр. Как такое может быть? Я знаком со статическими полями, методами, а вот можно ли объявлять весь класс статическим? Пробовал сделать это в Eclipse-подчеркивает красным, не дает. Помогите пожалуйста разобраться
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2015, 16:43     Как объявить статический класс?
Посмотрите здесь:

Как объявить ImageButton в Fragment.java? - Программирование Android
Помогите пожалуйста!Есть Fragment как правильно объявить ImageButton,что бы по нажатию на него происходил переход на другой экран.

Как объявить переменную в Андроид Студио? - Программирование Android
Не кидайте тапками, если вопрос сильно глупый) Осваиваю Андроид Студио по урокам Александра Климова...

Статический listener - Программирование Android
Всем привет! Немного затупил. Есть некий ListView, в котором хранятся изображения. Изображения гружу при помощи Glide, в котором есть...

Статический импорт в Android - Программирование Android
Когда я пишу, например, import static java.lang.Math.abs - все работает и все хорошо. А если я хочу импортнуть все статические методы, я...

Как наследовать класс activity - Программирование Android
Написал класс activity1 в котором программно создан layout1. Как использовать мой класс в новом создаваемом приложении? какой нужен...

Как использовать класс Cashemanager? - Программирование Android
для чего применяется\ класс Cashemanager как при помощи его методов сохранить значение в память или получить значение из памяти??

Как использовать класс Dictionary? - Программирование Android
доброго времени суток форумчане! Пожалуйста помогите!!! Как использовать класс Dictionary(),,,обяснит пример показать((((

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
14.08.2015, 17:26     Как объявить статический класс? #2
danek130995, http://stackoverflow.com/a/7486111
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
14.08.2015, 20:48  [ТС]     Как объявить статический класс? #3
Spelcrawler, я прочитал, это симуляция статического класса, но ведь тут нету самого идентификатора static в объявлении класса, класс просто называется public final class MyStaticClass. А в Android Studio есть явный пример- public static class Builder {...}
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
14.08.2015, 22:02     Как объявить статический класс? #4
Java has no way of making a top-level class static
Можно сделать статичным только внутренний класс. Да и вообще не вижу смысла в статичном классе. Сделайте конструктор private и все методы static. Эффект тот же - создать экземпляр класса нельзя(разве что унаследоваться от него) и все методы доступны. Ну и поля тоже сделать static конечно.
Netscape
371 / 358 / 48
Регистрация: 02.10.2009
Сообщений: 712
Записей в блоге: 4
14.08.2015, 22:02     Как объявить статический класс? #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
статическим может быть только внутренний класс.
нпрм:
Java
1
2
3
4
5
6
public class A {
 
static class B {
}
 
}
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
14.08.2015, 22:09  [ТС]     Как объявить статический класс? #6
Spelcrawler, Netscape, а вот в чем дело, только внутренний класс.. Спасибо! Хотя смысла не вижу в нем
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 653
15.08.2015, 00:29     Как объявить статический класс? #7
Смысл в том, что его экземпляр не имеет ссылку на внешний класс(при создании)
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
15.08.2015, 09:56  [ТС]     Как объявить статический класс? #8
Mikalai, извините, не совсем понятно. Так всегда вроде только переменная супер класса может ссылаться на объект подкласса, как понять экземпляр не имеет ссылку на внешний класс? Или вы имеете ввиду на любой другой внешний класс?
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 653
15.08.2015, 10:53     Как объявить статический класс? #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вложенный нестатический класс – это класс, который объявлен как нестатический член окружающего класса. Если статический вложенный класс принадлежал всему классу, то нестатический вложенный класс всегда связан с конкретным экземпляром окружающего класса.
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
15.08.2015, 12:20  [ТС]     Как объявить статический класс? #10
Mikalai, это теперь понятно. Но я сейчас попытался в Eclipse создать экземпляр вложенного нестатического класса-у меня не получилось, а создать экземпляр вложенного статического-получилось, странно.
Java
1
2
3
4
5
public class mememe {
class me2{
    
}
}
Java
1
2
3
4
5
public class Counter {
public static void main(String args[]){
    mememe.me2 mc=new mememe.me2();
}
}
Подчеркивает красным последнюю строчку.

Если же me2 объявить как static, то работает. Почему так?
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 653
15.08.2015, 12:36     Как объявить статический класс? #11
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Описываем внутренний класс
Java
1
2
3
public class Second {
    class Third {}
}
Создаём экземпляр
Java
1
2
3
4
5
public class First {
    public static void main(String[] args){
        Second.Third third = new Second().new Third();
    }
}
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
15.08.2015, 13:14  [ТС]     Как объявить статический класс? #12
Mikalai, точно, забыл еще один new. Спасибо! И как я понял, если бы Ваш класс Third был объявлен как static, то он принадлежал бы всему внешнему классу(т.е. к нему можно было бы обратиться из любого экземпляра и он был бы одним и тем же для всех экземпляров), а в данной ситуации Third принадлежит только экземпляру, ссылка на который-third, и для каждого экземпляра будет новый Third, правильно?
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 653
15.08.2015, 13:21     Как объявить статический класс? #13
Да. Это так.
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
15.08.2015, 13:35  [ТС]     Как объявить статический класс? #14
Mikalai, опять вопрос появился - а ежели static класс един для всех экземпляров, зачем тогда создавать его экземпляр?
Java
1
mememe.me2 mc=new mememe.me2();
И чем тогда эта запись отличается от этой по смыслу?
Java
1
mememe mc=new mememe();
Добавлено через 5 минут
Mikalai, сейчас попробовал обратиться к переменной-члену класса me2 -в первом случае получилось, во втором ее не видит. Стало быть, во втором случае создается только экземпляр внешнего класса, и нельзя получить доступ к подклассу, а в первом случае создаются экземпляры обеих классов?
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 653
15.08.2015, 14:01     Как объявить статический класс? #15
Почитай тут
Pablito
2452 / 1897 / 590
Регистрация: 12.05.2014
Сообщений: 6,698
Завершенные тесты: 1
15.08.2015, 17:07     Как объявить статический класс? #16
а еще тут
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
15.08.2015, 17:10  [ТС]     Как объявить статический класс? #17
Mikalai, почитал. Сейчас объявил два экземпляра статического класса- и в одном из них изменил значение переменной-члена. Судя по тому, что класс "статичен", значение переменной должно было поменяться и в другом "экземпляре", но оно почему то не поменялось.. Странно
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 653
15.08.2015, 18:15     Как объявить статический класс? #18
danek130995, StaticNestedClass и singleton - это разные вещи. StaticNestedClass просто не привязан к конкретному объекту его обрамляющего класса(OuterClass). Но это не значит, что у него существует только один экземпляр(для этого используют шаблон проектирования singleton). Вот тут можно прочитать про то, что StaticNestedClass ведёт себя как top-level class, который был вложен в другой класс верхнего уровня для удобства упаковки(packaging convenience).
danek130995
23 / 23 / 1
Регистрация: 25.05.2014
Сообщений: 850
15.08.2015, 21:55  [ТС]     Как объявить статический класс? #19
Mikalai, что то я потерялся, мне кажется я совсем понимаю вот что: что вы имееете ввиду под
Цитата Сообщение от Mikalai Посмотреть сообщение
не привязан к конкретному объекту его обрамляющего класса
Можете привести пример, как понять привязан/не привязан?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2015, 23:26     Как объявить статический класс?
Еще ссылки по теме:

Как изменить дефолтный класс в eclipse? - Программирование Android
Вот есть, например, Log.class, с помощью которого мы показываем логи приложения. Как можно изменить этот класс?

Класс Date, как правильно задать дату? - Программирование Android
public class MainActivity extends ActionBarActivity { TextView Text; @Override protected void onCreate(Bundle...

Как передать ссылку по клику в другой класс? - Программирование Android
как передать ссылку по клику в другой класс есть класс парсера вот часть кода protected InputStream getInputStream() { ...

Как организовать класс для работы с несколькими таблицами - Программирование Android
private class DbOpenHelper extends SQLiteOpenHelper{ public DbOpenHelper(Context context, final String DB_NAME,...

Как можно вызывать один класс в разных activity? - Программирование Android
Всем привет! Пишу плеер типа ютюба и нужно, чтобы один класс вызывался в нескольких активти. я думаю нет смысла писать код плеера в каждой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 653
15.08.2015, 23:26     Как объявить статический класс? #20
Статический внутренний класс должен обращаться к нестатическим членам своего внешнего класса при помощи объекта, т.е. он не может обращаться напрямую на нестатические члены своего внешнего класса(тоесть объект внемшего класса не создаётся)

Внутренний класс(non-static) имеет доступ ко всем переменным и методам своего внешнего класса и может непосредственно ссылаться на них(значит объект внешнего класса создаётся и существует, как минимум, пока существует объект внутреннего класса). Если вам понадобится получить ссылку на объект внешнего класса, запишите имя внешнего класса, за которым следует точка, а затем ключевое слово this.

information
Yandex
Объявления
15.08.2015, 23:26     Как объявить статический класс?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru