首页 > 编程语言 >Java基础 获取 class 对象的三种方式

Java基础 获取 class 对象的三种方式

时间:2023-10-30 09:34:28浏览次数:92  
标签:Java 字节 对象 class 三种 阶段 Student Class

① Class.forName ( "全类名" )   →   最为常用

全类名:包名 + 类名

Class 的首字母是大写的,所以是一个类名,是用来描述字节码文件的。

这个类里面有一个静态方法叫 forName,参数可以传递一个类的全类名,可以获取到参数的字节码文件对象

 

② 类名.class   →   这种方式更多的是 当作参数进行传递

 

③ 对象.getClass ()   →   当我们已经有了这个类的对象时,才可以使用

getClass 是定义在 顶级父类 Object 当中的,所以所有的对象都可以调用这个方法

 

 

了解:

如果我想创建一个类的对象,是分以下几个阶段的:

阶段1:编写 Java 文件(A.java),然后把它编译成 class 字节码文件(A.class)。这个阶段是没有把代码加载到内存当中的,只是在硬盘里面进行的操作,所以这个阶段也叫 源代码阶段。这个阶段我们会用 Class.forName( "全类名" ) 获取到 class 字节码文件的对象

阶段2:运行代码的时候,首先得把类的字节码文件 A.class 加载到内存当中,此时这个阶段叫 加载阶段,我们会用 类名.class 的方式获取到 class 字节码文件的对象

阶段3:继续往下,我们可以在内存当中创建这个类的对象 A a = new A() 。此时叫 运行阶段,这个阶段可以用 对象.getClass() 获取到 class 字节码文件的对象

 

代码示例:

//最为常用的
Class clazz1 = Class.forName("pojo.Student");//clazz1就表示Student这个类的字节码文件的对象
System.out.println(clazz1);

//这种方式 更多的是当作参数进行传递
Class clazz2 = Student.class;
System.out.println(clazz2 == clazz1);//打印结果为true

//当我们已经有了这个类的对象时,才可以使用
Student stu = new Student();
Class clazz3 = stu.getClass();
System.out.println(clazz1 == clazz2);//打印结果为true
System.out.println(clazz3 == clazz2);//打印结果为true

 

标签:Java,字节,对象,class,三种,阶段,Student,Class
From: https://www.cnblogs.com/gagaya2/p/17797060.html

相关文章

  • Java实现分页的方式有哪些?
    1、手动分页不使用任何框架,用limt分页selectxxfromtab_alimt#{pageNo},#{pageSize}2、RowBounds分页(不推荐)这个是内存分页,它的原理是一次性查出所有数据,然后在内存里进行分页,占内存。3、PageHelper分页(推荐)Mybatis分页插件pom依赖:<dependency><groupId>com.g......
  • Java基础 反射
     反射允许对封装类的字段(成员变量)、方法(成员方法)和构造函数(构造方法)的信息进行编程访问  获取字段(成员变量)、成员方法和构造方法的时候,我们不是从Java文件中获取的,而是从class字节码文件当中获取的所以我们首先要先学习如何获取class字节码文件的对象 ......
  • Java项目报错java.lang.UnsupportedOperationException: null 处理
    编写好业务代码后运行项目时报错: 人都麻了!查看控制台信息sql语句,发现原本输出6条结果的,却只查出一条就报错了。查了一下关于:2023-10-29T23:08:23.431+08:00ERROR29156---[nio-8099-exec-1]o.a.c.c.C.[.[.[/].[dispatcherServlet]  :Servlet.service()forservlet......
  • java中方法内的局部变量是在什么时候被创建的
    2023.10.291.不是局部变量在该方法被执行/调用时创建,而是应该为在该变量被声明并赋值时创建,可以理解为“当代码执行到该变量被赋值的代码时才被创建”。栈会为每个方法在运行的时候分配一块独立的栈帧内存区域,栈帧又包含“局部变量表”、“操作数栈”、“动态链接”以及“方法出......
  • pi的三种运算
    1#蒙卡洛特矩中圆算概率2importrandom3importtime4fromtqdmimporttqdm56count=07a=eval(input())8random.seed(125)9data_iter=tqdm(range(a),unit='Data')10fori,_inenumerate(data_iter):11data_iter.set_description('D......
  • javascript的一些API接口的使用
    1.blobhttpURL在编辑器中,有的情况下插入图片,会讲图片转成blob:http://localhost/***的这种形式。这种形式的URL实际数据是存放在浏览器的内存中。这种情况下如何读取这个URL的具体内容呢点击查看代码asyncreadStreamAndEncodeBase64(url){//发送请求并......
  • java 内存分配
    ......
  • java基础漏洞学习----SSTI漏洞
    java基础漏洞学习----SSTI漏洞Velocity模板注入Java中有以下这些常见的模板引擎:XMLTemplate,Velocity,CommonTemplate,FreeMarker,Smarty4j,TemplateEngine其中Velocity在Java中使用较多把以下内容用burpsuite的url编码#set($e="e");$e.getClass().forName("java.lang.Runti......
  • JAVA-10.30
    public/private#关键字public被称之为访问修饰符。public定义的方法表示任何类的任何方法都可以调用,public定义的字段语序程序中任何方法对其进行修改和读取。但是使用public字段会破坏封装,我们会经常需要让类的属性只能被所在的类自身来调用(比如学生类的个人信息,一般只......
  • Java基础 InetAddress
    publicstaticvoidmain(String[]args)throwsException{//address是IP的对象,也是一台电脑的对象InetAddressaddress=InetAddress.getByName("172.18.153.251");System.out.println(address.getHostName());System.out.println(address.getHostAddress()......