Java Reflection. Compile-Time vs Run-Time Some data you know at compile time: int area = radius*radius*3.14; The “3.14” is set – known at compile time.

Slides:



Advertisements
Similar presentations
Introduction to Java Reflection
Advertisements

Reflection Reflection is the ability of a program to examine and modify the structure and behavior of an object at runtime.
Java Virtual Machine (JVM). Lecture Objectives Learn about the Java Virtual Machine (JVM) Understand the functionalities of the class loader subsystem.
10/18/08 Matt Swatzell. What is Reflection?  Some Definitions….  Reflection is the process by which a program can modify its own behavior.  A program.
Slide 11.1 Advanced Programming 2004, based on LY Stefanus’s Slides Reflection Reflection is the ability for a class or object to examine itself. Java.
JVM-1 Java Virtual Machine Reading Assignment: Chapter 1: All Chapter 3: Sections.
Advanced Java Course Reflection. Reflection API What if you want to access information not just about the Object, but about that Object’s Class? What.
Starting Classes and Methods. Objects have behaviors In old style programming, you had: –data, which was completely passive –functions, which could manipulate.
1 Java Reflection. 2 Java looking at Java l One of the unusual capabilities of Java is that a program can examine itself »You can determine the class.
JVM-1 Java Virtual Machine Reading Assignment: Chapter 1: All Chapter 3: Sections.
Java Virtual Machine (JVM). Lecture Objectives Learn about the Java Virtual Machine (JVM) Understand the functionalities of the class loader subsystem.
1 Java Reflection. 2 Java looking at Java l One of the unusual capabilities of Java is that a program can examine itself »You can determine the class.
25-Jun-15 Starting Classes and Methods. Objects have behaviors In old style programming, you had: data, which was completely passive functions, which.
03G-1 Reflection In Java For every loaded class, the Java Runtime Environment (JRE) maintains an associated Class object The Class object “ reflects ”
1 Java object model Part 3: Serialization & Reflection.
1 Java reflections API Lecture 1. 2 Assignments Java 1.4 or Java 1.5? Both are ok, but the assignments are written for Java 1.4, and specific Java 1.5.
Unit 061 Java Virtual Machine (JVM) What is Java Virtual Machine? The Class Loader Subsystem Linking oVerification oPreparation oResolution Class Initialization.
13-Jul-15 Reflection. 2 Java looking at Java One of the unusual capabilities of Java is that a program can examine itself You can determine the class.
1 Chapter 8 Objects and Classes. 2 Motivations After learning the preceding chapters, you are capable of solving many programming problems using selections,
Reflection API Faculty of Information Technologies Industrial University of Ho Chi Minh City Java Programming Course 1.
1 Inheritance and Polymorphism Chapter 9. 2 Polymorphism, Dynamic Binding and Generic Programming public class Test { public static void main(String[]
Advanced Java Programming Lecture 5 Reflection dr hab. Szymon Grabowski dr inż. Wojciech Bieniecki
Introduction to Object Oriented Programming. Object Oriented Programming Technique used to develop programs revolving around the real world entities In.
SEG4110 – Advanced Software Design and Reengineering TOPIC H Java Reflection.
NSIT,Jetalpur CORE JAVA CONCEPTS SURABHI MISHRA (LCE)NSIT.
Object Oriented Programming in Java Lecture 13. Java Reflection Reflection is a feature unique to Java that allows an executing program to examine or.
Programming in Java Unit 2. Class and variable declaration A class is best thought of as a template from which objects are created. You can create many.
Java Implementation: Part 3 Software Construction Lecture 8.
By Nicholas Policelli An Introduction to Java. Basic Program Structure public class ClassName { public static void main(String[] args) { program statements.
The Reflection Lucielle Mendez Antonio Bologna.
Basic Java Syntax CSE301 University of Sunderland Harry R Erwin, PhD.
Inheritance and Polymorphism Daniel Liang, Introduction to Java Programming.
Reflection in Java Bibliografie: Sun: The Java Tutorials – The Reflection API Java programming.
CSC 142 Computer Science II Zhen Jiang West Chester University
Inheritance (Part 4) Polymorphism and Abstract Classes 1.
Inheritance (Part 5) Odds and ends 1. Static Methods and Inheritance  there is a significant difference between calling a static method and calling a.
Inheritance (Part 2) KomondorBloodHound PureBreedMix Dog Object.
Chapter 5 Objects and Classes Inheritance. Solution Assignments 3 & 4 Review in class…..
CMSC 341 Java Packages, Classes, Variables, Expressions, Flow Control, and Exceptions.
Classes Modeling the Object. Objects model the world Classes are programmer defined types that model the parts of a system Class serve as blueprints for.
CS884 (Prasad)java11Extn1 Java 1.1 Extensions Nested classes static public/protected/private.
Liang, Introduction to Java Programming, Sixth Edition, (c) 2007 Pearson Education, Inc. All rights reserved Chapter 9 Inheritance and.
Chapter 8 Class Inheritance and Interfaces F Superclasses and Subclasses  Keywords: super F Overriding methods  The Object Class  Modifiers: protected,
Application development with Java Lecture 21. Inheritance Subclasses Overriding Object class.
More on Objects Mehdi Einali Advanced Programming in Java 1.
Sadegh Aliakbary. Copyright ©2014 JAVACUP.IRJAVACUP.IR All rights reserved. Redistribution of JAVACUP contents is not prohibited if JAVACUP.
Peyman Dodangeh Sharif University of Technology Spring 2014.
CSCE 314 Programming Languages Reflection Dr. Hyunyoung Lee 1.
Reflection Bibliografie: Sun: The Java Tutorials – The Reflection API IBM developerWorks:
Quick Review of OOP Constructs Classes:  Data types for structured data and behavior  fields and methods Objects:  Variables whose data type is a class.
CSE 331 Reflection slides created by Marty Stepp based on materials by M. Ernst, S. Reges, D. Notkin, R. Mercer, Wikipedia
© 2006 Pearson Addison-Wesley. All rights reserved 1-1 Chapter 1 Review of Java Fundamentals.
03G-1 Reflection In Java “Reflection is the ability of a program to manipulate as data something representing the state of the program during its own execution.”
Topics Instance variables, set and get methods Encapsulation
Reference Types CSE301 University of Sunderland Harry R Erwin, PhD.
UMBC CMSC 331 Java Review of objects and variables in Java.
Chapter 7: Cloning and RTTI
NESTED CLASSES REFLECTION PROXIES.
Java Programming Course
Java as a Dynamic Language
CSE 413, Autumn 2002 Programming Languages
Advanced Programming in Java
EE 422C Java Reflection re·flec·tion rəˈflekSH(ə)n/ noun
Advanced Programming in Java
Computer Science II Exam 1 Review.
Inheritance Inheritance is a fundamental Object Oriented concept
Java Programming Language
Some Examples Reflection is used for many things:
CSCE 314: Programming Languages Dr. Dylan Shell
Reflection in Java By: Zachary Cava.
Presentation transcript:

Java Reflection

Compile-Time vs Run-Time Some data you know at compile time: int area = radius*radius*3.14; The “3.14” is set – known at compile time. To change it you would have to recompile. Consider instead: double pi = myScanner.nextDouble(); int area = radius*radius*pi; The “pi” variable will not be known or set until run-time. It can be different each time the program is run.

Programs analyzing Programs Consider the classes, instance variables, and methods in a program. They are set at compile time. To change them, you need to re-compile the program. But that can cause problems in programs that analyze other programs. How does Eclipse know what classes I might make? It doesn’t, until RUN- TIME! I need run-time access to the program’s structure.

Java looking at Java One of the unusual capabilities of Java is that a program can examine itself –You can determine the class of an object –You can find out all about a class: its access modifiers, superclass, fields, constructors, and methods –You can find out what what is in an interface –Even if you don’t know the names of things when you write the program, you can: Create an instance of a class Get and set instance variables Invoke a method on an object Create and manipulate arrays I guess this is called “reflection” because it’s as if a Java program could “look in a mirror” at itself

What is reflection for? You do need reflection if you are working with programs that process programs Typical examples: –A class browser –A debugger –A GUI builder –An IDE, such as BlueJ or Forté –A program to grade student programs

Reflection Dog class -String Breed -double age -public void bark() Dog class -String Breed -double age -public void bark() Spot: Dog Ruff: Dog

Reflection Dog class -String Breed -double age -public void bark() Dog class -String Breed -double age -public void bark() Spot: Dog Ruff: Dog Class class -public String getName() -public Method[] getMethods() -public Field[] getFields() Class class -public String getName() -public Method[] getMethods() -public Field[] getFields()

Reflection Dog class -String Breed -double age -public void bark() Dog class -String Breed -double age -public void bark() Spot: Dog Ruff: Dog Class class -public String getName() -public Method[] getMethods() -public Field[] getFields() Class class -public String getName() -public Method[] getMethods() -public Field[] getFields()

Reflection Dog class -String Breed -double age -public void bark() Dog class -String Breed -double age -public void bark() Spot: Dog Ruff: Dog Class class -public String getName() -public Method[] getMethods() -public Field[] getFields() Class class -public String getName() -public Method[] getMethods() -public Field[] getFields() DogClass: Class

Reflection Dog class -String Breed -double age -public void bark() -public Class getClass() Dog class -String Breed -double age -public void bark() -public Class getClass() Spot: Dog Ruff: Dog Class class -public String getName() -public Method[] getMethods() -public Field[] getFields() Class class -public String getName() -public Method[] getMethods() -public Field[] getFields() DogClass: Class

The Class class To find out about a class, first get its Class object –If you have an object obj, you can get its class object with Class c = obj.getClass(); –You can get the class object for the superclass of a Class c with Class sup = c.getSuperclass(); –If you know the name of a class (say, Button ) at compile time, you can get its class object with Class c = Button.class; –If you know the name of a class at run time (in a String variable str ), you can get its class object with Class c = Class.forName(str); For some, need try/catch block for ClassNotFoundException

Getting the class name If you have a class object c, you can get the name of the class with c.getName() getName returns the fully qualified name; that is, Class c = Button.class; String s = c.getName(); System.out.println(s); will print java.awt.Button Class Class and its methods are in java.lang, which is always imported and available

Getting all the superclasses getSuperclass() returns a Class object (or null if you call it on Object, which has no superclass) The following code is from the Sun tutorial: static void printSuperclasses(Object o) { Class subclass = o.getClass(); Class superclass = subclass.getSuperclass(); while (superclass != null) { String className = superclass.getName(); System.out.println(className); subclass = superclass; superclass = subclass.getSuperclass(); } }

Getting the class modifiers I A Class object has an instance method getModifiers() that returns an int representing a constant encoding of modifiers - YUCK! To “decipher” the int result, we need methods of the Modifier class, which is in java.lang.reflect, so: import java.lang.reflect.*; Now we can do things like: if (Modifier.isPublic(m)) System.out.println("public");

Getting the class modifiers II Modifier contains these methods (among others): –public static boolean isAbstract(int) –public static boolean isFinal(int) –public static boolean isInterface(int) –public static boolean isPrivate(int) –public static boolean isPublic(int) –public static boolean isStatic(int) –public static String toString(int) This will return a string such as "public final synchronized strictfp"

Examining classes and interfaces The class Class represents both classes and interfaces To determine if a given Class object c is an interface, use c.isInterface() To find out more about a class object, use: –getModifiers() –getFields() // "fields" == "instance variables" –getConstructors() –getMethods() –isArray()

Getting Field s public Field[] getFields() throws SecurityException –Returns an array of public Fields (variables) –The length of the array may be zero –The fields are not returned in any particular order –Both locally defined and inherited instance variables are returned public Field getField(String name) throws NoSuchFieldException, SecurityException –Returns the named public Field –If no immediate field is found, the superclasses and interfaces are searched recursively

Using Field s, I If f is a Field object, then –f.getName() returns the simple name of the field –f.getType() returns the type ( Class ) of the field –f.getModifiers() returns the Modifier s of the field –f.toString() returns a String containing access modifiers, the type, and the fully qualified field name Example: public java.lang.String Person.name –f.getDeclaringClass() returns the Class in which this field is declared

Using Field s, II The fields of a particular object obj may be accessed with: –boolean f.getBoolean(obj), int f.getInt(obj), double f.getDouble(obj), etc., return the value of the field, assuming it is that type or can be widened to that type –Object f.get(obj) returns the value of the field, assuming it is an Object –void f.set(obj, value), void f.setBoolean(obj, bool), void f.setInt(obj, i), void f.getDouble(obj, d), etc. set the value of a field

Constructors If c is a Constructor object, then –c.getName() returns the name of the constructor, as a String (this is the same as the name of the class) –c.getDeclaringClass() returns the Class in which this constructor is declared –c.getModifiers() returns the Modifier s of the constructor –c.getParameterTypes() returns an array of Class objects, in declaration order –c.newInstance(Object[] initargs) creates and returns a new instance of class c Arguments that should be primitives are automatically unwrapped as needed

Methods public Method[] getMethods() throws SecurityException –Returns an array of Method objects –These are the public member methods of the class or interface, including inherited methods –The methods are returned in no particular order public Method getMethod(String name, Class[] parameterTypes) throws NoSuchMethodException, SecurityException

Method methods, I getDeclaringClass() –Returns the Class object representing the class or interface that declares the method represented by this Method object getName() –Returns the name of the method represented by this Method object, as a String getModifiers() –Returns the Java language modifiers for the method represented by this Method object, as an integer getParameterTypes() –Returns an array of Class objects that represent the formal parameter types, in declaration order, of the method represented by this Method object

Method methods, II getReturnType() –Returns a Class object that represents the formal return type of the method represented by this Method object toString() –Returns a String describing this Method (typically pretty long) public Object invoke(Object obj, Object[] args) –Invokes the underlying method represented by this Method object, on the specified object with the specified parameters –Individual parameters are automatically unwrapped to match primitive formal parameters

References This lecture comes mainly from the following sources – mlhttp://java.sun.com/docs/books/tutorial/reflect/index.ht ml – 1.htmlhttp://java.sun.com/docs/overviews/java/java-overview- 1.html – es/ALT/Reflection/ es/ALT/Reflection/