我是靠谱客的博主 如意天空,最近开发中收集的这篇文章主要介绍java class的创建_Java 加载class和创建对象的三种形式,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Java加载class主要分为以下三种类型:

一、Class cls=Class.forName(“包名.类名”)

Object obj=cls.newInstance();创建对象

二、ClassLoader clsLoader=new MyClassLoader()

Class cls=clsLoader.load("包名.类名")

Object obj=cls.newInstance();创建对象

三、ClassLoader clsLoader=new MyClassLoader()

Class cls=clsLoader.findClass(“路径····类名.class")

Object obj=cls.newInstance();创建对象

class Name {

静态变量

static{

静态域

}

实例变量

{

实例域

}

}

静态域和静态变量总是在类加载的时候执行:1、类加载发生在创建类实例前;2调用类静态方法时会加载类。

三种方式有哪些区别呢?

三种方式的共性:所有class只能连接一次。

方式一:装载完class之后,会立即连接class;连接class会执行class的静态变量区域和静态域。Class.newInstace()会创建类的对象,这时会执行实例变量和实例域。

方式二:只是装载class,并不会连接class;只能装载工程内部的class。Class.newInstace()调用后会先连接class,然后创建类的对象,执行实例变量和实例域。

方式三:只是装载class,并不会连接class;这种方式的特点是可以装载工程外部class文件。Class.newInstace()调用后会先连接class,然后创建类的对象,执行实例变量和实例域。

部分代码:ClassLoader

package textarc;

import java.io.BufferedInputStream;

import java.io.ByteArrayOutputStream;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import javax.imageio.stream.FileImageInputStream;

public class MyClassLoader extends ClassLoader{

@Override

public Class> loadClass(String arg0) throws ClassNotFoundException {

// TODO Auto-generated method stub

return super.loadClass(arg0);

}

@SuppressWarnings("deprecation")

@Override

public Class> findClass(String arg0) throws ClassNotFoundException {

// TODO Auto-generated method stub

byte[] b = null;

try {

b = loadclassData(arg0);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return defineClass("textarc.hh",b, 0, b.length);

}

public byte[] loadclassData(String path) throws Exception{

int n=0;

BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream(path));

ByteArrayOutputStream bos=new ByteArrayOutputStream();

while((n=bufferedInputStream.read())!=-1){

bos.write(n);

}

bufferedInputStream.close();

return bos.toByteArray();

}

}

测试程序:

package textarc;

import java.io.File;

import java.lang.reflect.Method;

import java.util.HashMap;

import java.util.Map;

public class Main {

public static void main(String[] args) {

try {

Class.forName("textarc.hh");

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

MyClassLoader classLoader=new MyClassLoader();

try {

Class cls=classLoader.loadClass("textarc.hh");

cls.newInstance();

//Class cls=classLoader.findClass("D:\workspace_new\textarc\bin\textarc\hh.class");

//cls.newInstance();

} catch (Exception e) {

TODO Auto-generated catch block

e.printStackTrace();

}

}

}

最后

以上就是如意天空为你收集整理的java class的创建_Java 加载class和创建对象的三种形式的全部内容,希望文章能够帮你解决java class的创建_Java 加载class和创建对象的三种形式所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部