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 }
复制代码

 

posted @   yub4by  阅读(62)  评论(0编辑  收藏  举报
编辑推荐:
· 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 让容器管理更轻松!
点击右上角即可分享
微信分享提示