java 反射动态修改数据类型_023 JAVA 反射机制、Class对象、反射机制动态操作及反射操作泛型...

1. 反射机制介绍

1.1 反射机制是 Java 的动态性之一

动态语言:在程序运行时,可以改变程序的结构或变量的 类型。

典型的动态语言有:Python、ruby、JavaScrip

C,C++,Java 不是动态语言,但具有一定的动态性,可以 称为”准动态语言”,具备类似动态语言的特性。

传一块代码来动态的执行,动态的处理,Java 也能做,可 以利用反射来实现类似的功能。

Java的动态性让编程变得更加的灵活,功能就更加的强大。

1.2 反射机制

程序在运行的过程中加载一些“只知道相关名字”的类, 以下代码,在程序运行时加载 User 类。

Class c=Class.forName("com.bjsxt.reflect.User");

一个类被加载后,JVM 会创建一个对应类的 Class 对象, 类的整个结构信息会被放到 Class 对象中。

这个 Class 对象就像镜子一样,通过这面镜子,可以得到对应的类的全部信息。

1.3 反射机制的常见作用

1) 动态的加载类、动态的获取类的信息(属性,方法,构造 器)

2) 动态构造对象

3) 动态调用类和对象的任意方法、构造器

4) 动态调用和处理属性

5) 获取泛型信息

6) 处理注解

1.4 获取 Class 对象的方式

1) 通过字节码文件

2) 对象的 getClass()方法

3) Class 类的静态方法 forName("全限定类名")

注意:

1. 原始JAVA类型(8种数据类型)和关键字void表示为类对象

2. 维数相同和类型相同的数组共享一个Class对象

----------------------------------- --------------------------------

实体类:

package com.sxt.entity;

public class User {

private String userName;

private int userId;

private int passWord;

protected char userSex;

int userAge;

public User(String userName, int userId, int passWord, char userSex, int userAge) {

this.userName = userName;

this.userId = userId;

this.passWord = passWord;

this.userSex = userSex;

this.userAge = userAge;

}

public User() {

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public int getUserId() {

return userId;

}

public void setUserId(int userId) {

this.userId = userId;

}

public int getPassWord() {

return passWord;

}

public void setPassWord(int passWord) {

this.passWord = passWord;

}

public char getUserSex() {

return userSex;

}

public void setUserSex(char userSex) {

this.userSex = userSex;

}

public int getUserAge() {

return userAge;

}

public void setUserAge(int userAge) {

this.userAge = userAge;

}

}

----------------------------------- --------------------------------

package com.sxt.reflect;

import com.sxt.entity.User;

public class TestReflect {

public static void main(String[] args) throws ClassNotFoundException {

System.out.println(int.class);

System.out.println(void.class);

System.out.println(String.class);

//维数相同和类型相同的数组共享一个Class对象

int [] arrA = new int[10];

int [] arrB = new int[30];

System.out.println(arrA.getClass()==arrB.getClass());

User u1 = new User();

User u2 = new Use

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值