使用.添加属性和使用setattribute的区别 怎么给java对象添加动态添加属性和方法
使用.添加属性和使用setattribute的区别
setAttribute这个方法,在JSP内置对象session和request都有这个方法,这个方法作用就是保存数据,然后还可以用getAttribute方法来取出。
比如现在又个User对象,User curruser = new User("zhangsan", 20, "男")
1,request.setAttribute(“curruser”, curruser)这个方法是将curruser这个对象保存在request作用域中,然后在转发进入的页面就可以获取到你的值,如果你会一些框架的话,那些框架标签也可以获取到,比如struts标签,还有jstl。如果这你都不会的话,那么你可以在jsp页面编写java小脚本来获取:<% User myuser = (User)request.getAttribute("curruser")%>,在jsp页面显示值:<%=myuser.getName()%>。
2,session.setAttribute("curruser", curruser)。这个方法和上面唯一的区别就是作用域,就是在你整个程序启动的时候,如果在session中保存了数据,那么在你这个无论你在哪个页面,在什么时候都可以获取到这个值,全局的,只要你的这个程序是启动的。session默认的过期时间是30分钟,过期无效,可以去修改这个值。
怎么给java对象添加动态添加属性和方法
java是面向对象的语言 , 一个类编译好之后 , 初次被加载进入内存之后 , 就不会更改了 , 如果一定要添加方法和属性,这相当于修改了这个class类型, 可以参考cglib之类的操作java字节码的技术。
jvm虚拟机加载类,是把类的属性和方法全加载了吗?
我来回答一下你的问题:
1、类的加载时机:当这个类被实例化的时候如:new A()或者执行这个类里面的static(静态方法时)如:main方法,这个类才会被加载。你说的30个类它不会一下被加载,只有出现以上2种情况的时候才会加载。当然java.lang这个包里的类会在java虚拟机启动的时候加载(加载是将编译后的.class文件加载)。
2、类里面的属性分为静态的属性,和非静态的属性。
2.1 静态的属性只会加载一次,第一次实例化的时候分配空间,以后再实例化这个类的时候不会再分配内存空间。这个静态属性属于这个类的,供这个类的所有实例共享。
2.2非静态的属性会在每次实例化的时候就会分配内存空间,假如一个类被实例化10次,那么这个属性会分配10次内存空间,并且它只属于当前自己实例,不属于其他的实例对象。
2.3至于方法就是方法被调用的时候才会执行,你说的加载其实在实例化这个类的时候这个方法就被以.class文件加载到虚拟机里了。
3、程序的开始一般是以main方法开始执行的时候就叫程序的开始。
希望我的回答对你有帮助。^_^
java中反射、类加载器、动态代理之间的关系
你最好把结合框架 i/o复习好 还有多线程 线程池和反射 复习好 内加载器和代理 就问一下定义 老师给的现场笔试都是i/o 和集合框架
反射是Java的最重要的底层知识。而动态代理其实质就是依靠反射来实现的。
反射是通过字节码文件对象,将类的字段,方法,构造器等映射成相应的类,并进行各自的操作;
类加载器是通过某个类的.classLoader()方法,将该类的.class文件从硬盘中加载到java虚拟机中,形成字节码文件;
动态代理是为了实现目标类的功能,并添加特有的系统功能,传入类加载器,目标类的接口,以及InvocationHandler接口的实现子类,
(InvocationHandler接口的invoke()方法,要传入代理对象,方法名,方法的参数,在invoke方法中,可以添加特有的系统功能)
然后就可以根据运行时,目标类的不同,以及要实现系统功能的不同,动态生成代理类,来完成相应的功能类的创建;