net网站开发教程简易微网站模板
news/
2025/9/27 18:34:17/
文章来源:
net网站开发教程,简易微网站模板,个人网页的内容,360建站的应用场景构造器最大的作用:创建对象.
为什么使用反射创建对象,为什么不直接来new呢?
在框架中,提供给我们的都是字符串.
-----------------------------------------------------------
使用反射创建对象:
步骤: 1);找到构造器所在类的字节码对象. 2):获取构造器对象. 3):使用反射…构造器最大的作用:创建对象.
为什么使用反射创建对象,为什么不直接来new呢?
在框架中,提供给我们的都是字符串.
-----------------------------------------------------------
使用反射创建对象:
步骤: 1);找到构造器所在类的字节码对象. 2):获取构造器对象. 3):使用反射,创建对象
-----------------------------------------------------------
ConstructorT类:表示类中构造器的类型,Constructor的实例就是某一个类中的某一个构造器
常用方法:
publicT newInstance(Object... initargs):如调用带参数的构造器,只能使用该方式. 参数:initargs:表示调用构造器的实际参数 返回:返回创建的实例,T表示Class所表示类的类型
如果:一个类中的构造器是外界可以直接访问,同时没有参数.,那么可以直接使用Class类中的newInstance方法创建对象. public Object newInstance():相当于new 类名();
调用私有的构造器: 注意java.lang.IllegalArgumentException: wrong number of arguments表示如果你想获取的构造器为private那么通过getConstructor是会报上面的异常改为getDeclaredConstructor 访问私有的成员:
必须先设置可访问的
对象setAccessible(true)代码
package com.test;import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.Date;
import java.util.Scanner;public class Main {//获取指定的一个构造器public Main(){System.out.println(我是Main类无参的构造器);}public Main(int num){System.out.println(num);}private Main(String statement){System.out.println(我是带有一个String类型的参数的构造器 statement);}private Main(String str, int num){System.out.println(我是带有两个参数的构造器);}public static void main(String[] args) throws Exception {System.out.println(-----------反射调用构造器创建对象----------------);//1:获取构造器所在类的字节码对象ClassMain clz Main.class;//2:获取clz对象中所有的构造器ConstructorMain con clz.getDeclaredConstructor(String.class);//3.使用反射创建对象//由于main(String..)为私有的因此设置访问权限con.setAccessible(true);String str hello;con.newInstance(str);}
}练习代码保存
package com.test;import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.Date;
import java.util.Scanner;public class Main {//获取指定的一个构造器public Main(){System.out.println(我是Main类无参的构造器);}public Main(int num){System.out.println(num);}private Main(final String statement){System.out.println(我是带有一个String类型的参数的构造器);}private Main(String str, int num){System.out.println(我是带有两个参数的构造器);}private static void getAll(){//1:获取构造器所在类的字节码对象ClassMain clz Main.class;//2:获取clz对象中所有的构造器Constructor?[] cs clz.getConstructors();System.out.println(cs.length);for (Constructor? c : cs) {System.out.println(c);}cs clz.getDeclaredConstructors();System.out.println(cs.length);for(Constructor? c : cs){System.out.println(c);}}private static void getOne() throws NoSuchMethodException, SecurityException{//1:获取构造器所在类的字节码对象ClassMain clz Main.class;//2:获取clz对象中所有的构造器//需求1:获取public Main()ConstructorMain con clz.getConstructor();System.out.println(con);//需求2:获取public Main(String statement)con clz.getDeclaredConstructor(String.class);System.out.println(con);//需求3:获取private Main(String str, int num)con clz.getDeclaredConstructor(String.class, int.class);System.out.println(con);}public static void main(String[] args) throws Exception {System.out.println(---------类的实例------------------);//需求1:获取java.util.Date类的字节码对象//方式1:使用class属性Classjava.util.Date clz1 java.util.Date.class;//方式2:通过对象的getClass方法获取getClass是Object类中的方法java.util.Date date new java.util.Date();Class? clz2 date.getClass();//方式3:通过Class类中的静态方法foeName(String className)Class? clz3 Class.forName(java.util.Date);System.out.println(clz1\nclz2\nclz3\n);System.out.println(----------获取类的构造器-----------------);getOne();System.out.println(-----------获取类的所有的构造器----------------);getAll();System.out.println(-----------反射调用构造器创建对象----------------);//1:获取构造器所在类的字节码对象ClassMain clz Main.class;//2:获取clz对象中所有的构造器ConstructorMain con clz.getDeclaredConstructor(String.class);//3.使用反射创建对象//由于main(String..)为私有的因此设置访问权限con.setAccessible(true);String str hello;con.newInstance(str);}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/919797.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!