>Java >java지도 시간 >Java의 정적 정적 코드 블록 사용에 대한 자세한 설명

Java의 정적 정적 코드 블록 사용에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-01-18 15:10:031345검색

1. 정적 메소드와의 비교

일반적으로 프로젝트 시작 시 일부 코드를 실행해야 하는 경우 이러한 종류의 코드는 적극적으로 실행되어야 합니다. 프로젝트가 시작되면 자동으로 실행됩니다. 객체를 생성하지 않고 다른 프로그램에서 호출하는 경우 정적 메서드를 사용해야 합니다. 클래스가 로드될 때 직접 호출할 수 있습니다. 예를 들어, 기본 메소드는 정적이어야 합니다. 둘 사이의 차이점은 정적 코드 블록이 호출될 때 자동으로 실행된다는 것입니다.


2. 정적 메소드 주의사항

클래스의 정적 메소드 사용 시 주의사항:

a. 정적 메소드에서는 직접 호출만 가능합니다. 동일한 클래스의 다른 멤버 정적 멤버(변수 및 메서드 포함), 클래스의 비정적 멤버에는 직접 액세스할 수 없습니다. 비정적 메서드와 변수는 사용하기 전에 클래스의 인스턴스 개체를 만들어야 하는 반면, 정적 메서드

는 사용하기 전에 개체를 만들 필요가 없기 때문입니다.

b. 정적 메서드는 사용하기 전에 인스턴스 객체를 생성할 필요가 없기 때문에 this 및 super 키워드를 어떤 방식으로도 참조할 수 없습니다. all(이 키 단어는 메서드 내에서만 사용할 수 있으며 "메서드를 호출한

개체"에 대한 참조를 나타냅니다.)

정적 변수는 객체가 아닌 전체 클래스에 속하는 변수입니다. 메소드 본문 내의 변수는 정적으로 선언할 수 없습니다. 예: fun() { static int i=0;//Illegal. }

3. 프로그램 예제

public class TestStaticCon {
     public static int a = 0;

     static {
         a = 10;
         System.out.println("父类的静态代码块在执行a=" + a);
     }

     {
         a = 8;
         System.out.println("父类的非静态代码块在执行a=" + a);
     }

     public TestStaticCon() {
         this("a在父类带参构造方法中的值:" + TestStaticCon.a); // 调用另外一个构造方法
         System.out.println(a);
         System.out.println("父类无参构造方法在执行a=" + a);
     }

     public TestStaticCon(String n) {
         System.out.println(n);
         System.out.println(a);

     }

     public static void main(String[] args) {
         TestStaticCon tsc = null;
         System.out.println("!!!!!!!!!!!!!!!!!!!!!");
         tsc = new TestStaticCon();
     }
 }
运行结果: 
父类的静态代码块在执行a=10 
!!!!!!!!!!!!!!!!!!!!! 
父类的非静态代码块在执行a=8 
a在父类带参构造方法中的值:10 
8 
8 
父类无参构造方法在执行a=8

4. 네티즌 제공

public class StaticBlock {

     static {
         System.out.println("静态块");
     }
     {
         System.out.println("构造块,在类中定义");
     }

     public StaticBlock() {
         System.out.println("构造方法执行");
     }

     public static void main(String[] args) {
         new StaticBlock();
         new StaticBlock();
     }

 }
静态块 
构造块,在类中定义 
构造方法执行 
构造块,在类中定义 
构造方法执行

결론: 정적 코드 블록은 클래스가 로드될 때 자동으로 실행됩니다. 코드 블록 객체가 생성될 때 자동으로 실행되는 코드입니다. 객체가 생성되지 않으면 이 클래스의 비정적 코드 블록은 실행되지 않습니다. 그리고 실행 순서는 정적 코드 블록------비정적 코드 블록-생성자입니다.

저를 당황하게 하는 것은 "매개변수가 있는 상위 클래스의 생성자 메소드에 있는 a의 값: 10"입니다. 그때 왜 그 값이 8이 아닌지 생각해 보았습니다. 디버그(F11, 중단점을 직접 설정할 수 없습니다. 그런 다음 직접 실행하는 것과 다르지 않습니다) 매개 변수가 없는 생성자를 먼저 입력하고 첫 번째 문을 실행한 후 다른 생성자로 전환한 것을 확인했습니다(첫 번째 문장은 실행 여부에 관계없이 실행되어야 합니다. 그렇지 않으면 정적 코드 블록이 아직 실행되지 않았습니다), 이 명령문이 이 경고를 표시하는지 여부에 관계없이 소스를 찾을 수 없다는 메시지를 표시한 다음(프로그램이 계속 정상적으로 실행되므로 오류가 아님) 다음을 실행합니다. 비정적 코드 블록, 그리고 매개변수에서 실행은 생성자 메서드에서 계속됩니다...

Java에서 정적 정적 코드 블록 사용에 대한 자세한 설명은 PHP 중국어 웹사이트에 주목하세요. 관련 기사!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.