「java动态创建」java动态创建定时任务

博主:adminadmin 2023-03-18 23:45:10 571

本篇文章给大家谈谈java动态创建,以及java动态创建定时任务对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

JAVA中 静态,动态创建数组的区别,联系?

区别:

1,数组创建时间不同,静态的是一定义出来就创建了,动态的则是定义时不创建,使用时才创建,一定意义上节省了内存空间。

2,使用场景不同,一开始就知道数组长度的使用静态初始化,反之,动态初始化。

联系:

其实没有什么联系,最恰当的方法用在最适合的场景里就行了

java如何动态创建ArrayList并给其赋值

1、ArrayList是动态数组,List是一个接口,不能实例化,需要实例化一个ArrayList;

List list = new ArrayList();

2、使用list .add(任何对象);就可以进行添加了。代码如下:

bean类

package com.whn.bean;

public class ListBean {

private String name;

private String pwd;

public void setName(String name) {

this.name = name;

}

public String getName() {

return name;

}

public void setPwd(String pwd) {

this.pwd = pwd;

}

public String getPwd() {

return pwd;

}

}

测试类package com.whn.test;

import com.whn.bean.ListBean;

import java.util.ArrayList;

import java.util.List;

public class ListTest {

//测试

public static void main(String[] args) {

ListListBean list = new ArrayListListBean();//实例化一个arrayList

//添加

for(int i=10;i20;i++){

ListBean listBean = new ListBean();

listBean.setName("name"+i);

listBean.setPwd("pwd"+i);

list.add(listBean);//把listBean添加到arrayList中

}

//把数据取出来

for(ListBean lb:list){

System.out.println(lb.getName());

System.out.println(lb.getPwd());

}

}

}

如何在Java中动态创建一个类

package demo;

//使用反射

//Class.forName(className)).newInstance()

class Reflect {

static {

System.out.println("动态创建Reflect类,这是静态代码块");

}

public void speak() {

System.out.println("动态创建Reflect类");

}

}

public class ReflectDemo {

public static void main(String[] args) throws Exception {

Class? Demo = Class.forName("demo.Reflect");

Reflect test = (Reflect) Demo.newInstance();

test.speak();

}

}

测试结果:

动态创建Reflect类,这是静态代码块

动态创建Reflect类

java 可以动态创建 属性字段么

可以的,你用 javassist, cglib 或者更为底层的工具 ASM 都是可以。

ASM 的话相对复杂一些,参考代码:

下面这个是用 ASM 工具为 Student 类添加一个 public String 类型的 address 属性:

1,需要添加属性的原始类:Student.java

Java code?

public class Student {

private int age;

private String name;

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

}

2,添加属性的适配器:AddFieldAdapter.java

Java code?

import org.objectweb.asm.ClassAdapter;

import org.objectweb.asm.ClassVisitor;

import org.objectweb.asm.FieldVisitor;

public class AddFieldAdapter extends ClassAdapter {

private int accessModifier;

private String name;

private String desc;

private boolean isFieldPresent;

public AddFieldAdapter(ClassVisitor cv, int accessModifier, String name, String desc) {

super(cv);

this.accessModifier = accessModifier;

this.name = name;

this.desc = desc;

}

@Override

public FieldVisitor visitField(int access, String name, String desc,

String signature, Object value) {

if (name.equals(this.name)) {

isFieldPresent = true;

}

return cv.visitField(access, name, desc, signature, value);

}

@Override

public void visitEnd() {

if (!isFieldPresent) {

FieldVisitor fv = cv.visitField(accessModifier, name, desc, null, null);

if (fv != null) {

fv.visitEnd();

}

}

cv.visitEnd();

}

}

3,添加属性的工具 AddField.java

Java code?

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import org.objectweb.asm.ClassAdapter;

import org.objectweb.asm.ClassReader;

import org.objectweb.asm.ClassWriter;

import org.objectweb.asm.Opcodes;

public class AddField {

private Class clazz = null;

private ClassReader cr = null;

private ClassWriter cw = null;

private ClassAdapter ca = null;

private File classFile = null;

private final static String CLASS_FILE_SUFFIX = ".class";

public AddField(Class clazz) {

this.clazz = clazz;

}

/**

* 添加一个 public 的类成员

* @param fieldName 类成员名

* @param fieldDesc 类成员类型描述

*/

public void addPublicField(String fieldName, String fieldDesc) {

if(cr == null) {

try {

cr = new ClassReader(clazz.getCanonicalName());

} catch (IOException e) {

e.printStackTrace();

}

cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS);

}

if(ca == null) {

ca = new AddFieldAdapter(cw, Opcodes.ACC_PUBLIC, fieldName, fieldDesc);

} else {

ca = new AddFieldAdapter(ca, Opcodes.ACC_PUBLIC, fieldName, fieldDesc);

}

}

/**

* 将字节码写入类的 .class 文件

*

*/

public void writeByteCode() {

cr.accept(ca, ClassReader.SKIP_DEBUG);

byte[] bys = cw.toByteArray();

OutputStream os = null;

try {

os = new FileOutputStream(getFile());

os.write(bys);

} catch (IOException e) {

e.printStackTrace();

} finally {

try {

os.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 获得类文件的 File 对象

* @return

*/

private File getFile() {

if(classFile == null) {

StringBuffer sb = new StringBuffer();

sb.append(clazz.getResource("/"))

.append(clazz.getCanonicalName().replace(".", File.separator))

.append(CLASS_FILE_SUFFIX);

classFile = new File(sb.substring(6));

}

return classFile;

}

}

java用字符串动态创建对象

/**

* 根据传入的类名和值,动态构造该类的实例

*

* @param _sClassName

* 要构造的类名 如:java.lang.String

* @param _sRealValue

* 要创建的对象的值,比如“wuguowei”

* @return 返回String对象,即值为“wuguowei”的字符串

* @throws Exception

*/

private Object getAttributeObject(String _sClassName, String _sRealValue)

throws Exception {

//1.加载类对象

Class attrObjClass = Class.forName(_sClassName);

//2.如果是Long类

if (attrObjClass.isInstance(new Long(0))) {

return new Long(_sRealValue);

}

//3.如果是Integer类

if (attrObjClass.isInstance(new Integer(0))) {

return new Integer(_sRealValue);

}

//4.其他类型……

//5.返回当前类的实例对象

return attrObjClass;

}

java动态创建中的动态是什么意思

java中的动态就是说服务器返回给不同的客户端的数据是不一样的,不像html,html本身写的代码和运行后的代码是相同的,而java中的jsp就不同,你写的代码是相同的,但是根据客户端的具体请求,返回的是不同的。

java动态创建的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java动态创建定时任务、java动态创建的信息别忘了在本站进行查找喔。