能否在Java应用中无需源码调用其他Java代码?(含B.class场景)
仅持有.class文件时调用其中方法的可行性
当然可行,Java本身支持直接基于字节码文件进行编译和调用,完全不需要依赖对应的.java源码。
具体操作步骤:
- 将B.class放置在Java编译器可访问的路径中:可以和A.java放在同一目录,或者放到自定义的classpath目录(比如
lib文件夹) - 在A.java中正常声明并调用B类的方法,前提是你清楚B类的全限定名、可访问方法的签名(包括方法名、参数类型、访问修饰符,比如
public方法才能被外部类调用) - 编译A.java时,确保编译器能找到B.class:
- 若在同目录,直接执行命令:
javac A.java - 若B.class在其他路径(比如
./lib),执行:javac -cp ./lib A.java
- 若在同目录,直接执行命令:
- 运行生成的A.class时,同样要把B.class所在路径加入classpath:
- Linux/macOS下:
java -cp .:./lib A - Windows下:
java -cp .;./lib A
- Linux/macOS下:
注意事项:
- 必须知晓B类的可访问成员信息:比如类的访问修饰符(非public类只能在同包调用)、方法的参数列表、返回值类型、是否抛出受检异常等,否则无法正确编写调用代码
- 如果B类依赖其他第三方类,这些依赖的.class文件也需要加入classpath,否则运行时会抛出
ClassNotFoundException - 无法直接查看B类的内部实现逻辑,但这并不影响调用它的公开方法
内容的提问来源于stack exchange,提问作者Vishnupriya
相关产品推荐
相关产品推荐

