Java基础

mac2026-05-24  3

jvm内存中的两大对象:字节码、实例

字节码对象:每个类在加载(将类读取到内存)时都会创建一个字节码对象,且这个对象在JVM内存中是唯一的,此对象中存储的是类的结构信息; 字节码对象的获取方式常用的方式有三种 a)类名.class b)Class.forName(“包名.类名”) c)类的实例对象.getClass(); 说明:字节码对象是获取类结构信息的入口。 类加载时不一定执行静态代码块,可能初始化类中的静态变量,类变量 类初始化类变量会首先执行上面的static变量 //不会加载静态代码块 Class<?> c1 = Object.class; //会加载静态代码块 Class.forName("java.lang.Object"); //(类,初始化,加载器)初始化则加载,不初始化则不加载 Class.forName("java.lang.Object",false,ClassLoader.getSystemClassLoader()); //会加载静态代码块,会执行构造方法 new A().getClass(); //思考 static A a = new A(); static HashMap map; public A() { map.clear(); System.out.println("a"); }

谁负责将类加载到内存中,谁提供加载器 ClassLoader:类加载器,许多框架都会自己重写加载器,按照自己的规则重写

//会执行静态代码块 ClassLoader loader = ClassLoader.getSystemClassLoader(); loader.loadClass("yang.TestObject"); 实例对象: 创建方法: 1)new 2)通过反射:一般先获取字节码对象 对象的作用: 存储数据(变量:类变量 实例变量 参数变量 局部变量) 执行业务逻辑(方法)Java对象的四大特征:封装、继承、多态、组合lrccache public class TestObject<K,V> extends LinkedHashMap<K, V>{ private int max; private LinkedHashMap<String, Integer> list; @Override protected boolean removeEldestEntry(java.util.Map.Entry<K, V> var1) { // TODO Auto-generated method stub return size()>max; } public TestObject(int max) { super(max,0.75f,true); this.max = max; } public static void main(String[] args) throws ClassNotFoundException { TestObject<String, Integer> map = new TestObject<String, Integer>(3); map.put("a", 2); map.put("a1", 21); map.put("a2", 22); map.put("a3", 23); System.out.println(map); } } final 变量初始化一次,static初始化两次 。-XX:+TraceClassLoading:跟踪类加载的过程
最新回复(0)