Java中的反射使用以及一些坑(简化版)

基础的理论知识就不写了,直接来些代码实战吧!

package com.Student;

public class Student {
    private String name;
    public long schoolNum;
    Student(String  s,long x){
        this.name=s;
        this.schoolNum=x;
    }
    public void show(){
        System.out.println(name+"  "+schoolNum);
    }
    public static int show(int x,int y){
        System.out.println(x+y);
        return x+y;
    }
}

先是一个需要反射的一个Student类。

反射的具体代码如下:

package com.company;


import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class Main  {

    public static void main(String[] args) {
        try {
            System.out.println("run -1");
            Class StudentClazz=Class.forName("com.Student.Student");
            System.out.println("run 0");
            Constructor ct=StudentClazz.getDeclaredConstructor(String.class,long.class);
            ct.setAccessible(true);
            Object ob=ct.newInstance("曾国庆",123456789);
            System.out.println("run 1");
            Method method=StudentClazz.getMethod("show");
            System.out.println("run 2");
            method.invoke(ob);
            Method method1=StudentClazz.getMethod("show",int.class,int.class);
            method1.invoke(null,6,8);
        }catch (Exception e){
            System.out.println(e.getStackTrace());
        }

    }
}

其中

ct.setAccessible(true);

是因为反射的构造方法它没有声明为 public ,所以这里需要暴力破解一下

运行结果如下:

run -1
run 0
run 1
run 2
曾国庆  123456789
14

当时加 run的标记是因为之前运行不太成功。

首先当时报错为:

警告错误:

Main.java使用了未经检查或不安全的操作。

Information:java: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。

感觉没什么错误但是为什么就是报错呢?

其实这个是因为 泛型的原因

Class StudentClazz=Class.forName("com.Student.Student");

改成:

Class<?> StudentClazz=Class.forName("com.Student.Student");

就不会报错了。

其次当时加run 的TAG是因为一直运行不成功

当时脑残了 。 包名写成了 “com.Student”
哎一大败笔    其实最好的习惯还是不要把包名和类名写成相同的比较好。

至于那个姓名“曾国庆”是谁,这里就不多说,知道是我的一个同学就行了。

0.0

冲冲冲!!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值