类的加载机制
1.类加载 2.连接 3.初始化
反射
java程序中的对象在运行时会出现两种类型:编译时类型 运行时类型
使用反射查看类信息
1.使用Class.forName() Class c=Class.forName(“全限定类名”);2.调用class属性来获得该类对象的class对象 Class c=类名.class
3.如果有实例对象可以调用getClass()方法返回该对象对应的class对象 class c=对象名.getClass();
获得某个类对应的class对象后就可以调用class对象的方法来获取该对象和该类的真实信息。通过getFields()、getMethods()、getConstructors()方法可以获得class类的public属性、方法、构造器;通过getDeclaredFields()...获得class所包含的所有属性、方法、构造器
使用反射生成并操纵对象
通过class对象获取某个类的属性、方法和构造器后,程序就可以通过Constructor对象调用相应的构造器创建对象,通过field对象、method对象来进行相应的访问修改操作。还可以用newInstance()方法来创建次class对象所表示的类的一个新实例。
垃圾回收
1.垃圾回收的时机 2.对象的finalize()方法
总结:java类文件通过类加载器加载到内存中。类加载器包括根类加载器、扩展类加载器、系统类加载器。此外,Java API还提供了一个ClassLoader抽象类,开发者可以通过继承它的基类来创建自定义的类加载器。
反射:在运行期载入、探知和使用编译器完全未知的类。通过使用java的反射机制,我们可以获取类的信息,并动态创建对象、设定成员变量的值、调用方法以及动态创建和访问数组。
finalize()方法可以帮助我们完成一些释放对象所占用的资源。
多线程编程
java多线程编程相关的核心类和接口主要包括Thread类、Runnable接口、object类,均在java.lang包中。
线程主要方法定义在Thread类中,包括:
特点对象执行的方法: public void start()、public void run()、***setName(String name)、***getName()、setPriority(int priority).......................................................................
静态方法:yield()、sleep(long millisec)、holdsLock(object x)..........................................
Runnable类
Runnable类接口为所有需要线程执行的任务定义了一个公共的规范。只定义了一个run()方法,让我们执行需要的代码。
Object类
wait():无限等待直到其它线程调用相同对象的notify()或者notifyAll()
wait(long timeout):同上再加指定的时间间隔过去
notify():唤醒正在该对象等待的线程
notifyAll():唤醒所有******
线程的创建
1.编写一个继承Thread的类,重写run()方法
2.编写一个实现Runnable的接口,然后将该类的实例与Thread对象联系在一起
线程的同步
使用同步块和同步方法