이 글에서는 주로 Java의 클래스 자동 로딩 구현에 대한 관련 정보를 샘플 코드를 통해 자세히 소개합니다. 이 글은 Java를 필요로 하는 모든 사람이 따라할 수 있는 확실한 참고 학습 가치를 가지고 있습니다. 아래 편집자에게 오셔서 함께 배워보세요.
머리말
이 글은 Java에서 Class의 자동 로딩에 대한 관련 내용을 주로 소개합니다. 이 글을 쓰는 이유는 개발 중에 가끔 그런 상황이 발생하고, 단지 Class Basic을 얻고 싶을 때가 있기 때문입니다. 정보가 있지만 관련 정적 코드 블록을 트리거하고 싶지 않습니다. 이 방법은 이전 기사 "JAVA 스캐닝 패키지"에서 사용되었습니다. 전문적인 이름이 있으면 수정해 주세요.
일반적으로 클래스를 로드할 때 Class 객체를 반환하고 클래스에서 정적 코드 블록을 트리거하는 Class.forName(String name)
메서드를 사용합니다. Class.forName(String name)
方法,该方法会返回一个Class对象,同时会触发该类中的静态代码块,举个例子:
我们先来编写一个只包含静态代码块的Bean类。
package com.jinggujin.classloader; public class Bean { static { System.err.println("static code block."); } }
使用err流是为了让信息及时输出,使用out会有缓存,可能会导致输出信息顺序错乱
然后编写测试方法进行测试。
package test; import org.junit.Test; public class ClassLoaderTest { @Test public void test() throws Exception { Class.forName("com.jinggujin.classloader.Bean"); } }
运行观察控制台输出:
static code block.
此时控制台会输出我们在静态代码块中打印的内容,这样就证明了了在使用Class.forName(String name)
会触发静态代码块,那么,要实现静默加载,我们就不能用这种方式了,我们可以使用ClassLoader的loadClass(String name)
方法进行加载,该方法仅会加载类而不会触发静态代码块,同样的编写测试方法进行测试。
package test; import org.junit.Test; public class ClassLoaderTest { @Test public void test() throws Exception { Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass("com.jinggujin.classloader.Bean"); System.err.println(clazz.getName()); } }
运行观察控制台输出:
com.jinggujin.classloader.Bean
我们发现,在控制台中仅输出了我们打印的类名信息,而静态代码块没有执行,除此之外,其实我们还可以使用Class.forName(String name)
的重写方法forName(String name, boolean initialize, ClassLoader loader)
먼저 정적 코드 블록만 포함하는 Bean 클래스를 작성해 보겠습니다. rrreee
🎜🎜rrreee🎜실행하고 콘솔 출력을 관찰하세요: 🎜🎜🎜정적 코드 블록.🎜🎜이때, 콘솔은 우리가 정적 코드 블록에 인쇄한 내용을 출력할 것입니다. Class.forName(String name)
을 사용하면 정적 코드 블록이 트리거되고 자동 로딩을 달성하기 위해 ClassLoader의 loadClass(String name)
를 사용할 수 없습니다. > 로드할 메서드입니다. 이 메서드는 정적 코드 블록을 트리거하지 않고 클래스만 로드합니다. 테스트를 위해 동일한 테스트 메서드를 작성합니다. 🎜
🎜🎜rrreee🎜실행하고 콘솔 출력을 관찰하세요. 🎜🎜rrreee🎜우리가 인쇄한 클래스 이름 정보만 콘솔에 출력되고 정적 코드 블록은 실행되지 않았으며, 기타 그보다 사실 Class.forName(String name)
의 forName(String name, boolean 초기화, ClassLoader loader)
재작성 메소드를 사용할 수도 있습니다. 자동 로딩 효과를 얻으세요. 🎜🎜🎜🎜요약🎜🎜🎜
위 내용은 Java는 클래스 구현을 위한 샘플 코드를 자동으로 로드합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!