About"static"

5506 단어 static
static 정적 수식자, 프로그램에서 모든 변수나 코드는 컴파일할 때 시스템에서 자동으로 메모리를 분배하여 저장된다. 이른바 정태란 컴파일한 후에 분배된 메모리가 계속 존재하고 프로그램이 메모리를 종료할 때까지 이 공간을 방출하는 것을 말한다. 즉, 프로그램이 실행되기만 하면 이 메모리가 계속 존재한다는 것이다.
 
자바 프로그램에서 모든 것은 대상이고 대상의 추상은 클래스이다. 하나의 클래스에 대해 말하자면 그의 구성원을 사용하려면 일반적인 상황에서 대상을 실례화한 후에 대상의 인용을 통해 이 구성원들을 방문할 수 있지만 예외적인 경우는 이 구성원이static로 성명한 것이다.
 
자바 라이브러리에서 많은 클래스 구성원들이 static라고 성명하여 사용자가 실례화된 대상을 필요로 하지 않고 구성원을 인용할 수 있도록 할 수 있다. 가장 기본적인 것은 Integer이다.parseInt(),Float.parseFloat () 등은 대상을 필요한 기본 데이터 형식으로 변환하는 데 사용됩니다.이런 변수와 방법을 우리는 클래스 변수와 클래스 방법이라고도 부른다.
 
다음은 개인적으로 비교적 전형적인 소개류 구성원의 예이다.
 
public class StaticTest 
{ 
    int x=1; //     
    static int y=1; //    
    
    public StaticTest() 
    { 
        x++;
        y++; 
    } 
    
    public void nonStaticMethod() 
    { 
        System.out.println("run a non_static method."); 
    } 
    
    public static void staticMethod() 
    {
        System.out.println("run a static method."); 
    } 
    
    public static void main(String args[]) 
    { 
        //    t1
        StaticTest t1=new StaticTest();
        
        //    t2 
        StaticTest t2=new StaticTest(); 
        
        //    t1    x 
        System.out.println("t1.x="+t1.x); 
        //    t2    x 
        System.out.println("t2.x="+t2.x); 
        
        //System.out.println("StaticTest.x="+StaticTest.x);          ,    :
        //                x  
        
        //nonStaticMethod();          ,    :
        //                 nonStaticMethod(); 
        
        //             :
        //          ,         ,                ,
        //        ,       static   。         :
        t1.nonStaticMethod(); 
        
        //           ,         :
        staticMethod(); 
        //  ,                ,              ,    :
        t1.staticMethod();
        
        //   StaticTest     y(    y) 
        System.out.println("StaticTest.y="+StaticTest.y); 
        //  ,                ,              ,    :
        System.out.println("t1.y="+t1.y); 
    } 
} 


 
 
전례 중 t1.y와 t2.y는 같은 저장 공간을 가리킨다.실행 후 출력 결과는 다음과 같습니다: t1.x=2t2.x=2run a non_static method.run a static method.run a static method.StaticTest.y=3t1.y=3 이상의 결과에 대한 설명:
4
  • StaticTest 클래스의 실례 t1을 생성할 때 시스템은 실례 변수 x에 분배 공간을 초기화하고 x++를 실행하기 때문에 t1의 x는 2이고 y++는 y도 2이다.두 번째 실례 t2를 생성할 때 x를 1로 초기화하고, 클래스 변수 y는 t1을 만들 때++가 2로 바뀌기 때문에 y는 다시++가 3으로 바뀐다

  • 4
  • 실례 변수는 클래스에서 직접 인용할 수 없으며 반드시 실례를 생성한 후에 실례에서 인용해야 한다

  • 또 다른 예는 위의 StaticTest 클래스를 기준으로 합니다.
    public class UsingStatic
    {
        StaticTest t1;
        StaticTest t2;
        
        public UsingStatic()
        {
            t1 = new StaticTest();
            t2 = new StaticTest();
        }
        
        public void usingNonStaticMember()
        {
            //successful scenario:
            System.out.println("t1.x="+t1.x);  
            System.out.println("t2.x="+t2.x);
            t1.nonStaticMethod();
            t2.nonStaticMethod();
            
            //failure scenario:
            //System.out.println("t1.x="+StaticTest.x);//                x
            //StaticTest.nonStaticMethod();//                 nonStaticMethod(); 
        }
        
        public void usingStaticMember()
        {
            //successful scenario:
            System.out.println("StaticTest.y="+StaticTest.y);
            StaticTest.staticMethod();
            
            //not suggested,no point to using a object to invoke the static attributes.
            //the suggested approach see the successful scenario, use the class to invoke the static attributes.
            System.out.println("t1.y="+t1.y);
            System.out.println("t2.y="+t2.y);//not suggested
            
            //not suggested,no point to using a object to invoke the static methods.
            //the suggested approach see the successful scenario, use the class to invoke the static methods.
            t1.staticMethod();
            t2.staticMethod();//not suggested
        }
    }
    
     
     
     
    usingNonStaticMember()를 실행한 결과:
    t1.x=2t2.x=2run a non_static method.run a non_static method.
    usingStaticMember()를 실행한 결과:
    StaticTest.y=3run a static method.t1.y=3t2.y=3run a static method.run a static method.
    클래스 메서드(예: Integer.객체를 작성하지 않고 사용할 수 있는 parseInt()아직까지 어려운 점을 발견하지 못했다.     
     
     
     
     
    다음은main 함수의 쓰기 방법이 고정된 이유를 설명한다.
     
    JVM 실행과 관련하여 왜 그렇게 쓰는지 설명합니다.하나의 클래스에main () 방법이 있으면 명령 '자바 클래스 이름' 을 실행하면 가상 머신이 이 클래스에main 방법을 실행합니다.JVM은 이 자바 프로그램을 실행할 때 우선main 방법을 호출합니다. 호출할 때 이 클래스의 대상을 실례화하지 않고 클래스 이름을 통해 직접 호출하기 때문에public static로 제한해야 합니다.자바의main 방법에 대해 jvm는 제한이 있고 반환 값이 있을 수 없기 때문에 반환 값 유형은void입니다.main 방법에는 입력 매개 변수가 하나 더 있는데 유형은string[]이다. 이것도 자바의 규범이다. main() 방법에는 반드시 하나의 인삼이 있어야 하고 클래스는string[]이어야 한다. 문자열 그룹의 이름은 스스로 설정할 수 있다. 습관에 따라 이 문자열 그룹의 이름은 보통sunjava규범 범례에서mian 매개 변수의 이름과 일치하고 이름은args라고 한다.따라서main () 방법의 정의는 "public static void main (String 문자열 배열 매개 변수 이름 []"이어야 합니다.

    좋은 웹페이지 즐겨찾기