Запустите Xampp (apache) в качестве администратора. В google chrome type:
localhost/<insert folder name here>/<insert file name>
i.e. если созданная папка «LearnPhp», файл «chapter1.php», тогда введите
localhost/LearnPhp/chapter1.php
Я создал эту папку в папке xampp в папке htdocs, которая создается когда вы загружаете xampp.
Нет, это не так. Вы не объявили myClass
private static final
, ни getInstance()
не является static
. Код также не компилируется.
Вот идиома Singleton:
public class MyClass {
private static final MyClass myClass = new MyClass();
private MyClass() {}
public static MyClass getInstance() {
return myClass;
}
}
Он должен быть private
, чтобы никто другой не мог получить прямой доступ к нему. Она должна быть статической
, так чтобы была только одна из них. Он должен быть окончательным
, чтобы его нельзя было переименовать. Вы также должны инстанцировать его напрямую во время объявления, чтобы вам не нужно было беспокоиться (так много) о резьбе.
Если загрузка дорогостоящая и вы, таким образом, предпочитаете ленивую загрузку одиночки, то рассмотрим идиому владельца одиночки , который делает инициализацию по требованию, а не во время загрузки класса:
public class MyClass {
private MyClass() {}
private static class LazyHolder {
private static final MyClass myClass = new MyClass();
}
public static MyClass getInstance() {
return LazyHolder.myClass;
}
}
Однако следует поставить большой знак вопроса о том, нужна ли вам одиночка или нет. Часто она не нужна. Просто статическая переменная, перечисление, заводской класс и/или ввод зависимости часто являются лучшим выбором.
Вот еще один способ сделать это:
public enum Singleton{
INSTANCE("xyz", 123);
// Attributes
private String str;
private int i;
// Constructor
Singleton(String str, int i){
this.str = str;
this.i = i;
}
}
Согласно эффективной Java Джош Блоха, это лучший способ реализации Singleton в Java. В отличие от реализаций, которые включают в себя частное статическое поле экземпляра, которое можно умножить создать при злоупотреблении отражения и / или сериализации, Enum гарантированно будет синглетом.
Основное ограничение с Enum Singletons заключается в том, что они всегда создаются в классе времени загрузки и не могут быть ленивлены созданными. Итак, если, например, вы хотите создать индивидуальность Singleton с помощью аргументов времени выполнения, вам придется использовать другую реализацию (предпочтительно, используя двойную проверку блокировки).
Вот как я это делаю. Это быстрее, поскольку он требует только синхронизированного блока
, когда экземпляр создан.
public class MyClass
{
private static MyClass INSTANCE=null;
private MyClass()
{
}
public static MyClass getInstance()
{
if(INSTANCE==null)
{
synchronized(MyClass.class)
{
if(INSATCNE==null) INSTANCE=new MyClass();
}
}
return INSTANCE;
}
}
Используя свой пример и используя способ реализации IT:
public class MyClass{
private static Myclass instance;
private MyClass(){
//Private instantiation
}
public static synchronized MyClass getInstance() //If you want your method thread safe...
{
if (instance == null) {
instance = new MyClass();
}
return instance;
}
}
Надеюсь, это поможет:
Ваш класс (оригинальный код перед редактированием):
public class MyClass {
Myclass myclass;
static { myclass = new MyClass();}
private MyClass(){}
public MyClass getInstance()
{
return myclass;
}
}
не настоящий синглтон:
MyClass
не является частным, можно прочитать и изменено снаружи (при условии, что вы получили Мгновенное мнение для этого на MyClass
не является статическим, не может быть доступен в статическом конструкторе (ошибка компиляции) метод getInstance ()
не является статическим Таким образом, вам нужен экземпляр, который нужно его назвать
фактическим кодом:
public class MyClass {
static Myclass myclass;
static { myclass = new MyClass();}
private MyClass(){}
public static MyClass getInstance()
{
return myclass;
}
}
все еще имеет MyClass
, не являющийся частным (ни окончательным) ... Объявление Их итогов поможет предотвратить его быть непреднамеренно изменилось изнутри класса.
private static final Myclass myclass;