这个也能实现的,这就得利用java的动态编译,java中可以利用代码临时生成java文件,并且执行编译,运行,但这个有一点麻烦,还要用到java中的反映机制
apache的commons-beanutils包中就有这样的方法,hibernate中映射类中的get与set方法是存在的最好不要用临时生成java文件,动态编译
Java静态方法是不能调用动态方法的,原因如下:\x0d\1因为静态方法和动态方法在内存中的位置不一样,静态方法的地址空间在加载类的时候就确定,而动态方法的地址空间在生成类实例的时候确定\x0d\2静态方法在程序初始化后会一直贮存在内存中,不会被垃圾回收器回收,\x0d\ 非静态方法只在该类初始化后贮存在内存中,当该类调用完毕后会被垃圾回收器收集释放。\x0d\3静态方法在初始化类时初始化,并分配内存;动态方法只有先创建类的实例对象后,才能调用动态方法
没太理解你要求的 实现但一般这种动态获取类信息 在java中都是通知反射机制实现的
Java的反射API(Reflection API)Class类:要正确使用Java反射机制就得使用javalangClass这个类。它是Java反射机制的起源。当一个类被加载以后,Java虚拟机就会自动产生一个Class对象。通过这个
Class对象我们就能获得加载到虚拟机当中这个Class对象对应的方法、成员以及构造方法的声明和定义等信息。
反射API用于反应在当前Java虚拟机中的类、接口或者对象信息
功能:(Object object = new Object(),下面以对象object进行说明)
1) 获取类的Class对象
如果在运行时一个类的实例已经得到,你可以使用
Class c = 对象名getClass();例: Class c = objectgetClass();Class s = objectgetSuperclass();
如果你在编译期知道类的名字,你可以使用如下的方法Class c =java awt Buttonclass; 或者Class c = IntegerTYPE;
如果类名在编译期不知道, 但是在运行期可以获得, 你可以使用下面的方法Class c = ClassforName(“类的全路径”);
2) 获取类的Fields ,对Field进行赋值
Field[] fus = objectgetClass()getDeclaredField();
Field fu = objectgetClass()getDeclaredField(fieldName);//获取对象object的名称为fieldName的属性域。
fusetAccessible(true) ;//设置属性域的访问属性
fuset(object,val); //设置object对象的属性值
3) 获取类的Method
Method[] ms= objectgetClass()getDeclaredMethods()
4) 获取类的Constructor
5) 新建类的实例
(A)通过Class<T>的函数newInstance
(B)通过Constructor对象的方法newInstance
在面向对象中,类与类之间的关系有泛化,依赖,关联,聚合,组合几种。
其中,聚合和组合都属于关联。
在具体编程中:
依赖表现为如果A类依赖于B,则B体现为A的局部变量,方法参数或静态方法的调用。
eg:
class B{
Static void function1(){};
void function2(){};
}
public class A{
public static void main(String[] args){
Bfunction1();//A类中调用了B类的静态方法
}
}
聚合和组合都属于关联,很难区分,但是只要记住一点,区分它们就容易多了:
处于聚合关系的两个类生命周期不同步,则是聚合关系;处于组合关系的两个类的生命周期同步;
eg:
聚合关系,当A创建的时候,B不一定创建;当A消亡时,B不一定消亡。
class A{
private B;
}
class B{
}
组合关系,当创建一个A对象时,也会创建一个B对象;当A对象消亡时,作为A的属性的B对象也会消亡。
class A{
private b=new B();
}
class B{
}
1、首先打开手机中的QQ软件,进入手机qq的首页。
2、其次在屏幕上向左滑动一下,可以看到自己的个人信息。
3、最后头像上面的这个就是可以设置土味情话墙,进入之后点击屏蔽即可。
欢迎分享,转载请注明来源:表白网
评论列表(0条)