[JAVA]对象与引用、static、反射
来源:互联网 发布:java小游戏开发 编辑:程序博客网 时间:2024/06/01 23:13
1.Point p1=new Point(8,8);
称p1为Point对象的引用
p1引用了一个点的对象,p1在栈内存,Point(8,8)在堆内存。
Point p2=p1;
p2.x=10;
输出p1.x=10;
p2与p1引用了同一个对象
2.静态函数只能访问静态成员
也就是不是静态成员,静态函数不能访问
3.反射给我一个感觉就是它是倒着来的,我们通常调用方法或者属性是"对象.方法/对象.属性"。但是反射是来了一个Method或Field对象,指定好方法或属性后,来哪个对象,执行哪个对象的东西,类似对象附属于方法存在一样。
先记下类的类类型的使用:
public static void main(String[] args) {Class c = "hello".getClass();Method[] ms = c.getMethods();for(int i=0;i<ms.length;i++){System.out.print(ms[i].getReturnType()+" "+ms[i].getName()+" ");Class[] paramsType = ms[i].getParameterTypes();for(int j=0;j<paramsType.length;j++){System.out.print(paramsType[j].getName()+",");}System.out.println();}System.out.println("=======================================");Constructor[] constructors = c.getConstructors();for(int i=0;i<constructors.length;i++){System.out.println(constructors[i].getName());Class[] paramsType=constructors[i].getParameterTypes();for (Class param : paramsType) {System.out.print("("+param.getName());}System.out.println(")");}System.out.println();System.out.println("=======================================");Package packages=c.getPackage();System.out.println(packages.getName());}
开始讨论反射代码:我理解的核心是:指定方法,不同的对象产生不同的输出
方法的反射,这里实现一个标准JavaBean下通过对象和属性名(getter)获得值
User.java: 一个标准的JavaBean=每个属性都有get/set方法,有无参数构造函数
public class User {private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public User(int id, String name, int age) {super();this.id = id;this.name = name;this.age = age;}public User() {super();}}
UserService.java:
import java.lang.reflect.Method;public class UserService {public Object getValueByPropertyName(String propertyName,Object object){String methodName = "get"+propertyName.substring(0,1).toUpperCase()+propertyName.substring(1);Class c = User.class;try {Method method = c.getMethod(methodName, new Class[]{});Object value = method.invoke(object, new Object[]{});return value;} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();return null;} }}
①为了获得方法名,先获得类的类类型
c.getMethod()中第一个参数为函数名,第二个为形参列表,反射多用于参数列表为空的情况
②方法反射的核心:
method.invoke(对象,实参列表);
在这里也就体现了是指定了相同方法,不同对象产生不同值
③返回Object对象
Main:
public static void main(String[] args) {User user1 = new User(1,"Zhangsan",11);UserService us = new UserService();System.out.println((Integer)us.getValueByPropertyName("age", user1));User user2 = new User(2,"Lisi",22);System.out.println((String)us.getValueByPropertyName("name", user2));}输出:
11
Lisi
4.成员变量的反射:
指定变量,变动对象:
/* * String转大写int 加100 */public void changeValue(Object object){Class c = User.class;Field[] fields = c.getDeclaredFields();try {for (Field field : fields) {if(field.getType()==String.class){field.setAccessible(true);String oldValue;oldValue = (String)field.get(object);field.set(object, oldValue.toUpperCase());}else if(field.getType()==int.class){field.setAccessible(true);field.set(object, (Integer)field.get(object)+100);}else{System.out.println();}} }catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}
注意setAccessible(true);
0 0
- [JAVA]对象与引用、static、反射
- java-引用与对象
- JAVA对象与引用。
- 【java】对象与引用
- Java对象与引用
- Java 对象引用与对象
- java 对象与对象引用
- Java中对象与引用
- JAVA对象大小与引用
- Java中对象与引用
- JAVA对象大小与引用
- Java中对象与引用
- Java中引用与对象
- Java中对象与引用
- static成员变量与返回对象的引用
- 关于Java对象与对象引用
- Java 对象与对象引用的区别
- Java对象引用与对象的区别
- android 自定义控件实例
- LeetCode Rotate Image
- 冒泡排序
- 三层之上
- HBase二级索引与Join
- [JAVA]对象与引用、static、反射
- c++的类型转换
- STL 标准模板库 中栈stack 容器的使用
- 学习第一天
- 2.编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面加上行号。在编写这个程序的时候要使用让这个程序能够处理的输入行的长度没有限制
- 【数据结构与算法】递归汉诺塔
- 三、oc中成员变量作用域的学习
- Android开源项目SlidingMenu深入剖析
- hadoop异常之 reduce拉取数据失败 (error in shuffle in fetcher)