从头认识java-12.2 Class对象(2)-使用与注意点
2015-12-14 00:00
525 查看
这一章节我们接着上一章节,继续讲述Class对象的使用与注意点。
1.使用例子
输出:
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不接受参数。
正确的代码:
错误的代码:
错误代码会抛异常,输出:
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对象的其他方面。
这一章节就到这里,谢谢。
-----------------------------------
目录
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-12.6 接口与类型信息(怎么绕过接口直接调用类的所有方法)
- 从头认识java-12.2 Class对象(1)-简介
- 从头认识java-13.4 泛型方法的使用
- 从头认识java-11.4 正则表达式(2)-基本语法
- 从头认识java-12.1 为什么需要RTTI(Run-Time Type Identification)?
- 从头认识java-12.2 Class对象(4)-泛化
- 从头认识java-12.5 代理以及动态代理
- 从头认识java-11.5 扫描输入(1)-简介
- 从头认识java-13.1 泛型与容器(容器的演变)
- 从头认识java-12.2 Class对象(3)-.class
- 从头认识java-13.2 利用元组的方式返回多类型对象
- 从头认识java-13.3 泛型接口的使用
- Java_07_01 正则表达式
- Java_07_02 异常处理
- echarts + websocket 解决实时刷新问题
- JAVA并发编程笔记二
- 关于JDK环境配置
- Unable to load configuration struts在联网和没有网路情况下启动异常
- java集合框架-转载
- java反射