黑马程序员技术交流社区

标题: 如何获得字节码文件? [打印本页]

作者: 普哥    时间: 2014-7-7 00:17
标题: 如何获得字节码文件?
如何获得字节码文件?

作者: 燿陚√揚葳    时间: 2014-7-7 11:33
本帖最后由 燿陚√揚葳 于 2014-7-7 11:34 编辑

获取class的三种方法:
1.obj,getClass():用于获得对象的类型。通过每个对象都具备的方法getClass来获取,弊端:必须要创建该类对象,才可以调用getClass方法。
2. 类名.class:用于获得指定的类型,传参用。每一个数据类型(基本数据类型和引用数据类型)都有一个静态的属性class。弊端:必须要先明确该类

前两种方式不利于程序的扩展,因为都需要在程序使用具体的类来完成。

3.Class.forName(classname):用于做类加载。使用的Class类中的方法,静态的forName方法。指定什么类名,就获取什么类字节码文件对象,这种方式的扩展性最强,只要将类名的字符串传入即可

注意:Class.forName()返回字节码的两种返回方式:1.曾经加载过已经呆在虚拟机里的,直接返回
2.先加载缓存到虚拟机伦里,以后用的话就不用再加载了。

加载自定义类要写包名.类名     比如:String就写java.lang.String
三中获取方式代码如下:
  1. class Student{
  2. private int x;
  3. public int y;
  4. public String str1="basketball";
  5. public String str2="football";
  6. public String str3="pingpong";
  7. Student(int x,int y){
  8. this.x=x;
  9. this.y=y;
  10. }
  11. public String toString(){
  12. return str1+"***"+str2+"***"+str3;
  13. }
  14. }
  15. public class Demo {

  16. public static void main(String[] args) throws ClassNotFoundException {

  17. Student s=new Student(5,6);
  18. Class st1=s.getClass();
  19. Class st2=Student.class;
  20. Class st3=Class.forName("com.Student");
  21. System.out.println(st2);
  22. System.out.println(st1);
  23. System.out.println(st1==st2);
  24. System.out.println(st1==st3);
  25. }


  26. }
复制代码











欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2