您的位置:首页 > 编程语言 > Java开发

从头认识java-12.2 Class对象(2)-使用与注意点

2015-12-04 15:53 459 查看
这一章节我们接着上一章节,继续讲述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