>  기사  >  Java  >  Java 기본 입문 에세이(8) JavaSE 버전 - 정적 정적

Java 기본 입문 에세이(8) JavaSE 버전 - 정적 정적

黄舟
黄舟원래의
2016-12-22 13:08:051304검색

객체지향(2)

이것: 객체를 나타냅니다. 그것은 어떤 물체를 나타내는가? 현재 객체.

멤버 변수와 지역 변수의 이름이 같은 경우 this 키워드를 사용하여 구분할 수 있습니다.

함수가 속한 객체에 대한 참조입니다. (간단히 말하면, 어떤 객체가 이것이 위치한 함수를 호출하는지, 이는 해당 객체를 나타냅니다.)

이것은 생성자에서 다른 생성자를 호출하는 데에도 사용할 수 있습니다. 참고: 생성자의 첫 번째 줄에서만 정의할 수 있습니다. 초기화 작업을 먼저 수행해야 하기 때문입니다.

예: person(문자열 이름){this.name = 이름;}

person(문자열 이름,int age){this(name);this.age = age;}

일반적으로 이 클래스의 객체를 사용할 때는 이렇게 사용하는 경우가 많습니다.

static:

특징: 1.static은 멤버를 수정하는 데 사용되는 수정자입니다.

2. static으로 수정된 멤버는 모든 개체에서 공유됩니다.

3. 클래스가 로드될 때 정적 멤버가 이미 존재하므로 객체보다 정적이 먼저 존재합니다.

4. static으로 수정된 멤버에는 추가 호출 방법이 있습니다. 즉, 클래스 이름.member 변수와 같이 클래스 이름으로 직접 호출할 수 있습니다.

5. 정적에 의해 수정된 데이터는 공유 데이터이고, 객체에 저장된 시간별 데이터는입니다.

참고: 멤버 변수는 인스턴스 변수라고도 하며, static으로 수정된 변수는 정적 변수 또는 클래스 변수라고 합니다.

멤버 변수와 정적 변수의 차이점:

1. 두 변수의 수명주기가 다릅니다.

멤버 변수는 객체 생성과 함께 존재하며, 객체가 재활용되면서 재활용 및 해제됩니다.

정적 변수는 클래스 로딩과 함께 존재하고, 클래스가 사라지면 사라집니다. 수업.

2. 호출 방법이 다릅니다.

멤버 변수는 객체로만 호출할 수 있습니다.

정적 변수는 객체 및 클래스 이름으로 호출할 수 있습니다(권장).

3. 별칭이 다릅니다.

멤버 변수는 인스턴스 변수라고 하며,

정적 변수는 클래스 변수라고 합니다.

4. 데이터 저장 위치가 다릅니다.

멤버 변수 데이터는 힙 메모리의 객체에 저장되므로 객체별 데이터라고도 합니다.

정적 변수 데이터는 메소드 영역(공유 데이터 영역)의 정적 영역에 저장되므로 객체의 공유 데이터라고도 합니다.

정적 사용에 대한 참고 사항:

1. 정적 메서드는 정적 멤버에만 액세스할 수 있습니다. (비정적은 정적 및 비정적 모두에 액세스할 수 있음) (참고: 동일한 클래스의 컨텍스트에서 정적 메서드는 이 클래스의 정적 멤버만 호출할 수 있습니다.)

2. 정적 메서드 this 또는 super 키워드는 에서 사용할 수 없습니다.

3. 주요 기능은 정적입니다.

정적은 언제 사용되나요?

1. 정적 변수.

분석 개체의 멤버 변수가 모두 동일할 경우 이 멤버 변수를 정적으로 수정할 수 있습니다.

객체 내 데이터가 다른 한, 이는 객체의 고유한 데이터이므로 객체에 저장되어야 하며 비정적입니다.

동일한 데이터라면 객체를 수정할 필요 없이 사용하기만 하면 됩니다. 객체에 저장할 필요도 없고 static으로 정의되어 있습니다.

