2016-10-11 2 views
0

최근 Slf4j 사용법을 배우고 있습니다. JCL (Jakarta Commons Logging)에서는 동적 바인딩을 사용하여 Slf4j가 정적 바인딩을 사용하는 동안 구현을 선택합니다. 이 경우 우리는 Slf4j가 더 현명하다는 것을 알고 있습니다. 그러나 다른 경우는 어떨까요?정적 바인딩을 사용하는시기와 Java에서 동적 바인딩을 사용하는시기는 언제입니까?

우리가 정적 bingding과 동적 바인딩을 사용할 때 해결할 수있는 문제를 만난다면 우리는 어떻게 선택합니까? 기본 규칙이 있습니까?

내 영어가 그다지 좋지 않습니다. 그래서 내가 명확하게했는지 확신 할 수 없습니다. 질문이 있으시면 의견을 말하십시오.

THX. 여기

+0

당신은'instanceof'를 사용하여 다형성 문장에 대해 알고 싶을 것입니다. –

답변

0

: 동적 바인딩 동안 정적 및 동적

1

결합 사이 Link

몇 가지 중요한 차이점) 정적 자바 바인딩이 런타임시 발생 컴파일 시간 동안 일어난다.

2) 비공개, 최종 및 정적 메소드 및 변수는 정적 바인딩을 사용하고 컴파일러가 본딩하는 반면 가상 메소드는 런타임 객체를 기반으로 런타임 중에 결합됩니다.

3) 정적 바인딩은 Type (Java의 Class) 정보를 사용하여 바인딩을 동적 바인딩은 Object를 사용하여 바인딩을 해결합니다.

3) 오버로드 된 메서드는 정적 바인딩을 사용하여 결합되지만 재정의 된 메서드는 런타임에 동적 바인딩을 사용하여 본딩됩니다. 자바

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; 
} 
} 

출력에

정적 바인딩 예 : 동적의 내부 컬렉션 정렬 방법

예 출력 자바

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"); 
    } 
} 

바인딩 : 내부는 자동차의 방법을 시작

+0

Thx 당신의 대답을.하지만 나는 그 차이를 안다고 말하고 싶습니다. Slf4j가 구현을 바인드하는 데 어느 것을 사용할지 결정할 때 Slf4j를 선택하는 방법을 알고 싶습니다. JCL은 동적을 사용하지만 Slf4j는 정적을 사용합니다. –

+0

컴파일 타임 오류는 항상 런타임 오류보다 낫습니다. 컴파일시에 겪게되는 문제점에 대해 알기 위해 후기 바인딩보다 초기 바인딩을하는 것이 좋습니다. – Wearybands

관련 문제