反射类加载与垃圾回收&多线程编程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反射类加载与垃圾回收&多线程编程相关的知识,希望对你有一定的参考价值。

类的加载机制

      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对象联系在一起

        线程的同步

             使用同步块和同步方法

        

 

 

                  

 

以上是关于反射类加载与垃圾回收&多线程编程的主要内容,如果未能解决你的问题,请参考以下文章

多线程二:jvm中的主线程&垃圾回收线程

使用多线程和并发编程

第五周总结

java匿名内部类访问局部变量垃圾回收

JAVA编程思想读书笔记--多线程

多线程编程-Executor与ThreadPoolExecutor的使用