栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java学习笔记-反射

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java学习笔记-反射

Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,也有称作“自省”。反射非常强大,它甚至能直接操作程序的私有属性。反射就像一面镜子,它可以在运行时获取一个类的所有信息,可以获取到任何定义的信息(包括成员变量,成员方法,构造器等),并且可以操纵类的字段、方法、构造器等部分。

  • 获取字节码对象 

 Class.forName(“类的全路径”);

类名.class

对象.getClass();

 

public class Person {
    private  String name;
    private  int age;

    private  void  save(int n ,String s){
        System.out.println("保存");
    }

    private void  update(){
        System.out.println("更新");
    }
}



import org.junit.Test;

import java.lang.reflect.Field;
import java.lang.reflect.Method;


public class TetstReflect2 {
    @Test
    public void getFie() throws Exception {
        //获取字节码对象
        Class clazz = Person.class;
        //获取指定的私有属性
        Field df = clazz.getDeclaredField("name");
        System.out.println(df);
        System.out.println(df.getType());
        //获取私有属性的类型
        System.out.println(df.getType().getName());
        //设置获取到的字段对象的属性值
        Object o = clazz.newInstance();
        //设置私有可见的权限
        df.setAccessible(true);
        df.set(o,"张三");//设置属性值
        System.out.println(df.get(o) );//获取属性值


    }
    @Test
    public void getFie2() throws Exception {
        //获取字节码对象
        Class  clazz = Person.class;
       //获取私有属性age
        Field df = clazz.getDeclaredField("age");
        //通过字节码对象创建对象
        Object o = clazz.newInstance();
        //设置私有属性可见权限
        df.setAccessible(true);
        df.set(o,35);
        System.out.println(df.get(o) );

    }

    //测试暴力反射技术获取并执行私有方法
    @Test
    public void getFun() throws Exception {
        //获取字节码对象
        Class  clazz = Person.class;
        //获取指定方法
        Method m = clazz.getDeclaredMethod("save", int.class, String.class);
        //通过反射技术创建对象
        Object o = clazz.newInstance();
        //获取是有方法可见权限
        m.setAccessible(true);
        
        m.invoke(o,66,"测试");
    }
    @Test
    public void getFun2() throws Exception{
        //1.获取字节码对象
        Class clazz = Person.class;
        //通过字节码对象获取指定方法
        Method m = clazz.getDeclaredMethod("update");
        //获取执行私有方法权限
        m.setAccessible(true);
        //创建对象
        Person o = clazz.newInstance();
        //执行方法
        m.invoke(o);
    }
}
日期转换工具类SimpleDateFormat

public class TestDate {
    public static void main(String[] args) throws ParseException {
        Date d1 = new Date();
        System.out.println(d1);
        DateUtils du = new DateUtils();
        String s = du.dateToString("yyyy年MM月dd日 hh:mm:ss", d1);
        System.out.println(s);

        Date d2 = du.stringToDate(s, "yyyy年MM月dd日 hh:mm:ss");
        System.out.println(d2);
    }
}



public class DateUtils {
    public  String dateToString(String format, Date d){
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        String s1 = sdf.format(d);
        return s1;
    }
    public  Date stringToDate(String s,String format) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        Date d1 = sdf.parse(s);
        return d1;
    }

}


import java.text.SimpleDateFormat;
import java.util.Date;

//测试日期转换工具类
public class TestSimpleDateFromat {
    public static void main(String[] args) {
        //创建日期类对象
        Date d1 = new Date();
        Date d2 = new Date();
        //创建日期类转换工具
        SimpleDateFormat sdf = new SimpleDateFormat();
        String s1 = sdf.format(d1);//通过转换工具转换日期
        System.out.println(s1);

        SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
        String s2 = sdf1.format(d2);
        System.out.println(s2);
        System.out.println(d1.getTime());//获取从标准基准时间到现在时间的毫秒值
        System.out.println(d1.getTime()/1000/60/60/24/365);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1040020.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号