Ⅰ 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静态资源(静态方法,静态属性)是程序一运行就加载到jvm中,还是当被调用的时候才进行加载呢
当类第一次被调用时加载(静态方法,静态属性的加载就是类加载) 。
1、类中的静态属性会被加入到类对象(也可以叫做类的模板,是类的描述) 的构造器中,静态方法也会被加入到类对象中。
2、当第一次使用类时,JVM会通过类加载器,加载类对象,从而初始化静态属性,并装入类的方法,包括静态方法和实例方法(方法不会被调用,只是加载,从这个意义上来说,静态方法和实例方法是类似的)。
3、当创建类的实例对象时,JVM会调用类的构造器,从而初始化类的属性。
(2)java的方法的加载扩展阅读:
类(包括静态方法、属性)加载过程:
一、加载。
根据一个类的全限定名(如cn.e.h.test.HelloWorld.class)来读取此类的二进制字节流到JVM内部。
将字节流所代表的静态存储结构转换为方法区的运行时数据结构(hotspot选择将Class对象存储在方法区中,Java虚拟机规范并没有明确要求一定要存储在方法区或堆区中)转换为一个与目标类型对应的java.lang.Class对象。
二、连接。
1、验证。
验证阶段主要包括四个检验过程:文件格式验证、元数据验证、字节码验证和符号引用验证;
2、准备。
为类中的所有静态变量分配内存空间,并为其设置一个初始值(由于还没有产生对象,实例变量将不再此操作范围内);
3、解析。
将常量池中所有的符号引用转为直接引用(得到类或者字段、方法在内存中的指针或者偏移量,以便直接调用该方法)。这个阶段可以在初始化之后再执行。
Ⅲ java普通方法和静态方法的加载(注意是加载)时机相同吗存储方法耗费内存空间吗
静态方法放在Date数据区 可以直接调用 和STATIC 变量一样的 在内存开始加载的时候就有空间了 普通方法是 程序运行到的时候才开始调用直接用
Ⅳ java 闱欐佹柟娉曞彲浠ラ吨杞藉悧閲嶅啓锻
鍙浠ヨ閲嶈浇锛屼笉鍙浠ヨ閲嶅啓銆
闱欐佹柟娉曟槸绫诲湪锷犺浇镞跺氨琚锷犺浇鍒板唴瀛树腑镄勬柟娉曪纴鍦ㄦ暣涓杩愯岃繃绋嬩腑淇濇寔涓嶅彉锛屽洜钥屼笉鑳介吨鍐欍备絾闱为润镐佹柟娉曟槸鍦ㄥ硅薄瀹炰緥鍖栨椂镓嶅崟镫鐢宠峰唴瀛樼┖闂达纴涓烘疮涓涓瀹炰緥鍒嗛厤镫绔嬬殑杩愯屽唴瀛锛屽洜钥屽彲浠ラ吨鍐欍
镓璋挞润镐佸氨鏄鍦ㄨ繍琛屾椂锛铏氭嫙链宸茬粡璁ゅ畾姝ゆ柟娉曞睘浜庡摢涓绫汇 涓扑笟链璇链変弗镙肩殑钖涔夛纴鐢ㄨ瑕佸嗳纭锛岄吨鍐椤彧鑳介傜敤浜庡疄渚嬫柟娉曘备笉鑳界敤浜庨润镐佹柟娉曪纴瀵逛簬闱欐佹柟娉曪纴鍙鑳介殣钘忥纴閲嶈浇锛岀户镓裤
镓╁𪾢璧勬枡锛
濡傛灉瀛愮被涓瀹氢箟镄勯润镐佹柟娉曪纸绫绘柟娉曪级涓庣埗绫讳腑闱欐佹柟娉曪纸绫绘柟娉曪级鍏锋湁鐩稿悓镄勮繑锲炲肩被鍨嬨佹柟娉曞悕銆佹柟娉曞弬鏁扮殑绫诲瀷鍜屼釜鏁板畬鍏ㄧ浉钖岋纴鍒欑О瀛愮被涓镄勮ユ柟娉曗滈殣钘忊濅简鐖剁被涓镄勮ユ柟娉曘傚綋瀛愮被鍒涘缓镄勫硅薄璋幂敤璇ラ殣钘忔柟娉曟椂锛岄粯璁よ皟鐢ㄧ殑鏄瀛愮被涓镄勬柟娉曘
鏂规硶閲嶅啓鏄瑕佹敞镒忔潈闄愮殑闂棰桡纴瀛愮被涓镄勬潈闄愪笉鑳藉皬浜庣埗绫荤殑𨱒冮檺锛屽綋鐖剁被镄勬潈闄愪负private镞讹纴瀛愮被镞犳硶缁ф圹銆备篃灏辨棤娉曚骇鐢熸墍璋撶殑閲嶅啓銆傦纸淇楗扮﹂珮浣庯细private < 榛樿や慨楗扮 < public锛
鍙傝冭祫鏂欐潵婧愶细锏惧害锏剧-鏂规硶閲嶅啓
Ⅳ java中类加载的两种方法是什么
java类有两种方法一种是类方法就是用static修饰的,一种是实例方法,就是没有static修饰的方法