反这类的构造方法(写框架时才会用到反射类)



package reflet;

import java.util.List;

public class person {
    public String name="hahaah";
    public person()//无参构造函数
    {
        System.out.println("person");
    }
    public person(String name)//有参构造函数
    {
        System.out.println(name);
    }
    public person(String name,int password)//有参构造函数
    {
        System.out.println(name+":"+password);
    }
    private person(List list)//有参构造函数
    {
        System.out.println("person list");
    }

package reflet;

import java.lang.reflect.Constructor;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

//反射类的构造函数,创建类的对象
public class demo {
   //反射构造函数:public person
    @Test
    public void test1() throws Exception
    {
      Class clazz=Class.forName("reflet.person");//加载类
      Constructor c=clazz.getConstructor(null);
      person p=(person)c.newInstance(null);
      System.out.println(p.name);
    }
    //反射构造函数:public person(String name)
    @Test
    public void test2() throws Exception
    {
      Class clazz=Class.forName("reflet.person");
      Constructor c=clazz.getConstructor(String.class);
      person p=(person)c.newInstance("sdqawjuhugbyugdr");
      System.out.println(p.name);
    }
    //反射构造函数:public person(String name,int password)
        @Test
        public void test3() throws Exception
        {
          Class clazz=Class.forName("reflet.person");
          Constructor c=clazz.getConstructor(String.class,int.class);
          person p=(person)c.newInstance("sdqawjuhugbyugdr",45);
          System.out.println(p.name);
        }
        //反射构造函数:private person(List list)
        @Test
        public void test4() throws Exception
        {
          Class clazz=Class.forName("reflet.person");
          Constructor c=clazz.getDeclaredConstructor(List.class);//因为此函数是private类型,所以用getDeclaredConstructor
          c.setAccessible(true);//暴力反射(作用是让私有可以被外界访问)
          person p=(person)c.newInstance(new ArrayList());
          System.out.println(p.name);
        }
        //创建对象的另外一种途径:以下test5等效于test1
        @Test
        public void test5() throws Exception
        {
          Class clazz=Class.forName("reflet.person");
          person p=(person) clazz.newInstance();
          System.out.println(p.name);
        }
}
时间: 2024-08-08 11:28:43

反这类的构造方法(写框架时才会用到反射类)的相关文章

php反射类的使用及Laravel对反射的使用介绍

PHP的反射类与实例化对象作用相反,实例化是调用封装类中的方法.成员,而反射类则是拆封类中的所有方法.成员变量,并包括私有方法等.就如"解刨"一样,我们可以调用任何关键字修饰的方法.成员.当然在正常业务中是建议不使用,比较反射类已经摒弃了封装的概念. 本章讲解反射类的使用及Laravel对反射的使用. 反射 反射类是PHP内部类,无需加载即可使用,你可以通过实例化 ReflectionClass 类去使用它. 方法 这里列举下PHP反射类常用的方法 方法名 注释 ReflectionC

java异常处理:建立exception包,建立Bank类,类中有变量double balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount),当取款的数额大于存款时,抛出InsufficientFundsException,取款数额为负数,抛出NagativeFundsException,如new Bank(100),

建立exception包,建立Bank类,类中有变量double  balance表示存款,Bank类的构造方法能增加存款,Bank类中有取款的发方法withDrawal(double dAmount),当取款的数额大于存款时,抛出InsufficientFundsException,取款数额为负数,抛出NagativeFundsException,如new Bank(100),表示存入银行100元,当用方法withdrawal(150),withdrawal(-15)时会抛出自定义异常. pa

string类的写时才拷贝(Copy-On-Write)

写时才拷贝(Copy-On-Write)的原理是什么? Copy-On-Write,其实是使用了一个计数器.当第一个类构造时,计数器初始值为1,string类的构造函数会根据传入的参数从堆上分配内存,当其他类需要这块内存时,这个计数器自动累加.当有析构函数时,这个计数器会减1,直到当计数器为1时,即最后一个类析构.此时,程序才会真正的delete这块从堆上分配的内存. 2.  string在什么情况下会发生写时才拷贝(Copy-On-Write)? 当string类中发生内存共享且内容发生改变时

