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

类的加载机制

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

        线程的同步

             使用同步块和同步方法

        

                  

时间: 2024-10-18 16:52:15

反射、类加载与垃圾回收&多线程编程的相关文章

处理异常、常用类、反射、类加载与垃圾回收、java集合框架

异常处理概述 检查异常:检查异常通常是用户错误或者不能被程序员所预见的问题.(cheched) 运行时异常:运行时异常是一个程序在运行过程中可能发生的.可以被程序员避免的异常类型.(Unchecked)RentimeExeption 错误:实际上,错误根本不是异常,但却是用户或程序员所无法控制的问题. 异常是程序在执行过程中所产生的问题.JVM发生了内存溢出等... 异常处理:method()方法有三种 1 捕获这个异常,不让他沿着调用栈继续向下抛出 2 捕获这个异常,并继续向下抛出 3 从而导

java 面向对象编程-- 第十三章 反射、类加载与垃圾回收

1.狭义JavaBean规范 Javabean必须包含一个无参数的public构造方法,方便通过反射的方式产生对象. 属性必须都是私有的. Javabean必须包含符合命名规范的get和set方法,以便访问Javabean的属性. Javabean应该是可序列化(serializable)的. 2.反射 在编译时,并不清楚应该加载哪个类.类的加载是在运行期间进行的.通过反射,可以对类进行加载.探知.自审. 可以通过对象.getClass()或者通过类名.class或者通过Class.forNam

java虚拟机的垃圾回收机制原理

1.常用的算法: a.引用计数法:为每一个对象配置一个整形计数器,当有一个引用时,计数器+1,引用失效时,计数器-1.计数器为0,进行垃圾回收 存在的问题:A对象引用B,B对象引用A.循环引用,无法清除,引起内存泄漏 java的垃圾回收器没有使用该算法 b.标记-清除算法 分标记阶段和清除阶段. 存在问题:释放后的空间不是连续的.内存分配不连续的空间,工作效率较低 c.复制算法 将内存空间分为两块,每次只使用其中一块,垃圾回收时,将正在使用的内存中存活的对象复制到未使用的内存中,然后,清除使用的

垃圾回收所思所想(一)

编程语言更迭至今,几乎没有人没有用过一门不用垃圾回收的语言,一方面因为C之类的语言内存管理较为困难,更重要的是因为语言越高级,越注重实际的业务逻辑,而关于内存管理的代码频繁夹杂在业务中,并不那么自然. 没有垃圾回收的编程体验#include <stdio.h> #include <stdlib.h> struct node { int value; struct node2* pnode2; }; struct node2 { int value; }; int main() {

java中高级面试题, 虚拟机,JVM调优,垃圾回收,多线程,内存模型

面试问题: 一.Java基础方面: 1.Java面相对象的思想的理解(主要是多态): http://blog.csdn.net/zhaojw_420/article/details/70477636 2.集合:ArrayList,LinkedList,HashMap,LinkedHashMap,ConcurrentHashMap,HashTable,HashSet的底层源码实现原理 3.Java虚拟机 (1)组成以及各部分作用: http://blog.csdn.net/zhaojw_420/a

初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)

JAVA特点: 语法简单,学习容易 功能强大,适合各种应用开发:J2SE/J2ME/J2EE 面向对象,易扩展,易维护 容错机制好,在内存不够时仍能不崩溃.不死机 强大的网络应用功能 跨平台:JVM,字节码 两个命令: javac helloworld.java:将Java文件编译为字节码的.class文件 java helloworld:运行Java程序...??暂时这么认为 数据类型: 普通数据类型:int a=3; 对象数据类型:使用关键字new,String s=new String("

77.JAVA编程思想——模拟垃圾回收

77.JAVA编程思想--模拟垃圾回收 这个问题的本质是若将垃圾丢进单个垃圾筒,事实上是未经分类的.但在以后,某些特殊的信息必须恢复,以便对垃圾正确地归类.在最开始的解决方案中,RTTI 扮演了关键的角色.这并不是一种普通的设计,因为它增加了一个新的限制.正是这个限制使问题变得非常有趣--它更象我们在工作中碰到的那些非常麻烦的问题.这个额外的限制是:垃圾抵达垃圾回收站时,它们全都是混合在一起的.程序必须为那些垃圾的分类定出一个模型.这正是RTTI 发挥作用的地方:我们有大量不知名的垃圾,程序将正

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

1,什么时候使用多线程:当多个代码同事执行的时候就需要用到多线程. 2,jvm本身就是多线程的,因为在程序运行过程中会在堆内存产生很多垃圾,就需要被垃圾回收器进行回收. 3,main函数代码执行时,也在运行着垃圾回收.所以是同时执行的,这就是两个独立的线程来进行控制的. 4,执行垃圾回收的线程,称为垃圾回收线程. 5,执行main函数的线程,称为主线程. 6,创建一个执行路径(线程)的目的就是让单独一个线程去执行指定的代码和其他代码同事执行.这就是创建线程的目的. 7,对于主线程:它的运行代码度

要想学好Java编程,构造器、方法重载、this关键字、垃圾回收机制,这4关一定要过!

有人说,你应该关注时事.财经,甚至流行的电影.电视剧,才有可能趁着热点写出爆文:有人说,你别再写"无聊"的技术文了,因为程序员的圈子真的很小,即便是像鸿洋那样的招牌大牛,文章是那么的干货,浏览量有多少?不到万吧:有人说,你别妄想在写作上面知识变现了,因为你写的文章真的很不优秀,我都不爱看! 我想说,你们说的话我都不爱听!我也懒得反驳,因为我没有成功,也就没有话语权,多说无益.我只想做一名执拗的程序员,静静地写文,哪怕只有一个读者--有时候,做一件事,并不是想要结果,仅仅只是因为心底那种