最近我正在学习如何使用 Slf4j。我知道两个新概念:静态绑定和动态绑定。在 JCL(Jakarta Commons Logging)中,它使用动态绑定来选择实现,而 Slf4j 使用静态绑定。在这种情况下,我们知道 Slf4j 更明智。但是其他情况呢?
如果遇到一个问题,使用静态绑定和动态绑定都可以解决,那我们该如何选择呢?有什么基本规则吗?
我的英语不是很好。所以我不确定我是否说清楚了。如果您有更多问题,请发表评论。
谢谢。
最近我正在学习如何使用 Slf4j。我知道两个新概念:静态绑定和动态绑定。在 JCL(Jakarta Commons Logging)中,它使用动态绑定来选择实现,而 Slf4j 使用静态绑定。在这种情况下,我们知道 Slf4j 更明智。但是其他情况呢?
如果遇到一个问题,使用静态绑定和动态绑定都可以解决,那我们该如何选择呢?有什么基本规则吗?
我的英语不是很好。所以我不确定我是否说清楚了。如果您有更多问题,请发表评论。
谢谢。
这里:链接
静态绑定和动态绑定之间的几个重要区别
1) Java 中的静态绑定发生在编译时,而动态绑定发生在运行时。
2)私有,最终和静态方法和变量使用静态绑定并由编译器绑定,而虚拟方法在运行时基于运行时对象进行绑定。
3)静态绑定使用类型(Java中的类)信息进行绑定,而动态绑定使用对象来解析绑定。
3) 重载的方法使用静态绑定绑定,而重写的方法在运行时使用动态绑定绑定。
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;
}
}
输出:内部集合排序方法
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");
}
}
输出: Car 的内部启动方法