English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 기본 튜토리얼

Java 프로세스 제어

Java 배열

Java 오브젝트지향적(I)

Java 오브젝트지향적(II)

Java 오브젝트지향적(III)

Java 예외 처리

Java 목록(List)

Java Queue(큐)

Java Map 집합

Java Set 집합

Java 입력/출력(I/O)

Java Reader/Writer

Java 다른 주제

Java 프로그램이 클래스의 비공개 멤버에 접근

Java 예제 모든 것

이 예제에서는 Java의 클래스의 비공개 메서드와 속성에 대해 배우겠습니다.

이 예제를 이해하기 위해 다음을 이해해야 합니다Java 프로그래밍주제:

예제1getter와 setter 메서드를 사용하여 비공개 속성에 접근

class Test {
  //private 변수
  private int age;
  private String name;
  // 초기화 age
  public void setAge(int age) {
    this.age = age;
  }
  // 초기화 name
  public void setName(String name) {}}
    this.name = name;
  }
  // age에 접근합니다
  public int getAge() {
    return this.age;
  }
  // name에 접근합니다
  public String getName() {
    return this.name;
  }
}
class Main {
  public static void main(String[] args) {
    //Test 객체를 생성합니다
    Test test = new Test();
    // private 변수의 값을 설정합니다
    test.setAge(24);
    test.setName("w3codebox");
    //private 변수의 값을 가져옵니다
    System.out.println("Age: " + test.getAge());
    System.out.println("Name: " + test.getName());
  }
}

출력 결과

Age: 24
이름: w3codebox

위 예제에서 age와 name라는 private 변수가 있습니다. 여기서는 다른 Main이라는 클래스에서 private 변수에 접근하려고 시도합니다.

이미 getter와 setter 메서드를 사용하여 private 변수에 접근했습니다. 여기서,

  • setter 메서드 - setAge()과 setName()은 private 변수를 초기화합니다

  • getter 메서드 - getAge()과 getName()은 private 변수의 값을 반환합니다

예제2:뷰어를 사용하여 private 필드와 메서드 접근

import java.lang.reflect.*;
class Test {
  //private 변수
  private String name;
  //private 메서드
  private void display() {
    System.out.println("The name is " + name);
  }
}
class Main {
  public static void main(String[] args) {
    try {
      //Test 객체를 생성합니다
      Test test = new Test();
      //obj이라는 이름의 객체를 생성합니다
      Class obj = test.getClass();
      //private 변수에 접근합니다
      Field field = obj.getDeclaredField("name");
      // private 필드에 접근할 수 있게 합니다
      field.setAccessible(true);
      //필드 값을 설정합니다
      field.set(test, "w3codebox");
      //필드 값을 가져옵니다
      //그리고 문자열로 변환합니다
      String value = (String)field.get(test);
      System.out.println("Name: " + value);
      //private 메서드 방문
      Method[] methods = obj.getDeclaredMethods();
      System.out.println("메서드 이름: " + methods[0].getName());
      int modifier = methods[0].getModifiers();
      System.out.println("접근자: " + Modifier.toString(modifier));
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
}

출력 결과

이름: w3codebox
메서드 이름: display    
접근자: private

이 예제에서는 이름이 name인 비공개 필드와 이름이 display()인 비공개 메서드를 가진 Test 클래스가 있습니다. 여기서는 반영을 사용하여 Test 클래스의 비공개 필드와 메서드에 접근합니다.

반영을 이해하려면 방문하세요Java Reflection(반영)

Java 예제 모든 것