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

java.lang.Class

java.lang.reflect.Constructor

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 }

java class 生成对象_Java反射机制(创建Class对象的三种方式)相关推荐

  1. 利用反射机制创建新类的两种方式及比较

    [0]README 0.1) 本文描述+源代码均 转自 http://blog.csdn.net/fenglibing/article/details/4531033 , 旨在深入理解 如何利用反射机 ...

  2. Java 创建一个线程的三种方式

    Java 创建一个线程的三种方式 更多内容,点击了解: https://how2j.cn/k/thread/thread-start/353.html 创建多线程有3种方式,分别是继承线程类,实现Ru ...

  3. 创建线程的第三种方式---JDK8新特性

    创建线程的第三种方式-JDK8新特性 实现Callable接口,创建线程 Runnable和Callable接口的不同 1.Callable可以返回一个类型V,而Runnable不可以,也就是说Cal ...

  4. 创建线程的第三种方式:实现Callable接口(含部分源码解析)

    创建线程的第三种方式--实现Callable接口 package com.lqy.Multithreading; import java.util.concurrent.Callable; impor ...

  5. 创建CSS样式的三种方式

    CSS基础 - 创建CSS样式的三种方式 我们使用CSS的时候,常规有三种创建CSS样式的的方式: 内联样式,内部样式表,外部样式表 1.内联样式 (不常用) style在标签中的情况就是内联样式.不 ...

  6. 如何从零开始创建React项目(三种方式)

    在开发 React 项目前最关键的当然是项目的创建,现在的前端工程化使得前端项目的创建也变得越来越复杂,在这里介绍三种从零开始创建 React 项目的方式,分别是 "在浏览器中直接引入&qu ...

  7. java创建线程池几种方式_java知识总结-创建线程池的6种方式

    一.创建线程池的6种方式: Executors.newCachedThreadPool(); 创建一个可缓存线程池,应用中存在的线程数可以无限大 Executors.newFixedThreadPoo ...

  8. 多线程系列教材 (一)- Java 创建一个线程的三种方式

    多线程即在同一时间,可以做多件事情. 创建多线程有3种方式,分别是继承线程类,实现Runnable接口,匿名类 步骤1:线程概念 步骤2:创建多线程-继承线程类 步骤3:创建多线程-实现Runnabl ...

  9. 面试题,反射创建类实例的三种方式是什么

    1.获得Class:主要有三种方法: (1)Object-->getClass (2)任何数据类型(包括基本的数据类型)都有一个"静态"的class属性 (3)通过class ...

最新文章

  1. strace 分析mysql 内存占用_关于mysql cluster适用场景的分析
  2. 【Linux】一步一步学Linux——tcpdump命令(185)
  3. python中列表和集合的区别_python中列表和集合有什么区别
  4. 为什么到最后还是要 专注于博客写作
  5. Delphi XE中String、ANSIString、TBytes之间的转换
  6. 拷贝data/data/包名/files文件记下所有文件及文件夹到本地sdcard根目录teddyData_files文件夹下...
  7. SDUT_2012省赛选拔赛2 部分题目
  8. Java标识符、关键字、运算符
  9. 各种好看的cosplay小姐姐热门图片,统统爬取收藏
  10. 知识追踪之动态键值对记忆网络 Dynamic Key-Value Memory Networks for Knowledge Tracing
  11. Python CSV Reader/Writer
  12. 警惕!Python 中少为人知的 10 个安全陷阱!
  13. 计算机入门模拟卷A(有详细答案),《计算机入门》模拟卷C答案-华东师范大学
  14. RouterOS搭建一台SSTP Server用于远程办公
  15. 元计算java_java 二元计算
  16. ubunut安装teamview
  17. 关于短信验证码报错和解决问题
  18. 百度地图自定义覆盖物工具栏,修改标识图标
  19. 聚焦绿色发展新赛道—MapGIS智慧环保解决方案发布
  20. 神舟III号 串口2发送实验程序

热门文章

  1. WEB文档在线预览解决方案
  2. 解决:夜神模拟器连不上adb的问题
  3. Android项目中出现的Plugin with id ‘kotlin-android‘ not found解决方法
  4. 纯前端下载pdf链接文件,而不是打开预览的解决方案
  5. jQuery.click()与onClick
  6. 什么是(功能)反应式编程?
  7. PM2 进程管理工具使用总结
  8. jmeter使用beanshell构造参数化
  9. Android - TextureView, SurfaceView和GLSurfaceView 以及 SurfaceTexture
  10. nohup和的区别与关系