2015-04-29 3 views
0

При написании автономного java-приложения в статическом контексте я вижу много кода для начинающих. Я использовал эту проблему, создав экземпляр класса в основном и работая от конструктора.Лучшая практика в отношении статического контекста

Я добавил несколько примеров очень простой автономной программы и хотел бы знать, есть ли лучшие практики для «ухода» из статического контекста.

Я также хотел бы знать, есть ли какие-то автономные java-программы, которые должны выполняться в статическом контексте или, в частности, в основном методе, что это функция, помимо того, что она является точкой входа в каждую отдельную Java-программу.

Любой материал для чтения также приветствуется!

import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class ExampleStatic 
{ 
    JLabel label; 

    public static void main(String[] args) 
    { 
     //Option 1 - Work from static context: 
     JFrame frame = new JFrame(); 
     frame.setBounds(10,10,100,100); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JLabel staticlabel = new JLabel("static"); 
     frame.add(staticlabel); 

     frame.setVisible(true); 

     //Option 2 - Create instance, call initialisation function 
     ExampleStatic e = new ExampleStatic(); 
     e.initialise(); 

     //Option 3 - Create instance, handle initialisation in constructor 
     new ExampleStatic(true); 
    } 

    public ExampleStatic(){} 

    public ExampleStatic(boolean init) 
    { 
     JFrame frame = new JFrame(); 
     frame.setBounds(10,10,100,100); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     label = new JLabel("constructor"); 
     frame.add(label); 

     frame.setVisible(true); 
    } 

    public void initialise() 
    { 
     JFrame frame = new JFrame(); 
     frame.setBounds(10,10,100,100); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     label = new JLabel("init function"); 
     frame.add(label); 

     frame.setVisible(true); 
    } 
} 
+0

Вариант 2 и Вариант 3 оба в порядке. –

ответ

0

Вариант 2 и Вариант 3 оба в порядке, так как оба обеспечивают слабую связь, а если вы хотите использовать свой экземпляр где-нибудь еще в других классах, которые вы можете использовать его легко. Но если все, что вы напишете в основном методе, вы потеряете масштаб и его повторное использование.

+0

Я знаю это, но я хотел бы знать, есть ли вещи, которые вы должны делать в статическом контексте, а не в функции объекта-объекта конструктора или экземпляра. – JohannisK

0

JVM нуждается в main, чтобы быть статичным, после этого вы можете делать то, что хотите. Я бы назвал нестатический «второй основной», который обрабатывал бы инициализацию, а затем любую дальнейшую обработку в разных методах (или классах).

Я бы не стал помещать вещи в конструктор, если вы действительно не чувствуете, что это подходящее место для них.

+0

Вы имеете в виду, что статический main не имеет функции, кроме точки входа, и лучше всего оставить это как можно скорее? – JohannisK

+0

Вам не нужно оставлять его, если вы этого не хотите. Это статично из-за JVM, а не для программиста. – Kayaman

Смежные вопросы