实现反射,获取Class对象的三种方式: 从上面的运行结果可以看出来,在运行期间一个类只会产生一个 Class 对象。 获取 User 类的变量: 定义四个不同访问权限的变量。 获取公有的变量:getFields 获取所有的变量:getDeclaredFields 调用: 在User中定义一个默认的构造方法: 获取公有变量: 获取私有变量: 这样发现会报错,无法访问私有变量。 加上field.setAccessible(true); 获取公有构造方法: 获取所有构造方法: 调用: 获取公有方法: 获取所有方法: 调用:
// 方法一 User user = new User(); Class class1 = user.getClass(); // 方法二 Class<User> class2 = User.class; // 方法三 try { Class class3 = Class.forName("test.User"); } catch (ClassNotFoundException e) { e.printStackTrace(); }
通过方射获取类信息:
public class User { public Long id; protected String name; String sex; private Integer age; }
访问权限
当前类
同一包
子类
其他包
权限修饰词:public
✔
✔
✔
✔
权限修饰词:protected
✔
✔
✔
×
默认
✔
✔
×
×
权限修饰词:private
✔
×
×
×
Class userClass = Class.forName("test.User"); Field[] fields = userClass.getFields(); for(int i = 0; i < fields.length; i++) { System.out.println(fields[i]); }
Class userClass = Class.forName("test.User"); Field[] fields = userClass.getDeclaredFields(); for(int i = 0; i < fields.length; i++) { System.out.println(fields[i]); }
public User() { this.id = 1L; this.name = "张三"; this.sex = "男"; this.age = 18; }
Field field = userClass.getField("id"); Object object = userClass.getConstructor().newInstance(); field.set(object,1234L); User user = (User)object; System.out.println(user.getId());
Field field = userClass.getDeclaredField("age"); Object object = userClass.getConstructor().newInstance(); field.setAccessible(true); field.set(object,22); User user = (User)object; System.out.println(user.getAge());
构造方法:
public User() { this.id = 1234L; this.name = "张三"; this.sex = "男"; this.age = 18; } private User(String name) { this.name = name; }
Class userClass = Class.forName("test.User"); // 私有 Constructor privateCon = userClass.getDeclaredConstructor(String.class); privateCon.setAccessible(true); User priUser = (User) privateCon.newInstance("aaaa"); System.out.println(priUser.getName()); // 公有 Constructor publicCon = userClass.getConstructor(); User pubUser = (User) publicCon.newInstance(); System.out.println(pubUser.getName());
普通方法:
public User() { this.id = 1234L; this.name = "张三"; this.sex = "男"; this.age = 18; } // 私有 private void getAge() { System.out.println(age); } // 公有 public void getName() { System.out.println(name); }
public static void main(String[] args) { try { Class userClass = Class.forName("test.User"); // 创建新实例 Object obj = userClass.getConstructor().newInstance(); // 公有 Method m1 = userClass.getMethod("getName");//参数1:方法名 m1.invoke(obj); // 私有 Method m2 = userClass.getDeclaredMethod("getAge");//参数1:方法名 m2.setAccessible(true);//解除私有 m2.invoke(obj); } catch (Exception e) { e.printStackTrace(); } }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算