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

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

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

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

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

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

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

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

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

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

Как объявить статический метод класса? - C++
выдает ошибку на 11 16 19 строку((((((( #include <iostream> using namespace std; class Sop { private: short int kol; ...

Как правильно объявить статический метод - C++
например class A { private: static void method(); // объявление }; // как правильно объявить реализацию?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
14.08.2015, 17:26 #2
danek130995, http://stackoverflow.com/a/7486111
1
danek130995
24 / 24 / 1
Регистрация: 25.05.2014
Сообщений: 873
14.08.2015, 20:48  [ТС] #3
Spelcrawler, я прочитал, это симуляция статического класса, но ведь тут нету самого идентификатора static в объявлении класса, класс просто называется public final class MyStaticClass. А в Android Studio есть явный пример- public static class Builder {...}
0
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,649
Завершенные тесты: 1
14.08.2015, 22:02 #4
Java has no way of making a top-level class static
Можно сделать статичным только внутренний класс. Да и вообще не вижу смысла в статичном классе. Сделайте конструктор private и все методы static. Эффект тот же - создать экземпляр класса нельзя(разве что унаследоваться от него) и все методы доступны. Ну и поля тоже сделать static конечно.
1
Netscape
372 / 359 / 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 {
}
 
}
1
danek130995
24 / 24 / 1
Регистрация: 25.05.2014
Сообщений: 873
14.08.2015, 22:09  [ТС] #6
Spelcrawler, Netscape, а вот в чем дело, только внутренний класс.. Спасибо! Хотя смысла не вижу в нем
0
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 655
15.08.2015, 00:29 #7
Смысл в том, что его экземпляр не имеет ссылку на внешний класс(при создании)
1
danek130995
24 / 24 / 1
Регистрация: 25.05.2014
Сообщений: 873
15.08.2015, 09:56  [ТС] #8
Mikalai, извините, не совсем понятно. Так всегда вроде только переменная супер класса может ссылаться на объект подкласса, как понять экземпляр не имеет ссылку на внешний класс? Или вы имеете ввиду на любой другой внешний класс?
0
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 655
15.08.2015, 10:53 #9
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вложенный нестатический класс – это класс, который объявлен как нестатический член окружающего класса. Если статический вложенный класс принадлежал всему классу, то нестатический вложенный класс всегда связан с конкретным экземпляром окружающего класса.
1
danek130995
24 / 24 / 1
Регистрация: 25.05.2014
Сообщений: 873
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, то работает. Почему так?
0
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 655
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();
    }
}
1
danek130995
24 / 24 / 1
Регистрация: 25.05.2014
Сообщений: 873
15.08.2015, 13:14  [ТС] #12
Mikalai, точно, забыл еще один new. Спасибо! И как я понял, если бы Ваш класс Third был объявлен как static, то он принадлежал бы всему внешнему классу(т.е. к нему можно было бы обратиться из любого экземпляра и он был бы одним и тем же для всех экземпляров), а в данной ситуации Third принадлежит только экземпляру, ссылка на который-third, и для каждого экземпляра будет новый Third, правильно?
0
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 655
15.08.2015, 13:21 #13
Да. Это так.
1
danek130995
24 / 24 / 1
Регистрация: 25.05.2014
Сообщений: 873
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 -в первом случае получилось, во втором ее не видит. Стало быть, во втором случае создается только экземпляр внешнего класса, и нельзя получить доступ к подклассу, а в первом случае создаются экземпляры обеих классов?
0
Mikalai
256 / 232 / 93
Регистрация: 11.01.2015
Сообщений: 655
15.08.2015, 14:01 #15
Почитай тут
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2015, 14:01
Привет! Вот еще темы с ответами:

Как лучше объявить статический список или массив - Delphi
Добрый день! Задача банальная, но не могу сообразить. Вообще есть ряд чисел integer: -32, -16, -8, 8, 16, 32. Как лучше мне...

Полиморфизм. Как в предке объявить статический массив, который можно будет использовать в наследниках? - C++
Всем привет. Мне необходимо в классе предке объявить статический массив который можно будет использовать в наследниках. Не очень хочется...

Почему нельзя объявить в описание класса статический double? - C++
Ближе к делу :) class SuperClass { public: SuperClass() {} static const int A = 0; static const double B = 0; //ERROR*...

SQLite Статический класс как уровень доступа к БД - C#
Внутри класса реализуются члены доступа к локальной БД, в основном все основано на автономном уровне ADO.NET - DataSet, DataTable и т.д. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.08.2015, 14:01
Ответ Создать тему
Опции темы

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