最后
由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!
小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》
}
}
}
运行结果:
无参数构造方法
ben.User@10f87f48
无参数构造方法
ben.User@b4c966a
反射机制灵活性:可以做到不同对象的实例化,
#### []( )资源绑定器:
**java.util包下提供了一个资源绑定器,便于获取属性配置文件的内容,使用此方法时,属性文件必须在类路径下并且属性配置文件必须以.properties结尾。**
示例代码:(2):
import java.util.ResourceBundle;
public class ResourceBundleText {
public static void main(String[] args) {
ResourceBundle bundle=ResourceBundle.getBundle("classinfo2");
String className=bundle.getString("className");
System.out.println(className);
}
}
属性配置文件内容:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200727211155308.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1pwX2luc2lzdA==,size_16,color_FFFFFF,t_70)
运行结果:
ben.User
[]( )三、Field类详解
=======================================================================
### []( )Field类常用方法:
(1)`类<?> getDeclaringClass() 返回表示的类或接口声明的 Field对象表示的领域 类对象。`
(2)`int getModifiers() 返回的 Field对象表示的场java语言修饰符为整数。`
(3)`String getName() 返回的 Field对象表示的字段的名称。`
(4)`类<?> getType() 返回一个 类对象标识声明类型的 Field对象表示的场。`
(5)`String toString() 返回一个描述这个 Field字符串。`
反射Student类中的Field属性
示例代码(3):
Student类:
public class Student {
//Field:字段
public int id ;
private String name;
protected int age;
boolean sex;
public static final double MATH_PI=301415926;
}
测试类:
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
public class ReflectText05 {
public static void main(String[] args) {
try {
Class studenClass=Class.forName("ben.Student");
String className=studenClass.getName();
System.out.println("完整类型:"+className);
String simpleName=studenClass.getSimpleName();
System.out.println("简单类名:"+simpleName);
System.out.println("==============================");
//获取类中的Filed
Field[] fileds=studenClass.getFields();
System.out.println(fileds.length);//1
//取出这个Field
Field f=fileds[0];
String fieldName=f.getName();
System.out.println(fieldName);
//取出所有的Field
Field[] fs=studenClass.getDeclaredFields();
System.out.println(fs.length);//4
System.out.println("=========================");
for (Field field: fs){
//获取属性的修饰符列表
int i=field.getModifiers();
System.out.println(i);
String modfiersString= Modifier.toString(i);
System.out.println(modfiersString);
//获取属性的类型
Class fieldType=field.getType();
//String fNum=fieldType.getName();
String fNum=fieldType.getSimpleName();
System.out.println(fNum);
//获取属性名字
System.out.println(field.getName());
// System.out.println(field);
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
运行结果:
完整类型:ben.Student
简单类名:Student
==============================
2
id
5
=========================
1
public
int
id
2
private
String
name
4
protected
int
age
0
boolean
sex
25
public static final
double
MATH_PI
反射机制进行反编译Student类 !!
示例代码(4):
import ben.Student;
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
/*
反射机制进行反编译!!
*/
public class ReflectText06 {
public static void main(String[] args) {
try {
StringBuilder s=new StringBuilder();
Class studentClass=Class.forName("ben.Student");
// Class studentClass=Class.forName("java.util.Date");
s.append(Modifier.toString(studentClass.getModifiers())+"\t"+"class"+"\t"+studentClass.getSimpleName()+"{\n");
Field[] fields=studentClass.getDeclaredFields();
for (Field field:fields){
s.append("\t");
s.append(Modifier.toString(field.getModifiers()));
s.append(" ");
s.append(field.getType().getSimpleName());
s.append(" ");
s.append(field.getName());
s.append(":\n");
}
s.append("}");
System.out.println(s);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}
运行结果:
public class Student{
public int id:
private String name:
protected int age:
boolean sex:
public static final double MATH_PI:
}
[]( )四、通过反射机制访问java对象的属性
================================================================================
**给属性复制:set获取属性的值:get**
示例代码(5):
Student类:
public class Student {
//Field:字段
public int id ;
private String name;
protected int age;
boolean sex;
public static final double MATH_PI=301415926;
}
测试类:
import java.lang.reflect.Field;
public class ReflectText07 {
public static void main(String[] args) {
try {
Class studentClass=Class.forName("ben.Student");
Object obj=studentClass.newInstance();//obj就是Student对象。(无参构造)
//获取no属性(根据属性的名称获取Field)
Field noField=studentClass.getDeclaredField("id");
//给obj对象的no属性赋值
noField.set(obj,2222 );//给no属性赋值2222
//读取值
System.out.println( noField.get(obj));
Field nameFiled=studentClass.getDeclaredField("name");
//打破封装,反射机制缺点
nameFiled.setAccessible(true);
//赋值
nameFiled.set(obj,"jack");
//获取
System.out.println(nameFiled.get(obj));
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}
运行结果:
2222
jack
[]( )五、通过反射机制调对象的方法
===========================================================================
Object invoke(Object obj, Object… args)
调用底层的方法,这 方法对象表示,对指定对象的指定参数。
**示例代码(6):**
UserService类
public class UserService {
public boolean login(String name, String password) {
if ("admin".equals(name) && "123".equals(password)) {
return true;
}
return false;
}
public void logout(){
System.out.println("退出系统成功!1");
}
}
### 最后
Java架构学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/557bcf314a2819ac8f46be8bc0c8a496.webp?x-oss-process=image/format,png)
> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**
**[需要这份系统化的资料的朋友,可以点击这里获取](https://bbs.csdn.net/topics/618154847)**
if ("admin".equals(name) && "123".equals(password)) {
return true;
}
return false;
}
public void logout(){
System.out.println("退出系统成功!1");
}
}
最后
Java架构学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
[外链图片转存中…(img-NRCvHgeh-1714853834592)]