Java反射机制(创建Class对象的三种方式)

1:SUN提供的反射机制的类:

java.lang.Class<T>

java.lang.reflect.Constructor<T>

java.lang.reflect.Field

java.lang.reflect.Method

java.lang.reflect.Modifier

2:什么是反射

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

3:反射的作用

反编译 .class --à .java

通过反射机制可以访问java对象中的属性,方法,构造方法

4:创建Class对象的三种方式

JavaBean:

public class Person implements China{
      private String name;
      private int age ;
      private char sex ;

      public Person() {
           super ();
     }

      public Person(String name, int age, char sex) {
           super ();
           this .name = name;
           this .age = age;
           this .sex = sex;
     }

      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 char getSex() {
           return sex ;
     }

      public void setSex(char sex) {
           this .sex = sex;
     }
      public void eat()
     {
          System. out .println("吃了" );
     }

      @Override
      public String toString() {
           return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]" ;
     }

      @Override
      public void sayChina() {
           // TODO Auto-generated method stub
          System. out .println("作者:" + AUTHOR + "国籍:"+ NATIONAL );
     }

      @Override
      public String sayHello(String name, int age, char sex) {
           // TODO Auto-generated method stub
           return "姓名:" + name + "年龄:"+ age + "性别:" + sex;
     }

}
 1 public class ClassDemo02 {
 2
 3      public static void main(String[] args) {
 4           Person p1 = new Person("小明" ,20,‘男‘ );
 5           Person p2 = new Person("小红" ,23,‘女‘ );
 6
 7            //创建Class对象的方式一:(对象.getClass()),获取person类中的字节码文件
 8            Class class1 = p1.getClass();
 9           System. out.println(p1.getClass().getName());
10            Class class2 = p2.getClass();
11           System. out.println(class1 == class2 );
12
13           System. out.println("==============================" );
14            //创建Class对象的方式二:(类.class:需要输入一个明确的类,任意一个类型都有一个静态的class属性)
15            Class class3 = Person.class;
16           System. out.println(class1 == class2);
17
18           System. out.println("==============================" );
19            //创建Class对象的方式三:(forName():传入时只需要以字符串的方式传入即可)
20            //通过Class类的一个forName(String className)静态方法返回一个Class对象,className必须是全路径名称;
21            //Class.forName()有异常:ClassNotFoundException
22
23            Class class4 = null;
24            try {
25               class4 = Class.forName("cn.itcast.Person");
26           } catch (ClassNotFoundException e) {
27                // TODO Auto-generated catch block
28               e.printStackTrace();
29           }
30           System. out.println(class4 == class3);
31      }
32 }

注意:在开发中一般使用第三种方法,因为第三种接收的是一个字符串路径,将来可以通过配置文件获取,通用性好;

4:newInstance()方法 ---> 获取class类型之后,可以创建该类型的对象

public T newInstance()throws InstantiationException,IllegalAccessException

 1 public class reflect03 {
 2
 3     public static void main(String[] args) throws Exception {
 4
 5         Class c1 = Class.forName("com.itheima04.Test_20171106.Test_20171207.Person");
 6
 7         //创建此Class对象所表示类的一个新实例,
 8         //newInstance方法调用的是Person的空参数构造方法
 9         Object o = c1.newInstance();
10         System.out.println(o.toString());
11     }
时间: 2024-08-03 07:18:11

Java反射机制(创建Class对象的三种方式)的相关文章

反射机制获取Class对象的三种方式:

Person person = new Person(); //1.通过Object类的getClass()方法:(需要先实例化一个对象) Class clazz1 = person.getClass(); //2.通过对象实例方法获取对象:(需要先实例化一个对象) Class clazz2 = person.class; //3.类的全路径:(不许呀实例对象) Class clazz3 = Class.forName("com.cn.Person"); 对于有空的构造函数的类可以直接

反射机制获取Class对象的三种方式

1.通过getClass()方法:(通过对象) Class c1 = obj.getClass(); 2.通过对象实例方法获取对象:(通过对象) Class c2= obj.class; 3.类的全路径:(通过类名) Class c3 = Class.forName("package.className"); 原文地址:https://www.cnblogs.com/Peter-Yu/p/9108724.html

JDBC 创建连接对象的三种方式

创建连接对象的三种方式 //第一种方式 Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb?user=root&password=root") ; //第二种方式 //读取properties文件 Properties pro = new Properties() ; InputStream in = JdbcDemo3.class.getClassLoader().ge

spring中创建bean对象的三种方式以及作用范围

时间:2020/02/02 一.在spring的xml配置文件中创建bean对象的三种方式: 1.使用默认构造函数创建.在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数函数,则对象无法创建. <bean id="one" class="sdnu.machi.one"></bean> 如果one.class中没有默认构造函数则会报

java webservice服务器端获取request对象的三种方式

有的时候在webservice里我们需要获取request对象和response对象,比如想要获得客户端的访问ip的时候就需要这么做,下面说三种方式,当然三种方式可能是针对不同方式部署webservice获取request对象的方法. 第一种:先配置注入: @Resource private WebServiceContext webServiceContext; 其次是下面的代码: MessageContext mc = webServiceContext.getMessageContext(

Java反射获取class对象的三种方式,反射创建对象的两种方式

Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName 静态方法. 前提:已明确类的全路径名. 第二种,使用 .class 方法. 说明:仅适合在编译前就已经明确要操作的 Class 第三种,使用类对象的 getClass() 方法. 适合有对象示例的情况下 package com.reflection; /** * Created by Liuxd

反射概念:获取class文件对象的三种方式

反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 要想解剖一个类,必须先要获取到该类的字节码文件对象.而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象. 利用class文件对象,去使用该文件中的成员变量,构造方法,成员方法. 例子1:获取class文件对象的三种方式 public cla

c#创建Graphics对象的三种方法

方法一.利用控件或窗体的Paint事件中的PainEventArgs 在窗体或控件的Paint事件中接收对图形对象的引用,作为PaintEventArgs(PaintEventArgs指定绘制控件所用的Graphics)的一部分,在为控件创建绘制代码时,通常会使用此方法来获取对图形对象的引用. 例如: //窗体的Paint事件的响应方法 复制代码代码如下: private void form1_Paint(object sender, PaintEventArgs e) { Graphics g

java核心学习(二十一) 多线程---创建启动线程的三种方式

本节开始java多线程编程的学习,对于操作系统.进程.线程的基本概念不再赘述,只是了解java对于多线程编程的支持有哪些. 一.继承Thread类来创建线程 java语言中使用Thread类来代表线程,代表线程的类可以通过继承Thread类并重写run()方法来实现多线程开发,调用线程类实例的start方法来启动该线程.下面来试一试 package ThreadTest; public class FirstThread extends Thread{ private int i; public