这一章节我们接着上一章节,继续讲述Class对象的使用与注意点。
1.使用例子
package com.ray.ch11;
public class Test {
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) {
try {
Class<Swimmer> swimmerClass = (Class<Swimmer>) Class
.forName("com.ray.ch11.Swimmer");
Swimmer swimmer = (Swimmer) swimmerClass.newInstance();
// 调用对象的方法
swimmer.say();
swimmer.swim();
// 得到类的名称
System.out.println(swimmer.getClass().getSimpleName());
// 打印接口
for (Class item : swimmer.getClass().getInterfaces()) {
System.out.println(item.getName());
}
// 得到父类的路径
System.out.println(swimmer.getClass().getSuperclass());
// new 父类
Person person = (Person) swimmer.getClass().getSuperclass()
.newInstance();
// 调用父类的方法
person.say();
} catch (ClassNotFoundException e) {
System.out.println("class not found");
} catch (InstantiationException e) {
System.out.println("instantiation");
} catch (IllegalAccessException e) {
System.out.println("illegal access");
}
}
}
interface canSwim {
void swim();
}
class Person {
public void say() {
System.out.println("i am a person");
}
}
class Swimmer extends Person implements canSwim {
public Swimmer() {
}
public Swimmer(int age) {
}
@Override
public void say() {
System.out.println("i am a swimmer");
}
@Override
public void swim() {
System.out.println("i can swim");
}
}
输出:
i am a swimmer
i can swim
Swimmer
com.ray.ch11.canSwim
class com.ray.ch11.Person
i am a person
上面的例子已经展示了大部分Class对象需要用到的东西。但是根据经验来说,一般在平常编程里面是不采取上面的方式,因为维护起来非常麻烦,如果Swimmer名字一改,整个类都不能够正常运行了。
2.注意点
(1)当需要创建Class.forName所对应的类对象的时候必须保证类里面有空的构造器,不然抛异常,因为newInstance不接受参数。
正确的代码:
package com.ray.ch11;
public class Test {
public static void main(String[] args) {
try {
Class<Swimmer> swimmerClass = (Class<Swimmer>) Class
.forName("com.ray.ch11.Swimmer");
swimmerClass.newInstance();
} catch (ClassNotFoundException e) {
System.out.println("class not found");
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
class Swimmer {
public Swimmer() {
}
public Swimmer(int age) {
}
}
错误的代码:
package com.ray.ch11;
public class Test {
public static void main(String[] args) {
try {
Class<Swimmer> swimmerClass = (Class<Swimmer>) Class
.forName("com.ray.ch11.Swimmer");
swimmerClass.newInstance();
} catch (ClassNotFoundException e) {
System.out.println("class not found");
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
class Swimmer {
public Swimmer(int age) {
}
}
错误代码会抛异常,输出:
java.lang.InstantiationException: com.ray.ch11.Swimmer
at java.lang.Class.newInstance0(Class.java:340)
at java.lang.Class.newInstance(Class.java:308)
at com.ray.ch11.Test.main(Test.java:8)
总结:这一章节介绍了Class对象的使用与注意点,下一章节开始将介绍Class对象的其他方面。
这一章节就到这里,谢谢。
-----------------------------------
目录
分享到:
相关推荐
Java-3D游戏引擎与基本游戏Java中使用LWJGL,OpenGL,OpenAL等的3D游戏引擎。 从头开始
从头写React-like框架的工程搭建实现 最近在网上看到了 Build your own React 这篇文章,作者从零开始实现了一个简易类 React 框架,虽然没有过多的优化,但 React 中的核心思想 Concurrent Mode,Fiber ...
视频 https://www.bilibili.com/video/BV1914y1s7hi
从头开始学习Java课程-资料来源PillsInformática。
本资料是UCSF DOCK的使用案例分享的输入资料,将使用DOCK 6.11自带的片段库,使用DOCK/RDKit的 DOCK_D3N功能从头设计分子。便于使用者直接从这部分设计工作开始,不需花时间来准备输入文件。
外卖订餐java源码 你会学到什么 通过 Java 片段的构建块,您将能够立即了解 Java 编程的要点。 你需要什么 勇敢地浏览存储库! 或替代开源 JDK 1.8 版本 截至今天,该存储库已通过测试 Oracle JDK 1.8 OpenJDK 1.8 ...
军工行业2021年度投资策略:而今迈步从头越-20201115-招商证券.pdf
视频 https://www.bilibili.com/video/BV1914y1s7hi
赖世雄英语从头学 下载-附件资源
java实现验证码功能源码 Java Periphery 是一个高性能库,用于用户空间 Linux 中的 GPIO、LED、PWM、SPI、I2C、MMIO 和串行外设 I/O 接口访问。 我没有尝试从头开始构建它并生成 JNI 包装器。 这节省了大量手动编码...
2. 断点续传:项目支持断点续传功能,即使在下载过程中出现意外情况,用户也可以从上次下载的位置继续下载,而不是从头开始。这对于大文件下载非常有用,可以节省时间和网络资源。 3. 线程安全:项目中使用了Java的...
如果您了解一点C或JavaScript,本指南就是从头开始学习Java。 这是一个正在进行的工作,应该在下一个Java LTS(Java 17)发布时准备就绪。 所有代码都在启用预览功能的Java 14上运行。 注意:如果您只希望查看...
从头学XML和Java编程一例通.part2.rar
乙二醇2020年度策略报告:“熊”关漫道真如铁,而今迈步从头越-20191230-光大期货-36页.rar
从头学Android之多媒体--使用MediaPlayer播放音频示例代码
使用Java + Maven + TestNG进行页面对象模型设计的Appium移动测试自动化框架。 框架遵循许多行业最佳实践,并在单个代码库中支持Android和iOS。 在“最高评分的Udemy”课程中,分步说明了从头开始构建此框架的过程...
3D游戏从头编-网上收集,很基础. 第一回:开发环境 第二回:3D基本概念 第三回:第一个D3D程序 第四回:渲染顶点 第五回:渲染索引顶点 第六回:摄象机 第七回:灯光 第八回:纹理 第九回:3D模型(.x)
开发人员零java-Mentorama 在此存储库中,将从头开始插入Java Developer模块的Mentorama课程期间开发的所有练习。
2D-Java-Tile-Game 我第一次进入 Java 世界! 这是一个周末项目,旨在创建一个基于 2D 瓷砖的基本游戏。 一切都是从头开始编写的(从创建一个基本的 JFrame,到制作画布,渲染图形等......)。 在 src 目录中查看...
与服务器位于同一个WiFi网络中的所有其他用户都可以通过运行Client.JAR文件连接到聊天,并使用我制作的高级功能进行通信。 我添加了一个类图和一个详细的Java文档。 随意尝试挑战应用程序,检查错误并复制代码。 ...