Java反射 Constructor类

Java反射 Constructor类

Java通过反射可以获取构造方法,和使用构造方法创造对象。

在网上找了一个比较好理解的例子来弄清楚Constructor类。

public Constructor getConstructor()// 公共构造方法对象
public Constructor[] getConstructors()//所有公共构造方法对象
public Constructor[] getDeclaredConstructors()//所有构造方法对象
public Constructor getDeclaredConstructor()//获取私有构造方法对象
public Constructor<T> getConstructor(Class<?>... parameterTypes)// 参数表示的是:你要获取的构造方法的构造参数个数及数据类型的class字节码文件对象
public void setAccessible(boolean flag)// 值为true则指示反射的对象在使用时应该取消Java语言访问检查。 暴力访问
package fieldtest;public class Student {// 成员变量public String name;// 公共private int age;// 私有// 构造方法public Student() {super();// TODO Auto-generated constructor stub}// 私有构造方法private Student(String name) {this.name = name;}public Student(String name, int age) {super();this.name = name;this.age = age;}// 成员方法(getXxx/setXxx)public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}// 成员方法public void study() {System.out.println("我爱学习java!");}// 私有private void study(String string) {System.out.println("我还爱学习" + string);}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";}
}
import java.lang.reflect.Constructor;public class ConstructorDemo {public static void main(String[] args) throws Exception {// 获取字节码文件对象Class c = Class.forName("fieldtest.Student");// 获取所有构造方法Constructor[] cons = c.getDeclaredConstructors();for (Constructor con : cons) {System.out.println(con);}// 获取单个构造方法Constructor con = c.getConstructor();// 返回的是构造方法对象Constructor con1 = c.getConstructor(String.class, int.class);// 返回的是有参构造方法对象Constructor con2 = c.getDeclaredConstructor(String.class);// 创建对象Object obj = con.newInstance();//使用无参构造方法创建对象Object obj1 = con1.newInstance("x", 1);// 暴力访问con2.setAccessible(true);// 值为true则指示反射的对象在使用时应该取消Java语言访问检查。Object obj2 = con2.newInstance("y");System.out.println(obj.toString());System.out.println(obj1.toString());System.out.println(obj2.toString());}
}/*输出:
public fieldtest.Student(java.lang.String,int)
private fieldtest.Student(java.lang.String)
public fieldtest.Student()
Student [name=null, age=0]
Student [name=x, age=1]
Student [name=y, age=0]*/

通过例子可以总结:

使用反射机制创建对象步骤:

  1. 获得指定类的Class类对象。

    Class c = Class.forName("fieldtest.Student");

  2. 通过反射获取指定参数类型的Constructor类对象。

    Constructor con1 = c.getConstructor(String.class, int.class);

  3. 调Constructor类对象的newInstance()方法传入对应参数值,创建对象。

    Object obj1 = con1.newInstance("x", 1);

例子2:

import java.lang.reflect.*;
public class ClassObj {public static void main(String[] args) {try {Class c5 = Class.forName("java.lang.Integer");//在类中首先获得指定类的Class类对象Constructor construct = c5.getConstructor(int.class);//通过Class类对象的getConstructor获得指定符合参数类型的构造方法。Integer in = (Integer) construct.newInstance(1234);//通过constructor类对象的newInstance()方法传入参数,创建对象in。System.out.println(in.toString());}catch(Exception e) {e.printStackTrace();}}
}
//输出:1234
/*
Integer的toString()源码:private final int value;public Integer(int value) {this.value = value;
}
public String toString() {return toString(value);
}
*/

一些例子代码参考自https://www.jb51.net/article/171123.htm

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql hammerdb,[料理佳餚] 用 HammerDB 來執行資料庫 TPC-C 效能量測

TPC-C 模擬的情境TPC-C 模擬的情境是一個大型的商品批發商&#xff0c;擁有若干個倉庫&#xff0c;每個倉庫擁有 100000 件商品庫存、負責為 10 個地區供貨&#xff0c;每個地區服務 3000 名客戶&#xff0c;每名客戶平均一筆訂單有 10 項商品&#xff0c;所有訂單中約 1% 在其…

使用Linux进行c或c++编程

使用Linux进行C或c语言编程 1.创建名为 HelloWorld 的 c 或者 c 文件 vim HelloWorld.c vim Helloworld.cpp2.然后就进入文本编辑界面 输入i&#xff0c;进入编辑模式。写代码。按esc键&#xff0c;进入命令模式&#xff0c;输入:wq保存并退出文本编辑器。然后可以看见对应位…

如何用php写表单中的年月日,php写的日历程序 - adamboy的个人页面 - OSCHINA - 中文开源技术交流社区...

$weekArr array(Sun,Mon,Tue,Wed,Thu,Fri,Sat);//获取空格&#xff1a;//echo date("D",strtotime("2012-02-07"));function getSpace($month,$year){global $weekArr;if(!$year){$year date("Y");}$firstDay date("D",strtotime($…

Java反射 field

Java反射 field 获取字节码文件对象 Class c Class.forName(“fieldtest.Student”); 通过无参构造方法创建对象obj Constructor con c.getConstructor(); Object obj con.newInstance(); 通过成员变量名,获取单个的成员变量 Field nameField c.getField("name"…

mysql5.7循环,python3.4用循环往mysql5.7中写数据并输出的实现方法

python3.4用循环往mysql5.7中写数据并输出的实现方法来源&#xff1a;中文源码网 浏览&#xff1a; 次 日期&#xff1a;2018年9月2日python3.4用循环往mysql5.7中写数据并输出的实现方法 如下所示&#xff1a;#!/usr/bin/env python# -*- coding:utf-8 -*-# __author__ …

java反射 Method

java反射 Method 获取字节码文件对象 Class c Class.forName("fieldtest.Student");通过无参构造方法创建对象obj Constructor con c.getConstructor(); Object obj con.newInstance();Method m1 c.getMethod(“study”);获取study方法 m1.invoke(obj);使用obj对…

axure 鼠标变成手,Axure教程|鼠标移入移出自动显示与隐藏三级菜单

前几天因工作需要做一个鼠标移入显示隐藏菜单&#xff0c;鼠标移出自动隐藏菜单&#xff0c;做的时候觉得没有什么问题&#xff0c;做完后预览就发现一个很严重的问题&#xff0c;就是鼠标移出一级菜单向二级菜单时二级菜单不显示&#xff0c;或者二级菜单显示三级菜单不显示。…

java与平台无关的原因

Java字节码 Java源程序&#xff08;.java&#xff09;要先编译成与平台无关的字节码文件(.class)&#xff0c;然后字节码文件再解释成机器码运行。解释是通过Java虚拟机来执行的。 java要运行要经过如下步骤 ① Java源文件—->编译器&#xff08;工具&#xff09;—->…

php websocket应用实例,php使用websocket示例详解

下面我画了一个图演示 client 和 server 之间建立 websocket 连接时握手部分&#xff0c;这个部分在 node 中可以十分轻松的完成&#xff0c;因为 node 提供的 net 模块已经对 socket 套接字做了封装处理&#xff0c;开发者使用的时候只需要考虑数据的交互而不用处理连接的建立…

Java集合 Collection

Jdk提供了一些特殊的类&#xff0c;用来保存数量不确定的对象&#xff0c;存储任意类型对象&#xff0c;长度可变。这些类统称为集合。 集合类位于Java.util包中&#xff0c;按存储结构分为Collection单列集合和Map双列集合。 Collection是单列集合的根接口&#xff0c;有两个…

java basic data type,java基本数据类型--Basic Datatypes

Variables are nothing but reserved memory locations to store values. This means that when you create a variable you reserve some space in the memory.---说的好有道理Based on the data type of a variable, the operating system allocates memory and decides what…

Java final修饰符的作用,Java中的final修饰符

1.什么时候可以选择final修饰符如果想让一个类不被其他类继承&#xff0c;不允许在有子类&#xff0c;这时候就要考虑用到final来修饰。2.用final修饰的类首先大家要明白&#xff0c;用final修饰的类是不能被继承的&#xff0c;下面来看一个错误案例。eg&#xff1a;final clas…

Java基础 HashMap的添加 修改 遍历 Map.Entry Map.entrySet()的使用及实例

Java Map Map中不能包含相同的键&#xff0c;每个键只能映射一个值。 HashMap&#xff1a;并不能保证它的元素的顺序&#xff0c;元素加入散列映射的顺序并不一定是它们被迭代方法读出的顺序。 Map.Entry Map.Entry 是Map中的一个接口&#xff0c;他的用途是表示一个映射项…

adminer.php下载,Adminer.php

Adminer.php就是原来的phpMinAdmin&#xff0c;这是用PHP编写的数据库管理工具&#xff0c;支持mysql、mariadb、postgresql、sqlite、MS SQL、Oracle等多种数据库&#xff0c;虽然是一个源码&#xff0c;但是可以使用用户们和密码直接连接到数据库的服务器&#xff0c;既可以对…

windows下如何在命令行里切换到任意目录

切换到C盘中的某个文件夹&#xff0c;比如AppData&#xff0c;可以执行命令cd AppData; 但如果想切换到D盘&#xff0c;输入cd d:是不行的; 如果我们要切换盘符的目录&#xff0c;正确的用法是在cd 和路径中间 增加一个“/d”&#xff0c;如cd /d d: 也可以不用cd指令&#x…

Java基础 系统注解 @Override @Deprecated @SuppressWarnings 使用的方法及原因

Java 系统注解 为什么用&#xff1f;&#xff1a; 好处&#xff1a;使用系统定义的注解&#xff0c;可以在编译时对程序进行检查。 注解用在包、类、字段、方法、局部变量、方法参数等的前面&#xff0c;对这些元素进行说明和注释。 Override Override用来修饰一个方法&am…

java二维数组排序先行后列,数组知识点归纳

◆◆◆一、理解一维数组的定义和应用&#xff0c;了解二维数组和控件数组&#xff1b;1、数组的概念&#xff1a;数组并不是一种数据类型&#xff0c;而是一组相同类型数据的集合。用一个统一的名字(数组名)代表逻辑上相关的一批数据&#xff0c;每个元素用下标变量来区分&…

Java 使用反射处理注解

Java 使用反射处理注解 自定义注解的格式&#xff1a; [public|final] interface 注解名//interface 表明&#xff1a;这是一个自定义注解 {注解元素//注解元素 是无参数的方法 }// 注解元素的格式&#xff1a; 数据类型 注解元素名() [default 默认值]例子&#xff1a; //自…

php面试宝典1000题,【PHP面试宝典1000题】HTTP中的请求头(深圳小美网络科技)

(1)通作一新求抖直微圈用信息头即址工框按都不他移据流。果原箭近第作架量是能用于请求消息中,也能用于响应信息中,但与被传输的实体内容没有关系的信息头,如Data,Pra分浏代刚的学过互解久点维数数请曾房总题屏断果如以气。泉公一实切式时带近享览码开时会进。,后&#xff0c;护…

java基础 通过继承Thread类和实现Runnable接口创建线程

java 创建线程 Java中&#xff0c;线程也是一种对象&#xff0c;但不是任何对象都可以成为线程。 只有实现了Runnable接口或继承了Thread类的对象才能成为线程。 继承Thread类 //格式&#xff1a; class 类名 extends Thread//从Thread类扩展出子类 {属性方法修饰符 run(){…