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.

Slides:



Advertisements
Similar presentations
Introduction to Java Reflection
Advertisements

OO Programming in Java Objectives for today: Overriding the toString() method Polymorphism & Dynamic Binding Interfaces Packages and Class Path.
Chapter 1 Object-Oriented Concepts. A class consists of variables called fields together with functions called methods that act on those fields.
SUMMARY: abstract classes and interfaces 1 Make a class abstract so instances of it cannot be created. Make a method abstract so it must be overridden.
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.
CERTIFICATION OBJECTIVES Use Class Members Develop Wrapper Code & Autoboxing Code Determine the Effects of Passing Variables into Methods Recognize when.
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.
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.
Java Virtual Machine (JVM). Lecture Objectives Learn about the Java Virtual Machine (JVM) Understand the functionalities of the class loader subsystem.
1 Java Object Model Part 1. 2 Type Definition: set of values – a set of values and set of operations –a set of operations that can be applied to those.
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.
Reflection API Faculty of Information Technologies Industrial University of Ho Chi Minh City Java Programming Course 1.
JavaServer Pages Syntax Harry Richard Erwin, PhD CSE301/CIT304.
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
SEG4110 – Advanced Software Design and Reengineering TOPIC H Java Reflection.
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.
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.
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.
Java Quiz Bowl A fun review of the Java you should know from CMPT 201 If you don’t know the answers - this week is for you to study up!
APCS Java AB 2004 Review of CS1 and CS2 Review for AP test #1 Sources: 2003 Workshop notes from Chris Nevison (Colgate University) AP Study Guide to go.
Arrays. Arrays in Java  Arrays in Java are objects.  Like all objects are created with the new keyword.
5-Aug-2002cse Arrays © 2002 University of Washington1 Arrays CSE 142, Summer 2002 Computer Programming 1
Java Introduction 密碼學與應用 海洋大學資訊工程系 丁培毅.
Review of ICS 102. Lecture Objectives To review the major topics covered in ICS 102 course Refresh the memory and get ready for the new adventure of ICS.
Reflection in Java Bibliografie: Sun: The Java Tutorials – The Reflection API Java programming.
Chapter 6 Introduction to Defining Classes. Objectives: Design and implement a simple class from user requirements. Organize a program in terms of a view.
Chapter 14 Abstract Classes and Interfaces. Abstract Classes An abstract class extracts common features and functionality of a family of objects An abstract.
Chapter 5 Objects and Classes Inheritance. Solution Assignments 3 & 4 Review in class…..
CMSC 341 Java Packages, Classes, Variables, Expressions, Flow Control, and Exceptions.
Chapter 3 Objects and Classes. Objects Object – a data type with structure, state, and operations to access and manipulate state - an instance of a class.
Chapter 8 Class Inheritance and Interfaces F Superclasses and Subclasses  Keywords: super F Overriding methods  The Object Class  Modifiers: protected,
CSI 3125, Preliminaries, page 1 Overloading Methods In Java it is possible to define two or more methods within the same class that share the same name,
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.
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
OOP Basics Classes & Methods (c) IDMS/SQL News
Reflection Mehdi Einali Advanced Programming in Java 1.
Reference Types CSE301 University of Sunderland Harry R Erwin, PhD.
Reflections CSC207 – Software Design. Background Turing's great insight: programs are just another kind of data. Source code is text that is interpreted.
Execution ways of program References: www. en.wikipedia.org/wiki/Integrated_development_environment  You can execute or run a simple java program with.
Chapter 7: Cloning and RTTI
Sixth Lecture ArrayList Abstract Class and Interface
NESTED CLASSES REFLECTION PROXIES.
Java Programming Course
Java as a Dynamic Language
Java Primer 1: Types, Classes and Operators
CSE 413, Autumn 2002 Programming Languages
EE 422C Java Reflection re·flec·tion rəˈflekSH(ə)n/ noun
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:

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 of an object You can find out all about a class: its access modifiers, superclass, fields, constructors, and methods You can find out 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

3 What is reflection for? In “normal” programs you don’t need reflection 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 Eclipse, NetBeans, or IntelliJ IDEA A program to grade student programs

4 IDEs Most Java IDEs are themselves Java programs— what can they do? Compile a program (easy—just a system call) Load in your program after compilation Find out what classes you have, and what their constructors and methods are Execute your main method Create objects for you even without running your main method Send messages to objects and display the results All these capabilities, except compilation, are done with reflection

5 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(); 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 (say, in a String variable str), you can get its class object with Class c = Class.forName( str ); You can get the class object for the superclass of a Class c with Class sup = c.getSuperclass();

6 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

7 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(); } }

8 Getting the class modifiers I A Class object has an instance method getModifiers() that returns an int To “decipher” the int result, we need static 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"); }

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

10 Getting interfaces A class can implement zero or more interfaces getInterfaces() returns an array of Class objects These are the interfaces implemented by the class More code from Sun:  static void printInterfaceNames(Object o) { Class c = o.getClass(); Class[ ] theInterfaces = c.getInterfaces(); for (int i = 0; i < theInterfaces.length; i++) { String interfaceName = theInterfaces[i].getName(); System.out.println(interfaceName); } } Note that zero-length arrays are perfectly legal in Java

11 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()

12 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, but not static variables 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

13 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

14 Using Field s, II The values of the fields of an 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 f of the object obj, 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 If the field is a primitive type, it is wrapped to 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

15 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, as if the constructor had been called Arguments that should be primitives are automatically unwrapped as needed

16 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

17 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

18 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

19 Arrays I To determine whether an object obj is an array, Get its class c with Class c = obj.getClass(); Test with c.isArray() To find the type of components of the array, c.getComponentType() Returns null if c is not the class of an array There is an Array class in java.lang.reflect that provides static methods for working with arrays

20 Arrays II To create an array, Array.newInstance(Class componentType, int size ) This returns, as an Object, the newly created array You can cast it to the desired type if you like The componentType may itself be an array This would create a multiply-dimensioned array The limit on the number of dimensions is usually 255 Array.newInstance(Class componentType, int[] size ) This returns, as an Object, the newly created multidimensional array (with size.length dimensions)

21 Arrays III To get the value of array elements, Array.get(Object array, int index ) returns an Object Array.getBoolean(Object array, int index ) returns a boolean Array.getByte(Object array, int index ) returns a byte etc. To store values into an array, Array.set(Object array, int index, Object value ) Array.setBoolean(Object array, int index, boolean z ) Array.setByte(Object array, int index, byte b ) etc.

22 Concluding comments Many of these methods throw exceptions that I haven’t described For details, see the Java API Reflection isn’t used in “normal” programs, but when you need it, it’s indispensable A related topic is class loaders--the Java that reads in classes as needed You can write your own class loaders This is another capability that most languages don’t have I’ve never used reflection for any serious programs, but I think it’s a fascinating capability

23 The End