2. 정적 기능.

함수가 정적으로 수정되는지 여부에 관계없이 유일한 참조 지점은 함수가 객체의 고유 데이터에 액세스할 수 있는지 여부입니다.

간단히 말하면, 함수가 비정적 멤버 변수에 액세스해야 하는지 확인하세요. 그렇지 않은 경우 함수는 정적으로 정의될 수 있습니다.

물론 이 함수도 non-static으로 정의할 수 있지만 non-static은 객체에 의해 호출되어야 하고, Unique에 접근하지 않고 비정적 메소드 호출만을 위해 객체를 생성하는 것은 의미가 없습니다. 데이터.

주요 기능의 특징:

1. 형식이 고정되어 있습니다. 2. jvm에서 인식하고 호출합니다.

공개: 권한이 가장 커야 하기 때문이죠.

정적: 객체가 필요하지 않으면 주 함수의 클래스 이름으로 직접 호출하면 됩니다.

void: 기본 함수에는 특정 반환 값이 없습니다.

main: 함수 이름, 키워드가 아니라 jvm이 인식하는 고정 이름입니다.

String[] args: 메인 함수의 매개변수 목록이며, 배열형 매개변수이며, 요소는 모두 문자열 유형입니다. (메인 함수를 호출할 때 전달될 수 있습니다. 예: java mainDemo xx yy zz는 3개의 요소가 전달된 문자열 배열입니다.)

정적 코드 블록 구성 코드 블록 로컬 코드 블록:

정적 코드 블록: 클래스가 로드될 때 실행됩니다. 그리고 한 번만 실행되었습니다. 기능: 클래스를 초기화하는 데 사용됩니다.

구성 코드 블록: 객체가 생성될 때 실행되고, 객체가 생성될 때 여러 번 호출됩니다. 기능: 모든 개체에 대해 초기화할 수 있습니다. (생성자와의 차이점: 생성자는 해당 객체의 대상 초기화를 수행합니다. 생성 코드 블록 객체 초기화는 보편적입니다.)

로컬 코드 블록의 역할: 로컬 변수의 수명주기를 제한합니다.

세 가지의 호출 순서는 다음과 같습니다.

class StaticCode
{
    static int num ;
    //静态代码块 (首先执行)
    static
    {
        num = 10;
//      num *=3;
        System.out.println("hahahah");
    }
    StaticCode(){}
 
    static void show()
    {
        System.out.println(num);
    }
}
 
class Person
{
    private String name;
     
     
 
    {//构造代码块。可以给所有对象进行初始化的。(如有调用对象,即其次调用,与局部代码块视情况而定)
 
        System.out.println("constructor code ");
//      cry();
    }
     
    static
    {
        System.out.println("static code");
    }
     
    Person()//是给对应的对象进行针对性的初始化。 
    {
        name = "baby";
//      cry();
    }
    Person(String name)
    {
        this.name  = name;
//      cry();
    }
    public void cry()
    {
        System.out.println("哇哇");
         
    }
 
    public void speak()
    {
        System.out.println("name:"+name);
    }
 
    static void show()
    {
        System.out.println("show run");
    }
}
 
 
class StaticCodeDemo 
{
    static
    {
//      System.out.println("a"); //先执行
    }
    public static void main(String[] args) 
    {
 
//      Person p = null;
//      p.speak();
 
//      Person.show();
//      Person p1 = new Person();
//      p1.speak();
//      Person p2 = new Person("旺财");
//      p2.speak();
//      new Person();
         
 
//      new StaticCode().show();
//      new StaticCode().show();
//      StaticCode.show();
//      System.out.println("b");    //后执行
    }
}

위는 Java(8) JavaSE 버전 - 정적 컨텐츠에 대한 기본 입문 에세이입니다. PHP 중국어 웹사이트(www.php.cn)에 주목하세요!


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