JavaWeb-1.2.1【基础加强:反射之获取Class对象的方式】
1 package com.yubaby.reflect; 2 3 import com.yubaby.domain.Person; 4 5 /* 6 2 反射:框架设计的灵魂 7 8 * 框架:半成品软件。可以在框架的基础上进行软件开发,简化编码 9 * 反射:将类的各个组成部分封装为其他对象,这就是反射机制 10 * 好处: 11 1. 可以在程序运行过程中,操作这些对象。 12 2. 可以解耦,提高程序的可扩展性。 13 */ 14 /* 15 获取Class对象的方式: 16 1. Class.forName("全类名"):将字节码文件加载进内存,返回Class对象 17 多用于配置文件,将类名定义在配置文件中。读取文件,加载类 18 2. 类名.class:通过类名的属性class获取 19 多用于参数的传递 20 3. 对象.getClass():getClass()方法在Object类中定义着。 21 多用于对象的获取字节码的方式 22 结论: 23 同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次, 24 不论通过哪一种方式获取的Class对象都是同一个。 25 */ 26 public class ReflectDemo1 { 27 public static void main(String[] args) throws ClassNotFoundException { 28 Class<?> aClass = Class.forName("com.yubaby.domain.Person"); 29 System.out.println(aClass); //class com.yubaby.domain.Person 30 31 Class<Person> aClass1 = Person.class; 32 System.out.println(aClass1); //class com.yubaby.domain.Person 33 34 Person person = new Person(); 35 Class<? extends Person> aClass2 = person.getClass(); 36 System.out.println(aClass2); //class com.yubaby.domain.Person 37 38 //比较对象(地址值) 39 System.out.println(aClass == aClass1); //true 40 System.out.println(aClass == aClass2); //true 41 42 Class<Student> studentClass = Student.class; 43 System.out.println(studentClass); //class com.yubaby.reflect.Student 44 } 45 } 46 47 class Student { 48 public void sleep(){ 49 System.out.println("sleep..."); 50 } 51 }
1 package com.yubaby.domain; 2 3 public class Person { 4 private String name; 5 private int age; 6 7 public int a; 8 protected int b; 9 int c; 10 private int d; 11 12 public Person() { 13 } 14 15 public Person(String name, int age) { 16 this.name = name; 17 this.age = age; 18 } 19 20 public void setName(String name) { 21 this.name = name; 22 } 23 24 public void setAge(int age) { 25 this.age = age; 26 } 27 28 public String getName() { 29 return name; 30 } 31 32 public int getAge() { 33 return age; 34 } 35 36 @Override 37 public String toString() { 38 return "Person{" + 39 "name='" + name + '\'' + 40 ", age=" + age + 41 ", a=" + a + 42 ", b=" + b + 43 ", c=" + c + 44 ", d=" + d + 45 '}'; 46 } 47 48 public void eat(){ 49 System.out.println("eat..."); 50 } 51 52 public void eat(String food){ //函数重载 53 System.out.println("eat:" + food); 54 } 55 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!