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. Linux内核设计第十七章笔记

    第十七章 设备与模块 关于设备驱动和设备管理,四种内核成分 设备类型:在所有unix系统中为了统一普通设备的操作所采用的分类 模块:Linux内核中用于按需加载和卸载目标代码的机制 内核对象:内核数据 ...

  2. github的使用心得

    我的github地址:https://github.com/gaino1/test GitHub 是一个用于使用Git版本控制系统的项目的基于互联网的存取服务. GitHub可以托管各种git库,并提 ...

  3. Particle filter for visual tracking

    Kalman Filter Cons: Kalman filtering is inadequate because it is based on the unimodal Gaussian dist ...

  4. java可变参数长度

    一: 在python中 有可变参数*args和万能参数**args参数分别为列表和字典.在java中也有类似的可变参数列表.不过传递进去的是可变参数数组. package com.company; p ...

  5. python 生成器、列表解析式、yield、迭代器

    开局一张图总结关系 一.列表解析式 我们习惯生成列表通过list = [1, 2, 3]的方式.还有一种很方便的列表生成方式 list = [a*2 for a in range(10)],或者lis ...

  6. mysql数据库忘记密码时如何修改

    工具/原料 mysql数据库 cmd命令行 打开mysql.exe和mysqld.exe所在的文件夹,复制路径地址 打开cmd命令提示符,进入上一步mysql.exe所在的文件夹

  7. Linux curl 一例

    root@PC-RENGUOQIANG:~# curl http://kermit:kermit@192.168.66.182:8080/activiti-rest/service/repositor ...

  8. Laravel 5.5 文档 ] 快速入门 —— 安装配置篇

    服务器要求 Laravel 框架对PHP版本和扩展有一定要求,不过这些要求 Laravel Homestead 都已经满足了,不过如果你没有使用 Homestead 的话(那真是一件很遗憾的事情),有 ...

  9. Intel SP处理机以及AMD处理器的一些对比资料

    1. EPYC 与 intel的CPU对比 2. Intel SP处理器参数: 3. AMD处理器参数 4. Intel SP处理器部分参数2 5. Intel SP处理器简单说明 6. intel ...

  10. hive数据类型