1、Class对象的三种创建方法(Class首字母大写)
public class Demo {
public static void main(String[] args){
Object obj=new Object();//方法一:先new对象,再调用方法,创建Class对象c1
Class c1=obj.getClass();
Class c2=Object.class;//方法二:使用.class属性,无需new对象,直接创建Class对象c2
try {
//方法三(推荐):调用Class类的forName方法,不需考虑类是否存在,功能强大。
Class c3=Class.forName("java.lang.Object");
System.out.println("c3哈希值:"+c3.hashCode());//哈希值判断是否指向同一对象
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println("c1哈希值:"+c1.hashCode());
System.out.println("c2哈希值:"+c2.hashCode());
}
}

Class对象的价值:反射机制。

Class对象可以看作某个类的影子,通过影子,可以获得这个类的方法、属性等。

如下案例中,Demo.java中的Class对象c是Example.java的影子。通过c,获得Examp中的方法类型、参数类型等。

      

2、获得Constructor构造方法(java.lang.reflect.Constructor包下)

class.getConstructors()  获取所有公有public构造方法。()内带参数,则获取指定的public构造方法。

class.getDeclaredConstructors()  获取所有构造方法。()内带参数,则获取指定构造方法。

构造方法Constructor的一些属性:getModifiers修饰符、getName名字、getParameterTypes参数类型

public class Demo {
public static void main(String[] args) {
try {
Class c = Class.forName("Example");//创建类对象。同一包下,直接使用
Constructor cons[] = c.getDeclaredConstructors();//获取Example中的所有构造方法
for (Constructor con : cons) {//con.getModifiers()返回Int型,所以转字符串
System.out.print(Modifier.toString(con.getModifiers()) + " ");//获取修饰符
System.out.println(con.getName());//方法名
Class paras[] = con.getParameterTypes();//方法中的参数类型
for (int i = 0; i < paras.length; i++) {
System.out.println(paras[i].getSimpleName());//参数类型的简化名
}
}
//无参数的构造方法。Example中toString
Constructor cs1 = c.getDeclaredConstructor();//Example中无参数的构造方法
Object obj = cs1.newInstance();//实例化
System.out.println(obj.toString());//调用Example中toString方法
//1个参数的构造方法。Example中id赋值123
Constructor cs2 = c.getDeclaredConstructor(int.class);//Example中int型参数的构造方法
obj = cs2.newInstance(123);//实例化
System.out.println(obj.toString());//调用Example中toString方法
//3个参数的构造方法。Example中id、name、price赋值
Constructor cs3 = c.getDeclaredConstructor(int.class, String.class, double.class);//Example中3参数的构造方法
cs3.setAccessible(true);//private私有方法无法使用,故获取权限
obj = cs3.newInstance(123, "反射", 3.14);//实例化
System.out.println(obj.toString());//调用Example中toString方法
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
public class Example {
int id;
String name;
double price; //Alt+Insert,Constructor快速创建构造方法
public Example() {
} public Example(int id) {
this.id = id;
} private Example(int id, String name, double price) {
this.id = id;
this.name = name;
this.price = price;
} //Alt+Insert,toString快速创建构造方法
public String toString() {//返回Example的值
return "Example{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
'}';
}
}
 

Class对象、反射机制、获取Constructor构造方法的更多相关文章

  1. Day16_89_通过反射机制获取所有构造方法

    通过反射机制获取某个特定的构造方法 * 代码 import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; publ ...

  2. Day16_90_通过反射机制获取某个特定的构造方法

    通过反射机制获取某个特定的构造方法 public class ReflectTest13 { public static void main(String[] args) throws ClassNo ...

  3. java反射机制获取自定义注解值和方法

    由于工作需求要应用到java反射机制,就做了一下功能demo想到这些就做了一下记录 这个demo目的是实现动态获取到定时器的方法好注解名称,废话不多说了直接上源码 1.首先需要自定义注解类 /** * ...

  4. java 中利用反射机制获取和设置实体类的属性值

    摘要: 在java编程中,我们经常不知道传入自己方法中的实体类中到底有哪些方法,或者,我们需要根据用户传入的不同的属性来给对象设置不同的属性值,那么,java自带的反射机制可以很方便的达到这种目的,同 ...

  5. Day16_91_通过反射机制获取父类和父接口

    通过反射机制获取父类和父接口 * 代码: import java.net.InterfaceAddress; public class ReflectTest14 { public static vo ...

  6. Day15_87_通过反射机制获取某个特定的方法

    通过反射机制获取某个特定的方法 反射是通过 方法名+形参列表来区分各个方法的(形参列表要用class类型.加.class) 示例代码 import java.lang.reflect.Method; ...

  7. Day15_86_通过反射机制获取所有方法(method)

    通过反射机制获取所有方法(method) import java.lang.reflect.Field; import java.lang.reflect.Method; import java.la ...

  8. Day14_83_反射机制获取某个特定属性的各部分

    反射机制获取某个特定属性的各部分 * 通过属性名(变量名)来获取一个属性整体 例如: Field userNoField=c.getDeclaredField("userNo"); ...

  9. Day14_81_反射机制获取Class属性

    反射机制获取Class属性 获取属性 方法一: Class对象 . getFields();只能用来获取公开的属性,不能获取有私有的或者受保护的属性 获取属性 方法二: Class对象 . getDe ...

  10. kettle job如何利用java的反射机制获取执行的sql语句

    kettle job中的JavaScript如何获取同一个job中SQL步骤的执行语句并让执行语句记录在日志中呢?首先写日志需要用到job中JavaScript写日志的方法,其次是利用java反射机制 ...

随机推荐

  1. Python进阶量化交易专栏场外篇7- 装饰器计算代码时间

    欢迎大家订阅<教你用 Python 进阶量化交易>专栏!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外已陆续推出一些手记来辅助同学们学习本专栏内容,目前已推出如下扩展篇: 在第一篇 ...

  2. linux alias 别名设置【转载】

    功能说明:设置指令的别名. 语 法:alias[别名]=[指令名称] 形如: alias cp=“cp -i” : 补充说明:用户可利用alias,自定指令的别名.若仅输入alias,则可列出目前所有 ...

  3. 数学战神app(小学生四则运算app)开发需求及进度

    项目名字:“数学战神” 开发环境:Android eclipse 团队名称:战神联盟 团队成员:陈思明,许家豪,王宏财,吴旭涛 在之前的四则运算APP中添加更多的实用功能,并在各种平台推广宣传. 预加 ...

  4. Android动画总结

    本文总结常用属性方法等,详细学习可使用如下郭霖大神文章: Android属性动画完全解析(上),初识属性动画的基本用法 Android属性动画完全解析(中),ValueAnimator和ObjectA ...

  5. PHP使用Redis实现消息队列

    消息队列可以使用MySQL来实现,可以参考博客PHP使用MySQL实现消息队列,虽然用MySQL可以实现,但是一般不这么用,因为MySQL的数据都存在硬盘中,而从硬盘中对MySQL的操作,I/O花费的 ...

  6. PAT L2-001 紧急救援

    https://pintia.cn/problem-sets/994805046380707840/problems/994805073643683840 作为一个城市的应急救援队伍的负责人,你有一张 ...

  7. HTTP Client使用总结

    1.如果服务器使用HTTPS协议,使用HTTPClient的话,需要配以EasySSLProtocolSocketFactory 2.Tomcat对HTTP的Post和Get请求处理是不一样的.Spr ...

  8. k8s master 节点加入到可以调配node节点中的命令

    kubectl taint nodes --all node-role.kubernetes.io/master- 应该就可以了  效果再观察 效果为

  9. php开发APP接口(总结一)

    一.什么是app接口:服务端与客户端的数据交互. 大部分APP接口是通过http协议通信的. http通信的三要素: URL:   通信的地址 Method:通信的方式(get | post | pu ...

  10. yum install 报错[Errno 14] curl#37 - Couldn't open file /mnt/repodata/repomd.xml

    1.然后按照网上的一些修改,先是执行: yum cleam all 然后 yum makecache,问题还是没解决,继续报错. 其实这两条命令就是清空缓存,然后再重新缓存的意思,有时候可能有效. 2 ...