JAVA语言基础学习之反射
小标 2018-09-11 来源 : 阅读 1098 评论 0

摘要:本文主要向大家介绍了JAVA语言基础学习之反射,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言基础学习之反射,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

获取反射的三种方式java.util.Date
                //类名.class
Class claz1 = Date.class;
//对象.getClass();
Class claz2 =  new Date().getClass();
//Class.forName();  此方法在框架中应用甚广
Class claz3 = Class.forName("java.util.Date");
//同一个类在jvm中只会加载一份字节码
System.out.println(claz1==claz2);//true
System.out.println(claz2==claz3);//true
System.out.println(claz1==claz3);//true
八大基本类型
                //八大基本类型和void是没有类的概念,但是却都有class属性所以
Class intClass = int.class;
Class voidClass = void.class;
//所有的包装类型中都有个TYPE属性返回的是该包装类的基本类型的字节码
//(Integer)的基本类型就是int但是泛型无法使用基本类型所以还是只能写(Integer)但实际上是int.class
Class type = Integer.TYPE; 
System.out.println(type == intClass);//true
数组类型
                //由于并没有class来描述 数组 这个特殊类所以在数组中只能使用  对象和类
//使用对象很好理解  但是为什么能使用  类.class呢
int[] a = {1,2};
Class class1 = (Class) a.getClass();
Class class2 = int[].class;
//Class类的api上写着这么一句话  所有的类型和维数都相同的数组共用一份字节码
//看下面代码
Class class3 = int[].class;
Class class4 = int[][].class;
System.out.println(class3 == class4);//false
Class class5 = int[].class;
Class class6 = String[].class;
System.out.println(class5 == class6);//false
int[] a7 = {1,2};
int[] a8 = {1,2,3,4};
Class class7 = a7.getClass();
Class class8 = a8.getClass();
System.out.println(class7 == class8);//true
通过反射来获取构造器Constructor
//getConstructors() 返回包含一个数组 Constructor对象反射由此表示的类的所有公共构造 类对象。
Class clz = User.class;
Constructor[] constructors = clz.getConstructors();//两个
for (Constructor constructor : constructors) {
System.out.println(constructor);
}
//getDeclaredConstructors() 返回包含一个数组 Constructor对象反射由此表示的类的所有构造 类对象(包括private)。
Constructor[] constructors2 = clz.getDeclaredConstructors();//三个
for (Constructor constructor : constructors2) {
System.out.println(constructor);
}
//getConstructor(类... parameterTypes) 返回指定的一个 Constructor对象(只能返回public修饰的)。 
Constructor constructor = clz.getConstructor();//无参构造
System.out.println(constructor);
Constructor constructor2 = clz.getConstructor(String.class);//有且仅有一个String的构造器
System.out.println(constructor2);
Constructor constructor3 =                 clz.getConstructor(String.class,int.class);//java.lang.NoSuchMethodException 找不到该方法
//getDeclaredConstructor(类... parameterTypes) 返回一个 Constructor对象(获取一个,忽略权限修饰符)。 
Constructor constructor4 = clz.getDeclaredConstructor(String.class,int.class);//String + int的构造器
System.out.println(constructor4);    
User类
class User{    public User(){             }    public User(String name){             }    private User(String name,int age){             }     }    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程