想自己写框架(1)

学了PHP也有一段时间了,从大二到现在,一直停留在某个阶段,没前进.大三用了CI 毕业时用ThinkPHP.还是觉得要自己写一个,会比较彻底. 开始看文件,再做具体分析. 按照经验来看,Common是公共文件,Conf是配置文件,Lang是语言文件,Library是核心类,Mode是数据库链接类,Tpl是模板文件 ThinkPHP.php是核心文件,应该管理统一入口. 先从ThinkPHP.php开始吧. 前面一大堆忽略了 // 加载核心Think类require CORE_PATH.'Thin

用CIL写程序:这个叫“慕容小匹夫”的类

前文回顾: <用CIL写程序:你好,沃尔德> <用CIL写程序:写个函数做加法> 前言: 今天是乙未羊年的第一天,小匹夫先在这里给各位看官拜个年了.不知道各位看官是否和匹夫一样,摸键盘的手都已经有点生疏了呢?所以,为了不忘却程序猿的使命,不冷落程序猿最好的伙伴--键盘.匹夫决定来写<用CIL写程序>的最新一篇文章.可是写什么主题呢?之前匹夫也介绍过CIL其实也是面向对象的,所以寻思着大过年的,不如就写一个类,一个用来抽象化小匹夫的类吧,既可以介绍下小匹夫,小匹夫也可以借

应用程序框架实战十二:公共操作类开发技巧(初学者必读)

本文专门为初学者而写,因为很多初学者可能还不了解公共操作类的作用和封装技巧,大部分有经验的程序员都会把自己所碰到的技术问题整理封装成类,这就是公共操作类.公共操作类往往具有一些通用性,也可能专门解决某些棘手问题.公共操作类是应用程序框架的核心,主要目标是解决大部分技术问题.我将在本文介绍封装公共操作类的要点,供初学者参考. 开发公共操作类的原因 很多初学者会奇怪,.Net Framework提供的API相当易用,为何还要多此一举,进行一层封装呢.下面列举封装公共操作类的一些动机. .Net Fr

实现一个Web版的类Metasploit的攻击框架

 这是我现在结题的一个专业实训中的一部分内容,小心翼翼地拿出来分享. 在项目中,攻击模块不仅提供自动化攻击功能,也提供了用户扩展的平台,通过规定编写规则来进行有效的扩展. (1)攻击模块设计 该攻击模块采用命令行模式,设计功能示意图如下: (a)指定exp名称攻击: l全域名扫描 即针对现有的域名全部进行攻击. python safecatcli.py -m exp_name -n [exploit_file_name] -o all l单个目标扫描 即对输入的url或者ip地址载入攻击脚本

《自己动手写框架9》:理想的开源框架与设计原则

理想的开源框架?她应该是小的.简单的,满足Simple Is Beautiful?她应该是成长性好的,随着不断的扩展,她可以越来越丰满?她应该是有良好工具支持的,为什么要花时间做工具可以完成的事情呢??她应该是自组装的,也就是尽可能的脱离配置,而是用一种依赖即可用,取消依赖即消失的全自动处理模式?她应该是模块化的,所有的内容都可以被打入jar包而作为一个整体进行发布,并且能支持热部署的,可以开着车儿换轮胎的?她应该是支持水平部署的,想加服务器就加,想减服务器就减?她应该是有良好知识积累体系的,使

黑马程序员-OC的类的构造方法

构造方法:用来初始化对象的:首先分解一下创建对象的过程: Person *p = [Person new]; // new方法是alloc 和 init 这两个方法的组合: 完整的创建可用对象的过程: 1:分配存储空间:  就是调用的  +alloc 方法,这个方法是类方法,返回的是一个分配好存储空间的 对象: 2:初始化:-init 方法,对象方法,由alloc方法返回的对象调用init对对象进行初始化: 所以创建一个对象的规范和常用的方式:  Person *p = [[Person all