Можно сохранить учетные данные где угодно, включая как соединенные проводами строки в программе или как записи в реестре Windows. Вам решать для получения их, если Вы используете что-то нестандартное, хотя; я не знаю ни о каких предварительно прокрученных решениях, которые не являются простым текстом.
Это известно как инициализация двойной скобки :
Первая скобка создает новую AnonymousInnerClass, второй объявляет блок инициализатора экземпляра который запускается, когда анонимный внутренний создается экземпляр класса. Этот тип блок инициализатора формально называется "инициализатор экземпляра", потому что он объявлен в области действия экземпляра класса - «статические инициализаторы» связаны с концепцией, в которой ключевое слово static помещается перед скоба, которая начинает блок, и которая выполняется на уровне класса, как только когда загрузчик классов завершает загрузку класс (указанный в http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.6 ) Блок инициализатора может использовать любой методы, поля и конечные переменные доступно в содержащей его области, но нужно опасаться того факта, что инициализаторы запускаются до конструкторы.
Это работает только для не финальных классов, потому что он создает анонимный подкласс.
Давайте немного по-другому разместим код:
MyTest tester = new MyTest() {
{
setName("John Johnson");
}
};
То, что вы видите здесь, называется инициализацией двойных скобок . У вас есть анонимный внутренний подкласс класса MyTest
вместе с блоком инициализатора, который представляет собой блок, содержащий код, который запускается при создании объекта.
Обычно вы помещаете такой код в конструктор, но поскольку анонимные внутренние классы не могут иметь конструкторов, это единственный способ гарантировать, что код запускается тогда, когда он должен.
Сказав это, это ' Это немного некрасиво. Есть способы получше. Тем не менее, я сам иногда использую его, обычно в следующей идиоме для создания неизменяемой карты:
final Map<String, Integer> textToInt = Collections.unmodifiableMap(new HashMap<String, Integer>() {{
put("one", 1);
put("two", 2);
// etc
}});
Которая создает новую карту, переопределяет ее, добавляет к ней некоторые значения в блоке инициализатора и оборачивает ее в неизменяемую карту .
MyTest tester = new MyTest() {{
setName("John Johnson");
}};
совпадает с
MyTest tester = new MyTest();
tester.setName("John Johnson");