浅谈Java反射(1)

来源:互联网 发布:spss软件如何下载 编辑:程序博客网 时间:2024/06/07 04:45

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">面向对象-Java反射机制:</span>

反射概述:

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。但是JAVA有着一个非常突出的动态相关机制:Reflection,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知的classes。换句话说,Java程序可以加载一个运行时才得知名称的class,获悉其完整构造(但不包括methods定义),并生成其对象实体、或对其fields设值、或唤起其methods。

反射机制:

为什么要用发射?直接创建对象不ok吗?

这就涉及到动态和静态。

静态编译:编译时确定类型,绑定对象即通过。

Student s = new Student("LiSi");

动态编译:运行时确定类型,动态创建对象和编译,最大限度的发挥了Java的灵活性,体现了多态的应用,降低了类之间的耦合性。

Class.forName("com.mysql.jdbc.Driver.class").newInstance();

但缺点是对性能有影响,慢于直接执行相同的操作。


Class对象,反射的起源,类是程序的一部分,每编写一个新类,都会产生对应的Class对象,从而操纵类中的属性和方法。


源代码:

package com.billjobs.reflection;public class ClassDemo {/** * 权兴权意-2016.8.7 * 获取Class对象 */public static void main(String[] args) {// TODO Auto-generated method stubEmployee employee = new Employee("Quan", 20);//Class<?> classType = employee.getClass();//对象名.getClass()//Class<?> classType = Employee.class;//类名.classtry {Class<?> classType = Class.forName("com.billjobs.reflection.Employee");System.out.println(classType.getName());System.out.println(classType.getSuperclass().getName());} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}//Class.forName("包名.类名")//System.out.println(classType.getName());//System.out.println(classType.getSuperclass().getName());}}class Employee{private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Employee(String name, int age) {super();this.name = name;this.age = age;}}








0 0
原创粉丝点击