키워드 사용 측면에서 우리는 이미 정적 메소드에 대해 알고 있습니다. 이를 사용할 때 불필요한 오류를 방지하려면 모든 사람이 사용 범위를 이해해야 합니다. 이 글에서는 static을 사용할 때 주의할 점을 두 가지 측면으로 나누어 하나는 접근 범위, 다른 하나는 메소드 호출에 대한 주의점을 살펴보겠습니다.
1. 정적 메서드를 사용하는 경우 정적으로 선언된 속성 및 메서드에만 액세스할 수 있으며, 비정적으로 선언된 속성 및 메서드에는 액세스할 수 없습니다.
패키지 com.jk.ref; 클래스 사람들{ 문자열 이름. 개인 정적 문자열 국가="중국"; public People(문자열 이름){ this.name=이름; } 공개 무효 Tell(){ System.out.println("이름:"+name+" "+"국가:"+국가); } /** * @귀국 */ 공개 정적 문자열 getCountry() { 귀국 국가; } /** * @param country 설정할 국가 */ 공개 정적 무효 setCountry(문자열 국가) { People.country = 국가; } } 공개 클래스 StaticDemo01 { 공개 정적 무효 메인(String[] args) { // TODO 자동 생성된 메서드 스텁 People.setCountry("상하이"); People ps1=new People("장산"); //People.country="상하이"; ps1.tell(); 사람들 ps2=new People("lisi"); // ps2.country="상하이"; ps2.tell(); People ps3=new People("왕우"); // ps3.country="상하이"; ps3.tell(); } }
2. 부모 클래스 참조는 부모 클래스와 자식 클래스의 재정의된 메서드만 조정할 수 있습니다. 부모와 자식의 이름이 같은 메서드는 덮어쓰지 않고 가려집니다.
공개 클래스 TestMain { 공개 정적 무효 메인(String[] args) { Super sup = new Sub(); //캡슐화(상향형 형성) sup.m1(); //부모 클래스 참조는 하위 클래스의 재정의되지 않은 메서드를 조정할 수 없으며 Super에서 mi를 출력합니다. sup.m2();//하위 클래스 메서드 m2를 호출하고 상위 클래스 메서드를 먼저 상속 및 빌드한 다음 동일한 메서드 이름으로 메서드를 덮어쓰고(다시 작성) Sub에 m2를 출력합니다. Sub sub = (Sub)sup; //Unboxing(아래쪽 모양) sub.m1(); //하위 클래스 정적 메소드 m1을 호출하고, 먼저 상위 클래스 메소드를 빌드합니다. 메소드 이름은 동일하고, 메소드 이름은 마스킹 메소드와 동일하며, Sub에 m2가 출력됩니다. sub.m2();//하위 클래스 메서드 m2를 호출하고 상위 클래스 메서드를 먼저 상속 및 빌드한 다음 동일한 메서드 이름으로 메서드를 덮어쓰고(다시 작성) Sub에 m2를 출력합니다. } } class Super{ //부모 클래스 public static void m1() { //부모 클래스 static method System.out.println(“m1 in Super”); } public void m2() { //부모 클래스 메서드 System.out.println(“m2 in Super”); } } class Sub extends Super{ //하위 클래스 public static void m1() { //하위 클래스 정적 메서드 System.out.println(“m1 in Sub”); } public void m2() { //하위 클래스 메서드 System.out.println(“m2 in Sub”); } }
위 내용은 Java에서 static을 사용할 때 주의할 점입니다. 이 두 가지 사용법 항목은 초보자가 연습할 때 자주 접하는 오류이기도 합니다.