2016-10-11 3 views
0

Kürzlich lerne ich, wie man Slf4j benutzt. Und ich kenne zwei neue Konzepte: statische Bindung und dynamische Bindung. In JCL (Jakarta Commons Logging) wird die Implementierung durch dynamische Bindung ausgewählt, während Slf4j statische Bindung verwendet. In diesem Fall wissen wir, Slf4j ist klüger. Aber wie wäre es mit anderen Fällen?Wann die statische Bindung und wann die dynamische Bindung in Java verwendet werden soll?

Wenn wir ein Problem lösen, das wir sowohl mit statischem Bingding als auch mit dynamischer Bindung lösen können, wie wählen wir dann? Gibt es Grundregeln?

Mein Englisch ist nicht sehr gut.So bin ich nicht sicher, ob ich es klar gemacht habe.Wenn Sie mehr Frage haben, kommentieren Sie bitte.

THX.

+0

Sie können 'instanceof' verwenden, in der Hoffnung, dass Sie über polymorphe Aussagen wissen –

Antwort

0

hier: Link

paar wichtige Unterschied zwischen statischen und dynamischen Bindung

1) Statische in Java Bindung erfolgt während Compile Zeit während Dynamische tritt während Runtime verbindlich.

2) private, finale und statische Methoden und Variablen verwendet statische Bindung und gebunden durch Compiler, während virtuelle Methoden zur Laufzeit auf Laufzeitobjekt gebunden sind.

3) Die statische Bindung verwendet Informationen vom Typ (Klasse in Java) zum Binden, während das dynamische Binden Objekt zum Auflösen der Bindung verwendet.

3) Überladene Methoden werden mit statischer Bindung verbunden, während überschriebene Methoden zur Laufzeit mit dynamischer Bindung verbunden werden.

Static Binding Beispiel in Java

public class StaticBindingTest 
{ 
    public static void main(String args[]) 
    { 
    Collection c = new HashSet(); 
    StaticBindingTest et = new StaticBindingTest(); 
    et.sort(c); 
    } 
    //overloaded method takes Collection argument 
    public Collection sort(Collection c) 
    { 
    System.out.println("Inside Collection sort method"); 
    return c; 
    } 
    //another overloaded method which takes HashSet argument which is sub class 
public Collection sort(HashSet hs) 
{ 
    System.out.println("Inside HashSet sort method"); 
    return hs; 
} 
} 

Ausgabe: Inside Sammlung Sortiermethode

Beispiel für die dynamische Bindung in Java

public class DynamicBindingTest 
{ 
    public static void main(String args[]) 
    { 
     Vehicle vehicle = new Car(); //here Type is vehicle but object will be Car 
     vehicle.start();  //Car's start called because start() is overridden method 
    } 
} 

class Vehicle 
{ 
    public void start() 
    { 
     System.out.println("Inside start method of Vehicle"); 
    } 
} 
class Car extends Vehicle 
{ 
    @Override 
    public void start() 
    { 
     System.out.println("Inside start method of Car"); 
    } 
} 

Ausgang: Innerhalb Methode des Car starten

+0

Thx für Ihre Antwort. Aber ich möchte sagen, dass ich den Unterschied kenne. Ich möchte wissen, wie ich Slf4j wählen kann, wenn es sich entscheidet, welche Version verwendet werden soll, um die Implementierung zu binden. JCL verwenden dynamische, aber Slf4j verwenden statische. Sie bekommen es? –

+0

Kompilierzeit Fehler sind immer besser als Laufzeitfehler. Es ist besser, eine frühe Bindung als eine späte Bindung durchzuführen, um die Probleme kennenzulernen, die Sie während der Kompilierung feststellen – Wearybands

Verwandte Themen