本来代码里面是动态类实现,你Constructor constructor=c.getConstructor();这行代码使用了静态类的实现方式,应该会编译不过,因为c.getConstructor()无法在静态编译期间确定类型。
他这个例子中,类名就是类的全名了,不同于我们在idea或者eclipse中的建了很多个包,他demo中几个类都在磁盘的同一个位置,就不存在要通过类的全名转化成文件的路径,去找到对用的class。 args[0]这个代表的就是你传入的是哪个类就是哪个
你 Word 实现或继承了 OfficeAble 了嘛!!!!
也可以继承同一个父类啊 这里实现接口,继承父类都可以
这个只是提醒不是错误,可以直接过。因为newInstance在jdk9之后就放弃不用了,所以会出现这个问题。
看错了,打扰了。
args 是 使用 命令行的参数列表 形如: java 指定的程序名 参数
args[0]即 参数列表的 第一个参数
"Word".equals(args[0]) 即判断 第一个参数是否等于 word
要用动态加载,你这是静态加载去变异了,寻找不到
这条语句的目的是要取得一个对象,但是通过反射获取到的是Object对象,需要强制转换;
关于"接口还有这种操作的吗",不是很懂想问什么
比如spring aop,是用jdk动态代理和cglib动态代理实现的,而动态代理就是基于反射机制的,慕课网上有门课叫《探秘Spring Aop》挺不错的可以看看;至于怎么做Java框架。。。先好好学习吧!
没有输入参数,要在cmd编译代码的时候给命令行参数输入,例如
命令被执行后总是从该文件的 main 函数进入的,在 main 函数中,有一个 String args[] 参数,这就表示在执行某 .class 文件后,是可以对 main 函数传字符串参数的,因此,视频中 java OfficeBetter Excel 即为 args[0] == Excel 。
java OfficeBetter Excel Excel最后的这个Excel就是传到main函数的String[] args中的参数
可能会有CalssCastException
main方法中参数,public static void main(String[] args),利用命令行输入该参数。String类型的数组args,args[0]代表的数组的第一项
对象==比较的是保存在栈内的指向堆的地址,即对象引用
equals()比较堆内的东东
找到原因了 从IDEA里拷贝出来 忘记删掉package了
有没有Import word 这个类啊
用 new,就要在开头import 这个类(全名)才可以,例如:Import word;
编译是在硬盘中进行,加载是在内存中进行
cmd只认gbk格式的,你修改下java的格式GB2312
比如说有猫类和狗类,都继承动物类,执行c.newInstance()以后生成的是哪个类的对象就已经确定了,这时候强转就相当于这样:Cat cat = new Cat(); Animal a = (Animal) cat; a.eat()就调用的是Cat类中的eat(),因为a是从Cat类对象强转过来的,所以调用的是Cat中的eat()
args【0】是个String 类型的参数,,,是main方法的参数
了解了, 谢谢了
args[0]表示的接收的第一个参数,你没看到老师运行程序的时候 java OfficeBetter Excel 这段命令吗?
这里的 Excel就是args[0]
一般使用最新JDK就不会有问题,都是兼容之前的版本的
public T newInstance() 查看API文档返回的是一个泛型的。so,我是这么理解的