① java中类的加载是在什么时候做的
楼上的负责一点好么,类加载是在编译的时候?加载一个类需要用到加载器,
你程序都没运行,jvm都没启动,哪来的加载器,你拿什么去加载一个类?
类加载的时候是运行程序时 它就加载了,至于编译,你用IDE,是你一保存,它就给编译好了。
② java重新加载class文件
Java类的加载是动态的,它并不会一次性将所有类全部加载后再运行,而是保证程序运行的基础类(像是基类)完全加载到jvm中,至于其他类,则在需要的时候才加载。这当然就是为了节省内存开销。
Java的类加载器有三个,对应Java的三种类:
Bootstrap Loader // 负责加载系统类 (指的是内置类,像是String,对应于C#中的System类和C/C++标准库中的类)
|
- - ExtClassLoader // 负责加载扩展类(就是继承类和实现类)
|
- - AppClassLoader // 负责加载应用类(程序员自定义的类)
三个加载器各自完成自己的工作,但它们是如何协调工作呢?哪一个类该由哪个类加载器完成呢?为了解决这个问题,Java采用了委托模型机制。
委托模型机制的工作原理很简单:当类加载器需要加载类的时候,先请示其Parent(即上一层加载器)在其搜索路径载入,如果找不到,才在自己的搜索路径搜索该类。这样的顺序其实就是加载器层次上自顶而下的搜索,因为加载器必须保证基础类的加载。之所以是这种机制,还有一个安全上的考虑:如果某人将一个恶意的基础类加载到jvm,委托模型机制会搜索其父类加载器,显然是不可能找到的,自然就不会将该类加载进来。
我们可以通过这样的代码来获取类加载器:
ClassLoader loader = ClassName.class.getClassLoader();
ClassLoader ParentLoader = loader.getParent();
注意一个很重要的问题,就是Java在逻辑上并不存在BootstrapKLoader的实体!因为它是用C++编写的,所以打印其内容将会得到null。
前面是对类加载器的简单介绍,它的原理机制非常简单,就是下面几个步骤:
1.装载:查找和导入class文件;
2.连接:
(1)检查:检查载入的class文件数据的正确性;
(2)准备:为类的静态变量分配存储空间;
(3)解析:将符号引用转换成直接引用(这一步是可选的)
3.初始化:初始化静态变量,静态代码块。
这样的过程在程序调用类的静态成员的时候开始执行,所以静态方法main()才会成为一般程序的入口方法。类的构造器也会引发该动作。
③ Java中类加载出现在哪个阶段,编译期和运行期 类加载和类装载是一样的吗
使用的类,编译/运行时都会被加载。
加载/装载没有区别,翻译的词汇选择因人而异了
运行 javac /java 时 加上 -verbose 选项就可以看到了。
④ Java类的编译加载
好用啊 没有错误 建议用eclipse或者myeclipse
⑤ 只要正常编译类文件类就会加载吗java类到底是什么时候加载的
除了先把保证程序运行的基础类一次性加载到jvm别的都是用到了才会加载.好像是这样,前几天看的,也没专心记
⑥ JAVA新手,我的JAVA文件编译成CLASS文件后用JDK运行显示找不到或无法加载主类
没有找到主类,并不是这个名能不能用或者能用的关系。
Java在window的dos下执行java的一些命令;
java 表示执行某一个字节码文件
javac 表示编译某一个java文件
首先确定,你要使用java执行的Saloton是已经编译过,并且在当前目录下(或者带上文件路径);
其次你需要确定在Saloton中是否存在主程序的入口方法,也就是我们平时所说的
publicstaticvoidmain(String[]args){}
不然他是找不到程序入口
⑦ java 类加载先后顺序
1.父类静态代码块;
2.子类静态代码块;
3.父类非静态代码块;
4.父类构造函数;
5.子类非静态代码块;
6.子类构造函数;
举例:
public class ExA {
static {
System.out.println("父类静态代码块。");
}
public ExA() {
System.out.println("父类构造函数。");
}
{
System.out.println("父类非静态代码块。");
}
public static void main(String[] args) {
new ExB();
}
}
class ExB extends ExA {
static {
System.out.println("子类静态代码块。");
}
{
System.out.println("子类非静态代码块。");
}
public ExB() {
System.out.println("子类构造函数。");
}
}
执行结果:父类静态代码块。子类静态代码块。父类非静态代码块。父类构造函数。子类非静态代码块。子类构造函数。
⑧ java文件编译完成运行时找不到主类或无法加载Test.java
找不到主类是因为你的类里面没有这个方法:public static void mian(){String[]args}{
}
无法加载可能是因为你的类名和你的文件名不一致导致的
你还有什么不懂得,追问我
⑨ 怎么理解java中的静态加载类和动态加载类
一.什么是动态加载类 什么是静态加载类
Class.forName 不仅表示类的类类型,还代表了动态加载类。编译时加载是静态加载类,
运行时加载是动态加载类。
二.为何要使用动态加载类
我们写了一个程序 并没有写A类和B类以及start方法?
⑩ java程序什么是类加载
你可以了解一下 深入理解java虚拟机,
java类加载 是因为在运行时当它需要引用某个类的时候,会先去加载这个类,就是去读这个class文件到内存里面来,现在还没有创建这个类的实例,
你可以理解为 你写的java代码在编译成class文件后,并没有去执行,或者去引用他,只有程序运行时它将要使用这个类的时候才会去读取这个class文件,这时候叫做类加载,当缓存了这个类文件之后,后面的创建类的时候都会去引用它,因为类加载是运行是加载,所以java代码在运行时是有办法修改的,同样java类加载也允许加载一个远程的class文件,也代表它是支持程序不停止时更新程序代码的。