黑马程序员——————java中的反射

------- android培训、java培训、期待与您交流! ----------

什么是Java中的类反射:

Reflection Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,

或者说自审,并能直接操作程序的内部属性和方法,换言之就是把java类中的各种成分映射成为

相应的java类。

反射的基石——>class类:

java中各个类属于同一类事物,描述这个事物的java类就是Class,Class的一个实例对象就是内存中的

一份字节码文件,当我们在程序中使用了某些类的时候,这些类就会被加载进内存,对于这些加载进内

存中的字节码都是一个Class类的对象。

获取字节码对象的三种方式:

1.Class cl=类名.class;

2.也可以同过对象的getClass()方法

  Person p=new Person ();

   Class cl=p.getClass();

3.还可以用Class类中的forName()静态方法


java中的八种基本数据类型 boolean byte char short int long float double 和void都有对应的Class对象

这九个Class实例对象是预定义的


反射的具体应用:

Java类反射中所必须的类:
Java的类反射所需要的类并不多,它们分别是:Field、Constructor、Method、Class、Object

下面我将对这些类做一个简单的说明。


Field类
:提供有关类或接口的属性的信息,以及对它的动态访问权限。反射的字段可能是一个

类(静态)属性或实例属性,简单的理解可以把它看成一个封装反射类的属性的类。


Constructor类
提供关于类的单个构造方法的信息以及对它的访问权限。这个类和Field类不同,

Field类封装了反射类的属性,而Constructor类则封装了反射类的构造方法。


Method类提供关于类或接口上单独某个方法的信息。所反映的方法可能是类方法或实例方法

(包括抽象方法)。 这个类不难理解,它是用来封装反射类方法的一个类。


Class类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。

每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。


Object类
每个类都使用 Object 作为超类。所有对象(包括数组)都实现这个类的方法。


下面我们分别来看一看反射中各个类的使用:

 

Constructor类:它表示的是java类的一个构造方法(以String类为例)

得到某个类的所有的构造方法:

Constructor [ ] conts=Class.forName("java.lang.String").getConstructors();

得到某一个构造方法:

Constructor cont=Class.forName("java.lang.String").getConstructora(StringBuffer.class);

通过反射来实例化一个对象并调用它的一个方法:

String str=(String)cont.newInstace(new StringBuffer("abc");

char c=str.charAt(2);


Field类:代表某个类中的一个成员变量

先定义一个类
class Demo
{
private int x;
public int y;
Demo(int x,int y)
{
  this.x=x;
  this.y=y;
}
}
class RflectDemo
{
public static void main(String[]args)
{
   Demo pt1=new Demo(3,5);
Field fy=pt1.getClass().getField("y");
System.out.println(fy.get(pt1));


Field fx=pt1.getClass().getDeclavedField("x");
fx.setAccessible(true);
System.out.println(fx.get(pt1));


}
}

Method类:代表某个类中的一个成员方法

Mothod charAt=Class.forName("java.lang.String").getMethod("charAt",int.class);
char c=charAt.invoke(str,1);


反射的作用:实现框架的功能

class Person //这个类要在集合中存储
{
private String name;
private int age;
Person(String name,int age)
{
  this.name=name;
  this.age=age;
}
}
写一个配置文件,名称为config.properties 内容为:className=java.util.ArrayList



class KuangJiaDemo
{
public static void main(String[]args)
{
 InputStream ips=new FileInputStream("config.properties");
 Properties prop=new Properties();
 prop.load(ips);
 ips.close();


 String className=prop.getProperty("className");
 Collection collecttion=(Collection)Class.forName(className).newInstance();


       Person p1=new Person("lisi1",34)
   Person p2=new Person("lisi2",3)
   Person p3=new Person("lisi3",37)
   Person p4=new Person("lisi4",44)
   Person p5=new Person("lisi5",24)


collection.add(p1);
collection.add(p2);
collection.add(p3);
collection.add(p4);
collection.add(p5);


System.out.println(collection.size());




}
}

------- android培训、java培训、期待与您交流! ----------

















黑马程序员的tb_brand是指在JavaWeb基础教程创建的一个表。这个表是用来存储品牌信息的,具体的表结构和数据类型需要和JavaBean类的成员变量保持一致。\[1\]在这个教程,使用了Maven来构建项目,并且使用了MyBatis作为持久层框架,通过配置pom.xml文件来引入相关依赖。\[2\] Maven是一个用于管理和构建Java项目的工具,它提供了一套标准化的项目结构、构建流程和依赖管理机制。\[3\] #### 引用[.reference_title] - *1* [【JAVAWEB开发】黑马程序员java web案例资料(含Element的删除与修改)](https://blog.csdn.net/aasd23/article/details/126940147)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [黑马程序员-MyBatis 框架-最全入门笔记、阿伟看了都得说真大、真细、真全!!!](https://blog.csdn.net/qq_57383364/article/details/128103058)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [JavaWeb——黑马程序员课程笔记](https://blog.csdn.net/King_ZACC/article/details/128573804)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值