English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
이 예제에서는 Java의 클래스의 비공개 메서드와 속성에 대해 배우겠습니다.
이 예제를 이해하기 위해 다음을 이해해야 합니다Java 프로그래밍주제:
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 변수의 값을 반환합니다
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(반영)。