java
Java Reflection은 런타임에 클래스의 모든 기능을 분석하고 수정하는 프로세스입니다. Java의 Reflection API는 런타임에 필드, 메소드, 생성자 등을 포함하는 클래스 및 해당 멤버를 조작하는 데 사용됩니다.
Java에서 리플렉션 API의 한 가지 장점은 클래스의 private 멤버도 조작할 수 있다는 것입니다.
java.lang.reflect 패키지는 리플렉션을 구현하는 많은 클래스를 제공합니다. java.lang.Class 클래스의 java.Methods는 특정 클래스의 완전한 메타데이터를 수집하는 데 사용됩니다.
이 튜토리얼에서 배우게 될 내용-
다음은 리플렉션을 구현하기 위한 java.lang.package의 다양한 Java 클래스 목록입니다.
public class Guru99ClassObjectCreation { public static void main (String[] args) throws ClassNotFoundException { //1 - By using Class.forname() method Class c1 = Class.forName("Guru99ClassObjectCreation"); //2- By using getClass() method Guru99ClassObjectCreation guru99Obj = new Guru99ClassObjectCreation(); Class c2 = guru99Obj.getClass(); //3- By using .class Class c3= Guru99ClassObjectCreation.class; } }
다음 예제는 클래스 이름, 수퍼 클래스 이름, 구현된 인터페이스 및 클래스의 액세스 수정자와 같은 메타데이터를 가져오는 방법을 보여줍니다.
Guru99Base.class라는 이름의 아래 클래스의 메타데이터를 가져옵니다.
import java.io.Serializable; public abstract class Guru99Base implements Serializable,Cloneable { }
아래 클래스는 Guru99Base.class의 메타 데이터를 가져와서 인쇄합니다.
import java.lang.reflect.Modifier; public class Guru99GetclassMetaData { public static void main (String [] args) throws ClassNotFoundException { // Create Class object for Guru99Base.class Classguru99ClassObj = Guru99Base.class; // Print name of the class system.out.println("Name of the class is : " +guru99ClassObj.getName()); // Print Super class name system.out.println("Name of the super class is : " +guru99ClassObj.getSuperclass().getName()); // Get the list of implemented interfaces in the form of Class array using getInterface() method class[] guru99InterfaceList = guru99classObj.getInterfaces(); // Print the implemented interfaces using foreach loop system.out.print("Implemented interfaces are : "); for (Class guru99class1 : quru99 InterfaceList) { system.out.print guru99class1.getName() + " "); } system.out.println(); //Get access modifiers using get Modifiers() method and toString() method of java.lang.reflect.Modifier class int guru99AccessModifier= guru99classObj.getModifiers(); // Print the access modifiers System.Out.println("Access modifiers of the class are : " +Modifier.tostring(guru99AccessModifier)); } }
다음 예는 변수의 메타데이터를 가져오는 방법을 보여줍니다.
여기에서 몇 가지 변수가 있는 Guru99VariableMetaData .class라는 클래스를 생성합니다.
package guru; public class Guru99VariableMetaData { public static int guru99IntVar1=1111; static int guru99IntVar2=2222; static String guru99StringVar1="guru99.com"; static String guru99StringVar2="Learning Reflection API"; }위 클래스의 변수에 대한 메타데이터를 가져오는 단계:
Guru99VariableMetaData guru99ClassVar = new Guru99VariableMetaData(); Class guru99ClassObjVar = guru99ClassVar.getClass();
Field[] guru99Field1= guru99ClassObjVar .getFields(); Field[] guru99Fiel2= guru99ClassObjVar .getDeclaredFields();
getFields() 메서드는 지정된 클래스와 해당 슈퍼 클래스에서 공용 변수의 메타데이터를 반환합니다.
getDeclaredFields() 메서드는 지정된 클래스의 모든 변수에 대한 메타데이터만 반환합니다.
<올 시작="3">여기에서 xxx는 우리가 가져오려는 값의 바이트 또는 짧은 값일 수 있습니다.
여기에서는 Guru99VariableMetaData 클래스에 있는 변수의 메타데이터를 가져오는 클래스를 작성합니다.
package guru; import java.lang.reflect.Field; public class Guru99VariableMetaDataTest { public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException { // Create Class object for Guru99VariableMetaData.class Guru99VariableMetaData guru99ClassVar = new Guru99VariableMetaData(); Class guru99ClassObjVar = guru99ClassVar.getClass(); // Get the metadata of all the fields of the class Guru99VariableMetaData Field[] guru99Field1= guru99ClassObjVar.getDeclaredFields(); // Print name, datatypes, access modifiers and values of the varibales of the specified class for(Field field : guru99Field1) { System.out.println("Variable name : "+field.getName()); System.out.println("Datatypes of the variable :"+field.getType()); int guru99AccessModifiers = field.getModifiers(); System.out.printlln("Access Modifiers of the variable : "+Modifier.toString(guru99AccessModifiers)); System.out.println("Value of the variable : "+field.get(guru99ClassVar)); System.out.println(); system.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *") ; } } }
다음 예는 메서드의 메타데이터를 가져오는 방법을 보여줍니다.
여기에서 Guru99MethodMetaData .class라는 이름의 클래스를 몇 가지 메소드와 함께 생성합니다.
package guru; import java.sql.SQLException; public class Guru99MethodMetaData { public void guru99Add(int firstElement, int secondElement , String result) throws ClassNotFoundException, ClassCastException{ System.out.println("Demo method for Reflextion API"); } public String guru99Search(String searchString) throws ArithmeticException, InterruptedException{ System.out.println("Demo method for Reflection API"); return null; } public void guru99Delete(String deleteString) throws SQLException{ System.out.println("Demo method for Reflection API"); } }
위 클래스의 메소드에 대한 메타데이터를 가져오는 단계:
Guru99MethodMetaData guru99ClassVar = new Guru99MethodMetaData (); Class guru99ClassObjVar = guru99ClassVar.getClass();
Method[] guru99 Method 1= guru99ClassObjVar .get Methods(); Method [] guru99 Method 2= guru99ClassObjVar .getDeclared Method s();
getMethods() 메서드는 지정된 클래스와 해당 슈퍼 클래스에서 공개 메서드의 메타데이터를 반환합니다.
getDeclaredMethods() 메서드는 지정된 클래스의 모든 메서드에 대한 메타데이터만 반환합니다.
여기에서 Guru99MethodMetaData.class 클래스에 있는 메서드의 메타데이터를 가져오는 클래스를 작성합니다.
package guru; import java.lang.reflect.Method; import java.lang.reflect.Modifier; public class Guru99MethodMetaDataTest { public static void main (String[] args) { // Create Class object for Guru99Method MetaData.class class guru99ClassObj = Guru99MethodMetaData.class; // Get the metadata or information of all the methods of the class using getDeclaredMethods() Method[] guru99Methods=guru99classObj.getDeclaredMethods(); for(Method method : guru99Methods) { // Print the method names System.out.println("Name of the method : "+method.getName()); // Print return type of the methods System.out.println("Return type of the method : "+method.getReturnType()); //Get the access modifier list and print int guru99ModifierList = method.getModifiers(); System.Out.printlin ("Method access modifiers : "+Modifier.toString(guru99ModifierList)); // Get and print parameters of the methods Class[] guru99ParamList= method.getParameterTypes(); system.out.print ("Method parameter types : "); for (Class class1 : guru99ParamList){ System.out.println(class1.getName()+" "); } System.out.println(); // Get and print exception thrown by the method Class[] guru99ExceptionList = method. getExceptionTypes(); system.out.print("Excpetion thrown by method :"); for (Class class1 : guru99ExceptionList) { System.out.println (class1.getName() +" "): } System.Out.println(); system.out.println("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * "); } } }
다음 예는 생성자의 메타데이터를 가져오는 방법을 보여줍니다.
여기에서 다른 생성자를 사용하여 Guru99Constructor.class라는 클래스를 생성합니다.
package guru; import java.rmi.RemoteException; import java.sql.SQLException; public class Guru99Constructor { public Guru99Constructor(int no) throws ClassCastException ,ArithmeticException{ } public Guru99Constructor(int no, String name) throws RemoteException ,SQLException{ } public Guru99Constructor(int no, String name, String address) throws InterruptedException{ } }
여기에서는 Guru99Constructor.class 클래스에 있는 생성자의 메타데이터를 가져오는 클래스를 작성하고 있습니다.
package guru; import java.lang.reflect.Constructor; public class Guru99ConstructorMetaDataTest { public static void main (String[] args) { // Create Class object for Guru99Constructor.class Class guru99Class=Guru99Constructor.class; // Get all the constructor information in the Constructor array Constructor[] guru99ConstructorList = guru99Class.getConstructors(); for (Constructor constructor : guru99ConstructorList) { // Print all name of each constructor System.out.println("Constrcutor name : "+constructor.getName()); //Get and print access modifiers of each constructor int guru99Modifiers= constructor.getModifiers(); System.Out.printlin ("Constrctor modifier : "+Modifier.toString(guru99Modifiers)); // Get and print parameter types Class[] guru99ParamList=constructor.getParameterTypes(); System.out.print ("Constrctor parameter types :"); for (Class class1 : guru99ParamList) { System.out.println(class1.getName() +" "); } System. out.println(); // Get and print exception thrown by constructors Class[] guru99ExceptionList=constructor.getFxceptionTypes(); System.out.println("Exception thrown by constructors :"); for (Class class1 : guru99ExceptionList) { System.out.println(class1.getName() +" "); } System.out.println(); System.out.println("*******************************************"); } } }
요약:
java
Java에서 split() 문자열이란 무엇입니까? StrSplit() 메소드를 사용하면 특정 Java 문자열 구분 기호를 기반으로 문자열을 분리할 수 있습니다. 대부분 Java 문자열 분할 속성은 문자열을 나누거나 분할하려는 공백 또는 쉼표(,)입니다. split() 함수 구문 public String split(String regex) public String split(String regex, int limit) 매개변수 정규식:Java 분할의 정규식이 텍스트/문자열에 적용됨 제한:Java 문자열 분할의 제한은 배열의
Python의 Calendar 모듈에는 날짜, 월, 연도를 기반으로 다양한 작업을 계산할 수 있는 달력 클래스가 있습니다. 게다가 Python의 TextCalendar 및 HTMLCalendar 클래스를 사용하면 달력을 편집하고 요구 사항에 따라 사용할 수 있습니다. Python Calendar로 무엇을 할 수 있는지 봅시다. 1단계) 코드를 실행합니다. 코드 라인 # 1:이 모듈의 모든 클래스를 가져올 캘린더 가져오기로 시작합니다. 코드 라인 # 3:c=calendar.TextCalendar(calendar.SUNDA