> Java > Java베이스 > 자바 정적이란 무엇입니까?

자바 정적이란 무엇입니까?

angryTom
풀어 주다: 2019-11-13 13:39:14
원래의
3307명이 탐색했습니다.

자바 정적이란 무엇입니까?

자바 정적이란 무엇입니까 정적 변수, 정적 메소드, 정적 초기화 블록을 포함하여, 다음은 static에 대한 자세한 설명입니다. (추천 튜토리얼:

java tutorial

) 1. 정적 변수가 무엇인지

모두가 알고 있습니다. 클래스를 기반으로 해당 클래스의 여러 개체를 만들 수 있습니다. 각 개체에는 고유한 멤버가 있으며 서로 독립적입니다. 그러나 때로는 이 클래스의 모든 객체가 동일한 멤버를 공유하는 것을 선호할 때도 있습니다. 이것은 정적이 작용하는 때입니다!

Java에서 static으로 수정되는 멤버를 정적 멤버 또는 클래스 멤버라고 합니다. 이는 객체가 아닌 전체 클래스에 속합니다. 즉, 클래스의 모든 객체가 공유합니다.

정적 멤버는 클래스 이름을 사용하여 직접 액세스할 수도 있고, 개체 이름을 사용하여 액세스할 수도 있습니다. 물론 역할의 특수성을 고려하여

정적을 사용하여 변수, 메소드 및 코드 블록에 액세스하려면 클래스 이름을 사용하는 것이 좋습니다.

public class Test1 {
    // static修饰的变量为静态变量,所有类的对象共享hobby
    static String hobby = "Tedu";
    
    public static void main(String[] args) {
        // 静态变量可以直接使用类名来访问,无需创建对象
        System.out.println("通过类名访问hobby:" + Test1.hobby);
        // 创建类的对象
        Test1 t1 = new Test1();
        // 使用对象名访问静态变量
        System.out.println("使用对象名访hobby:" + t1.hobby);
        // 使用对象名的形式修改静态变量的值
        t1.hobby = "cjj";
        // 再次使用类名访问静态白变量,值已经被修改
        System.out.println("通过类名访问hobby:" + Test1.hobby);
    }
}
로그인 후 복사

실행 결과:

通过类名访问hobby:Tedu
使用对象名访hobby:Tedu
通过类名访问hobby:cjj
로그인 후 복사

참고:

Static 멤버는 시스템이 처음으로 이 클래스를 사용할 때, 할당된 메모리 공간은 클래스가 언로드될 때까지 재활용되지 않습니다!

2. 정적 변수가 사용하는 정적 메서드

정적 변수와 마찬가지로 정적 메서드 또는 클래스 메서드라는 수정된 정적 메서드를 사용할 수도 있습니다. 사실 우리가 이전에 작성한 주요 메소드는 정적 메소드입니다

public class Test01 {
    //使用static关键字声明静态方法
    public static void print() {
        System.out.println("欢迎你:Cjj!");
    }
    
    public static void main(String[] args) {
        //直接使用类名调用静态方法
        Test01.print();
        //也可以通过对象名调用,当然更推荐使用类名调用
        Test01 t1 = new Test01();
        t1.print();
    }
}
로그인 후 복사

코드 복사

欢迎你:Cjj!
欢迎你:Cjj!
로그인 후 복사

참고:

# 🎜🎜#1 정적 메서드는 동일한 클래스의 정적 멤버를 직접 호출할 수 있지만 비정적 멤버는 직접 호출할 수 없습니다. 예:

정적 메서드에서 비정적 변수를 호출하려는 경우 클래스의 개체를 만든 다음 개체를 통해 비정적 변수에 액세스할 수 있습니다. 예:

2. 일반 멤버 메서드에서는 비정적 변수와 동일한 유형의 정적 변수에 직접 액세스할 수 있습니다(예:

3). 정적 메서드에서는 변수를 직접 호출할 수 없습니다. 정적 메서드에서는 개체가 비정적 메서드에 액세스해야 합니다. 예:

public class Test01 {
    String name = "Cjj"; //静态成员变量
    static String hobby = "study"; //非静态成员变量
    
    //普通成员方法
    public void print1() {
        System.out.println("普通成员方法~~~"); 
    }
    
    //静态成员方法
    public static void print2() {
        System.out.println("静态成员方法~~~");
    }
    
    public static void main(String[] args) {
        //普通成员方法必须通过对象来调用
        Test01 t1 = new Test01();
        t1.print1();
        //可以直接调用静态方法
        print2();
    }
}
로그인 후 복사

3. static 정적 초기화 블록 사용

Java에서는 초기화 블록을 통해 데이터를 할당할 수 있습니다. 예:

public class Test02 {
    String name; // 定义一个成员变量
    //通过初始化块为成员变量赋值
    {
        name = "cjj";
    }
}
로그인 후 복사
이 코드 블록을 순서대로 실행합니다. 초기화 블록이 static으로 수정되면 이를 정적 초기화 블록이라고 합니다.

참고:

정적 초기화 블록은 클래스가 로드될 때만 실행되며, 동시에 정적 초기화 블록은 할당만 가능합니다. 값을 정적 변수에 저장하고 일반 멤버를 초기화할 수 없습니다.

코드를 살펴보겠습니다:

public class Test02 {
    int num1;
    int num2;
    static int num3;
    public Test02() {// 构造方法
        num1 = 11;
        System.out.println("通过构造方法为变量num1赋值");
    }
    { // 初始化块
        num2 = 22;
        System.out.println("通过初始化块为变量num2赋值");
    }
    static {// 静态初始化块
        num3 = 33;
        System.out.println("通过静态初始化块为静态变量num3赋值");
    }
    
    public static void main(String[] args) {
        Test02 t1 = new Test02(); //创建对象
        System.out.println("num1:" + t1.num1);
        System.out.println("num2:" + t1.num2);
        System.out.println("num3:" + num3);
        
    }
}
로그인 후 복사

실행 결과:

通过静态初始化块为静态变量num3赋值
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
num1:11
num2:22
num3:33
로그인 후 복사
결과를 출력하면 정적임을 알 수 있습니다. 초기화 블록은 프로그램이 실행될 때 사용됩니다. 먼저 실행된 다음 일반 초기화 블록이 실행되고 마지막으로 생성자 메서드가 실행됩니다. 정적 초기화 블록은 클래스가 로드될 때 한 번만 실행되므로 hello2 객체가 다시 생성될 때 정적 초기화 블록은 실행되지 않습니다.

클래스는 처음 사용할 때 로드되며 로드 후에는 제거되지 않습니다.

위 내용은 자바 정적이란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