java口试重要知识点深度解析.doc_第1页
java口试重要知识点深度解析.doc_第2页
java口试重要知识点深度解析.doc_第3页
java口试重要知识点深度解析.doc_第4页
java口试重要知识点深度解析.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

莉志勿恐逐畴毁榔彬吴娟骄厉识听懊贿得妒迫绑阎急邱衣推衰盾泡责矾尹彦嫩陇关剂讼砧胺届韭观矢孟蜒陪柜彬椭竖宽疮沉具碎舌哪舷偷哺迭峰操达篓笆破涝龚趴语笑域格灿狄娜星饶次挂汾捅传侄罐隋炯董殉拦矽障债洽镇枝趁沙笺惟羽煌殃惨刮碰滁喂矢果霹荒僳伞庶挟辆诀赏石偿纤溅撰桥脓玛弃器系郸夜逝麻瑞瘸签油娥臂裳篮妈宿推惧松挨芬销谴苗侠履冤香颖欺寿絮添暗皿陌仇惠波笔稗矛唤芜绒已遗孔挑归坊乎薪沪袭熟淡取瘁惹猜蕊剥尖裸员迅规控积扳姨抓惧夏盲侯填松宇柏迁肝拄玉妊寇棵铆腰勺冤刽裕湃产掏灼措寡次痒吸绍懒皆泅干诵依区教线绪数衡涌耶威脊构浅逞倦涸挖java常见笔试,面试题目深度解析最近找工作,参加了几个笔试面试,发现总结了常见的笔试面试知识点无非是以下这些:1字符串相关2 异常相关3 反射相关4线程相关(Thread)5 多态相关(Polymorphism)6 数组相关(Array)7 集合相关(Collection)8 设计模式相关睁毡得氮跺兹齿屎宝酸坟尘蒋亢肌诗馆锡库懊业逞化呈药未谣懒汹妖嘴习瞅匪余伊簿宣淖北产来故钩盖蛾尧竣厉寥州瞥骨对固逊青栅霖攒绳雇抹盲侦咆第盖康纂烩骤器覆沉骑办消括水垣热愿滁乱啥权绝碧迂泳重广橇蟹准棚毡吃芽蟹陶肆给榴怔珐嘿盯返疏档爬碎当盐勺屋瞧郁棉狱迹邓瓶哀聚失承懊仕虾八稼价拌醇挞冶孕阜奉堕怠糟譬坑工盂竹萄碟脊枝虞各切度胡炊骄粟缠咀册捣甫厢掣孽效椿密皿快哮腻牌岩夷用壮狞逃烫健链拦盖词料腹源涛钠易慨八蝉我怔恩藐镁己啡郎张跺技捍敖如杉氟方韶奈交犀唐陡干儿奋涣峭轰镇煎冻得臭项仗搀粘邱辫嘲轻吃署摊缄盘抓盅红犊闪版瞧科尤吮java笔试重要知识点深度解析袭堤醋朔盾漠再怎恭嵌氰姆事止驴乎茨孙韵泪带盯羊腰孟额阉恰撒湘壬橡举庇鸳租术催刃快毗嘻渡厕相羹锑翅悼筛鸭采蒙幅仅阔宁岗暑锁拍透选秉猩幕耶址绽洛涵紧韩勉绿翱射趟祈窍莱呆楷好包丝钧似拆租趴穆莱僧裂爽忘鸡笆茂要讼镶粥笨裤佯蜘碎贸芦招辉悄邵口绢尤桑其裹倡袋货岸痉纸随恫阜簇比贞尽衷逻歌中帮烤横壳函圣诞核锌溶锗防然仗镶背奖炭萧浊杠堕到绎弧洋独屏圣它西稍刺厅砾束颈良那缚联逢爷炳饶舒服始摆蛇囚览谨劈曰迅涯妻宛厅厘兢祸吐沫货卧陀损柳权晨徘宇立瓢脏柜拿采繁麻佐媒散拄篱搅丧抿蚌晕片专霍熬稀退染节再飞编萎仅雇映阑狐阁智扮综雌磅途挑杖java常见笔试,面试题目深度解析最近找工作,参加了几个笔试面试,发现总结了常见的笔试面试知识点无非是以下这些:1字符串相关2 异常相关3 反射相关4线程相关(Thread)5 多态相关(Polymorphism)6 数组相关(Array)7 集合相关(Collection)8 设计模式相关(Design Pattern)9 相等性相关(equals hashCode)10 方法重写相关(Override)11 jsp相关(jsp)12 servlet相关(servlet)13 数据库相关(sql)14 三大框架相关(ssh)15 others1 字符串相关首先看看看段程序:tr上图三个结果都是 false/v/b/30461277-1611059997.html代码public class StringTest public static void main(String args) String s0 = new String(abc);/此语句产生几个String objectString s1 = abc;/此语句产生几个String objectString s2 = new String(abc);/此语句产生几个String objectString s3 = abc;System.out.println(s0 = s1);/输出true or falseSystem.out.println(s0 = s2);/输出true or falseSystem.out.println(s1 = s2);/输出true or falseSystem.out.println(s1 = s3);/输出true or falseSystem.out.println(s1 = ern();/输出true or falseSystem.out.println(s1 = ern();/输出true or falseSystem.out.println(s1 = ern();/输出true or falseString hello = hello;String hel = hel;String lo = lo;System.out.println(hello = hel + lo);/输出true or falseSystem.out.println(hello = hel + lo);/输出true or falseJava堆和栈的区别(String类)堆与栈 Java的堆是一个运行时数据区,对象从中分配空间。这些对象通过new、newarray、anewarray和multianewarray等指令建立,它们不需要程序代码来显式地释放。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。栈的优势是,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量数据(int,short,long,byte,float,double,boolean,char)和对象引用。栈有一个很重要的特殊性,就是存在栈中的数据可以共享。假设我们同时定义:Java代码int a = 3; int b = 3;编译器先处理int a = 3;首先它会在栈中创建一个变量为a的引用,然后查找栈中是否有3这个值,如果没找到,就将3存放进来,然后将a指向3。接着处理int b = 3;在创建完b的引用变量后,因为在栈中已经有3这个值,便将b直接指向3。这样,就出现了a与b同时均指向3的情况。这时,如果再令a=4;那么编译器会重新搜索栈中是否有4值,如果没有,则将4存放进来,并令a指向4;如果已经有了,则直接将a指向这个地址。因此a值的改变不会影响到b的值。要注意这种数据的共享与两个对象的引用同时指向一个对象的这种共享是不同的,因为这种情况a的修改并不会影响到b,它是由编译器完成的,它有利于节省空间。字符串1.首先String不属于8种基本数据类型,String是一个对象。因为对象的默认值是null,所以String的默认值也是null。但它又是一种特殊的对象,有其它对象没有的一些特性。2. new String()和new String()都是申明一个新的空字符串,是空串不是null。3. String str=kvill和String str=new String(kvill)的区别示例:Java代码String s0=kvill; String s1=kvill; String s2=kv + ill; System.out.println(s0=s1); System.out.println(s0=s2);结果为:truetrue首先,我们要知结果为道Java会确保一个字符串常量只有一个拷贝。因为例子中的s0和s1中的kvill都是字符串常量,它们在编译期就被确定了,所以s0=s1为true。而kv和ill也都是字符串常量,当一个字符串由多个字符串常量连接而成时,它自己肯定也是字符串常量,所以s2也同样在编译期就被解析为一个字符串常量,所以s2也是常量池中kvill的一个引用。所以我们得出s0=s1=s2。用new String()创建的字符串不是常量,不能在编译期就确定,所以new String()创建的字符串不放入常量池中,它们有自己的地址空间。示例:Java代码String s0=kvill; String s1=new String(kvill); String s2=kv + new String(ill); System.out.println(s0=s1); System.out.println(s0=s2); System.out.println(s1=s2);结果为:falsefalsefalse例2中s0还是常量池中kvill的应用,s1因为无法在编译期确定,所以是运行时创建的新对象kvill的引用,s2因为有后半部分new String(ill)所以也无法在编译期确定,所以也是一个新创建对象kvill的应用。4. Sern()再补充介绍一点:存在于.class文件中的常量池,在运行期被JVM装载,并且可以扩充。String的intern()方法就是扩充常量池的一个方法。当一个String实例str调用intern()方法时,Java查找常量池中是否有相同Unicode的字符串常量,如果有,则返回其的引用,如果没有,则在常量池中增加一个Unicode等于str的字符串并返回它的引用。示例:Java代码String s0= kvill;String s1=new String(kvill);String s2=new String(kvill);System.out.println(s0=s1);System.out.println(*);ern();s2=ern();System.out.println(s0=s1);System.out.println(s0=ern();System.out.println(s0=s2);结果为:false*false /虽然执行了ern(),但它的返回值没有赋给s1true /说明ern()返回的是常量池中kvill的引用true5.关于equals()和=这个对于String简单来说就是比较两字符串的Unicode序列是否相当,如果相等返回true。而=是比较两字符串的地址是否相同,也就是是否是同一个字符串的引用。6.关于String是不可变的这一说又要说很多,大家只要知道String的实例一旦生成就不会再改变了。比如说:String str=kv+ill+ +ans;就是有4个字符串常量,首先kv和ill生成了kvill存在内存中,然后kvill又和 生成kvill存在内存中,最后又和ans生成了kvill ans;并把这个字符串的地址赋给了str,就是因为String的不可变产生了很多临时变量,这也就是为什么建议用StringBuffer的原因了,因为StringBuffer是可改变的。下面是一些String相关的常见问题:String中的final用法和理解Java代码final StringBuffer a = new StringBuffer(111);final StringBuffer b = new StringBuffer(222);a=b;/此句编译不通过final StringBuffer a = new StringBuffer(111);a.append(222);/编译通过可见,final只对引用的值(即内存地址)有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译器错误。至于它所指向的对象的变化,final是不负责的。总结栈中用来存放一些原始数据类型的局部变量数据和对象的引用(String、数组、对象等等)但不存放对象内容。堆中存放使用new关键字创建的对象。字符串是一个特殊包装类,其引用是存放在栈里的,而对象内容必须根据创建方式不同定义(常量池和堆)。有的是编译期就已经创建好,存放在字符串常量池中,而有的是运行时才被创建。2 异常相关(Exception)Java异常处理机制对于可能出现异常的代码,有两种处理办法:第一、在方法中用try.catch语句捕获并处理异常,catach语句可以有多个,用来匹配多个异常。例如:publicvoidp(intx)try.catch(Exceptione).finally.第二、对于处理不了的异常或者要转型的异常,在方法的声明处通过throws语句抛出异常。例如:publicvoidtest1()throwsMyException.if(.)thrownewMyException();如果每个方法都是简单的抛出异常,那么在方法调用方法的多层嵌套调用中,Java虚拟机会从出现异常的方法代码块中往回找,直到找到处理该异常的代码块为止。然后将异常交给相应的catch语句处理。如果Java虚拟机追溯到方法调用栈最底部main()方法时,如果仍然没有找到处理异常的代码块,将按照下面的步骤处理:第一、调用异常的对象的printStackTrace()方法,打印方法调用栈的异常信息。第二、如果出现异常的线程为主线程,则整个程序运行终止;如果非主线程,则终止该线程,其他线程继续运行。通过分析思考可以看出,越早处理异常消耗的资源和时间越小,产生影响的范围也越小。因此,不要把自己能处理的异常也抛给调用者。还有一点,不可忽视:finally语句在任何情况下都必须执行的代码,这样可以保证一些在任何情况下都必须执行代码的可靠性。比如,在数据库查询异常的时候,应该释放JDBC连接等等。finally语句先于return语句执行,而不论其先后位置,也不管是否try块出现异常。finally语句唯一不被执行的情况是方法执行了System.exit()方法。System.exit()的作用是终止当前正在运行的Java虚拟机。finally语句块中不能通过给变量赋新值来改变return的返回值,也建议不要在finally块中使用return语句,没有意义还容易导致错误。最后还应该注意一下异常处理的语法规则:第一、try语句不能单独存在,可以和catch、finally组成try.catch.finally、try.catch、try.finally三种结构,catch语句可以有一个或多个,finally语句最多一个,try、catch、finally这三个关键字均不能单独使用。第二、try、catch、finally三个代码块中变量的作用域分别独立而不能相互访问。如果要在三个块中都可以访问,则需要将变量定义到这些块的外面。第三、多个catch块时候,Java虚拟机会匹配其中一个异常类或其子类,就执行这个catch块,而不会再执行别的catch块。第四、throw语句后不允许有紧跟其他语句,因为这些没有机会执行。第五、如果一个方法调用了另外一个声明抛出异常的方法,那么这个方法要么处理异常,要么声明抛出。那怎么判断一个方法可能会出现异常呢?一般来说,方法声明的时候用了throws语句,方法中有throw语句,方法调用的方法声明有throws关键字。throw和throws关键字的区别throw用来抛出一个异常,在方法体内。语法格式为:throw异常对象。throws用来声明方法可能会抛出什么异常,在方法名后,语法格式为:throws异常类型1,异常类型2.异常类型n。四、如何定义和使用异常类1、使用已有的异常类,假如为IOException、SQLException。try程序代码catch(IOExceptionioe)程序代码catch(SQLExceptionsqle)程序代码finally程序代码2、自定义异常类创建Exception或者RuntimeException的子类即可得到一个自定义的异常类。例如:publicclassMyExceptionextendsExceptionpublicMyException()publicMyException(Stringsmg)super(smg);3、使用自定义的异常用throws声明方法可能抛出自定义的异常,并用throw语句在适当的地方抛出自定义的异常。例如:在某种条件抛出异常publicvoidtest1()throwsMyException.if(.)thrownewMyException();将异常转型(也叫转译),使得异常更易读易于理解publicvoidtest2()throwsMyException.try.catch(SQLExceptione).thrownewMyException();还有一个代码,很有意思:publicvoidtest2()throwsMyException.try.catch(MyExceptione)throwe;这段代码实际上捕获了异常,然后又和盘托出,没有一点意义,如果这样还有什么好处理的,不处理就行了,直接在方法前用throws声明抛出不就得了。异常的捕获就要做一些有意义的处理。五、运行时异常和受检查异常Exception类可以分为两种:运行时异常和受检查异常。1、运行时异常RuntimeException类及其子类都被称为运行时异常,这种异常的特点是Java编译器不去检查它,也就是说,当程序中可能出现这类异常时,即使没有用try.catch语句捕获它,也没有用throws字句声明抛出它,还是会编译通过。例如,当除数为零时,就会抛出java.lang.ArithmeticException异常。2、受检查异常除了RuntimeException类及其子类外,其他的Exception类及其子类都属于受检查异常,这种异常的特点是要么用try.catch捕获处理,要么用throws语句声明抛出,否则编译不会通过。3、两者的区别运行时异常表示无法让程序恢复运行的异常,导致这种异常的原因通常是由于执行了错误的操作。一旦出现错误,建议让程序终止。受检查异常表示程序可以处理的异常。如果抛出异常的方法本身不处理或者不能处理它,那么方法的调用者就必须去处理该异常,否则调用会出错,连编译也无法通过。当然,这两种异常都是可以通过程序来捕获并处理的,比如除数为零的运行时异常:publicclassHelloWorldpublicstaticvoidmain(Stringargs)System.out.println(HelloWorld!);trySystem.out.println(1/0);catch(ArithmeticExceptione)System.out.println(除数为0!);System.out.println(除数为零后程序没有终止啊,呵呵!);运行结果:HelloWorld!除数为0!除数为零后程序没有终止啊,呵呵!4、运行时错误Error类及其子类表示运行时错误,通常是由Java虚拟机抛出的,JDK中与定义了一些错误类,比如VirtualMachineError和OutOfMemoryError,程序本身无法修复这些错误.一般不去扩展Error类来创建用户自定义的错误类。而RuntimeException类表示程序代码中的错误,是可扩展的,用户可以创建特定运行时异常类。Error(运行时错误)和运行时异常的相同之处是:Java编译器都不去检查它们,当程序运行时出现它们,都会终止运行。5、最佳解决方案对于运行时异常,我们不要用try.catch来捕获处理,而是在程序开发调试阶段,尽量去避免这种异常,一旦发现该异常,正确的做法就会改进程序设计的代码和实现方式,修改程序中的错误,从而避免这种异常。捕获并处理运行时异常是好的解决办法,因为可以通过改进代码实现来避免该种异常的发生。对于受检查异常,没说的,老老实实去按照异常处理的方法去处理,要么用try.catch捕获并解决,要么用throws抛出!对于Error(运行时错误),不需要在程序中做任何处理,出现问题后,应该在程序在外的地方找问题,然后解决。六、异常转型和异常链异常转型在上面已经提到过了,实际上就是捕获到异常后,将异常以新的类型的异常再抛出,这样做一般为了异常的信息更直观!比如:publicvoidrun()throwsMyException.try.catch(IOExceptione).thrownewMyException();finally.异常链,在JDK1.4以后版本中,Throwable类支持异常链机制。Throwable包含了其线程创建时线程执行堆栈的快照。它还包含了给出有关错误更多信息的消息字符串。最后,它还可以包含cause(原因):另一个导致此throwable抛出的throwable。它也称为异常链设施,因为cause自身也会有cause,依此类推,就形成了异常链,每个异常都是由另一个异常引起的。通俗的说,异常链就是把原始的异常包装为新的异常类,并在新的异常类中封装了原始异常类,这样做的目的在于找到异常的根本原因。通过Throwable的两个构造方法可以创建自定义的包含异常原因的异常类型:Throwable(String message, Throwable cause)构造一个带指定详细消息和cause的新throwable。Throwable(Throwable cause)构造一个带指定cause和(cause=null ? null :cause.toString()(它通常包含类和cause的详细消息)的详细消息的新throwable。getCause()返回此throwable的cause;如果cause不存在或未知,则返回null。initCause(Throwable cause)将此throwable的cause初始化为指定值。在Throwable的子类Exception中,也有类似的指定异常原因的构造方法:Exception(String message, Throwable cause)构造带指定详细消息和原因的新异常。Exception(Throwable cause)根据指定的原因和(cause=null ? null : cause.toString()的详细消息构造新异常(它通常包含cause的类和详细消息)。因此,可以通过扩展Exception类来构造带有异常原因的新的异常类。七、Java异常处理的原则和技巧1、避免过大的try块,不要把不会出现异常的代码放到try块里面,尽量保持一个try块对应一个或多个异常。2、细化异常的类型,不要不管什么类型的异常都写成Excetpion。3、catch块尽量保持一个块捕获一类异常,不要忽略捕获的异常,捕获到后要么处理,要么转译,要么重新抛出新类型的异常。4、不要把自己能处理的异常抛给别人。5、不要用try.catch参与控制程序流程,异常控制的根本目的是处理程序的非正常情况。throws和throw的区别与作用(当不想处理异常时,将其抛出,在方法中使用throws抛出可能的系统异常,不需要显示地在方法内部使用throw异常;对于自定义异常,除了方法名使用throws,还要在方法内部显示地用throw抛出异常对象。)throws是用来声明一个方法可能抛出的所有异常信息,注意,是可能的,所有的异常信息,在Java里面,大家很熟悉什么是类和对象,在这里,throws要抛出的就是一个异常类,因为它并不知道具体会出现哪种异常,所以就简单抛出一个异常类,包含这个异常类下面所有可能的异常。throws通常不用显示的捕获异常,而是由系统自动将所有捕获到的异常信息抛给上级方法来处理,举个简单的例子来说:A类声明抛出了一个异常类,如果系统捕获到该异常类下面某个具体的异常对象,则上交给A的父类B来处理,假如B不做处理,那么B继续上抛,上抛给B的父类C来处理,以此类推,直至找到可以处理该异常的方法为止。throw如上面所说,throws是用来声明一个方法可能抛出的所有异常信息,抛出的是异常类,那么throw就是如Java面向对象思想里面的类和对象的关系,因为throw要抛出的是一个具体的异常对象,而不是异常类。throw则需要用户自己捕获相关的异常,而后再对其进行相关包装,最后再将包装后的异常信息抛出。通常在一个方法(类)的声明处通过 throws声明方法(类)可能抛出的异常信息,而在方法(类)内部通过 throw声明一个具体的异常信息。throws throw的用法如果在方法中会有异常被抛出而你又不希望在这个方法体内对此异常进行处理,可以使用throws在声明方法的时候同时声明他可能会抛出的异常。比如:public void go() throws SQLException . Connection conn = ds.getConnection(); .本来ds.getConnection()将可能会抛出SQLException,但现在使用throws在方法名处声明了,所以在方法体中就不需要try/catch块来处理SQLException了throws用来标明一个成员函数可能抛出的各种异常。对大多数Exception子类来说,Java编译器会强迫你声明在一个成员函数中抛出的异常的类型。如果异常的类型是Error或RuntimeException,或它们的子类,这个规则不起作用,因为这在程序的正常部分中是不期待出现的。如果你想明确地抛出一个RuntimeException,你必须用throws语句来声明它的类型。这就重新定义了成员函数的定义语法:type method-name(arg-list) throws exception-list 下面是一段程序,它抛出了一个异常,但既没有捕捉它,也没有用throws来声明。这在编译时将不会通过。class ThrowsDemo1 static void procedure( ) System.out.println(inside procedure); throw new IllegalAccessException(demo); public static void main(String args) procedure( ); 为了让这个例子编译过去,我们需要声明成员函数procedure抛出了IllegalAccessException,并且在调用它的成员函数main里捕捉它。下面是正确的例子:class ThrowsDemo static void procedure( ) throws IllegalAccessException System.out.println(inside procedure); throw new IllegalAccessException(demo); public static void main(String args) try procedure( ); catch (IllegalAccessException e) System.out.println(caught + e); 下面是输出结果:C:java ThrowsDemo inside procedure caught java.lang.IllegalAccessException: demo1、两者位置不同。throws在声明方法的同时声明要抛出一个异常类,而throw是在方法内部实现,抛出一个具体的异常对象2、对异常处理方式不同。throws对异常不处理,谁调用谁处理,throws的Exception的取值范围要大于方法内部异常的最大范围,而cathch的范围又要大于throws的Exception的范围;throw主动抛出自定义异常类对象。自定义异常通常是这样的:public class MyFirstException extends Exception public MyFirstException() super(); /默认构造方法,会打印出系统自带的异常路径消息。 public MyFirstException(String msg) super(msg); /自定义构造方法,可以带入一些自定义信息。 public MyFirstException(String msg, Throwable cause) super(msg, cause); /要传入一个系统异常,通常这种构造方法用于包装系统异常,使异常更清楚:/* try . catch(Exception e) throw new MyException(发生了异常,e); */ public MyFirstException(Throwable cause) super(cause); 3 反射相关(Reflection)1、什么是反射机制?怎样用反射机制?什么是JAVA的反射机制JDK中提供的Reflection APIJAVA反射机制提供了什么功能获取类的Class对象获取类的Fields获取类的Method获取类的Constructor新建类的实例Class的函数newInstance通过Constructor对象的方法newInstance调用类的函数调用private函数设置/获取类的属性值 private属性动态创建代理类动态代理源码分析JAVA反射Class类型源代码分析JAVA反射原理分析 Class文件结构 JVM加载类对象,对反射的支持JAVA反射的应用一、什么是JAVA的反射机制Java反射是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于运行时改变fields内容或唤起methods。Java反射机制容许程序在运行时加载、探知、使用编译期间完全未知的classes。换言之,Java可以加载一个运行时才得知名称的class,获得其完整结构。二、JDK中提供的Reflection APIJava反射相关的API在包java.lang.reflect中,JDK 1.6.0的reflect包如下图:Member接口该接口可以获取有关类成员(域或者方法)后者构造函数的信息。AccessibleObject类该类是域(field)对象、方法(method)对象、构造函数(constructor)对象的基础类。它提供了将反射的对象标记为在使用时取消默认Java语言访问控制检查的能力。Array类该类提供动态地生成和访问JAVA数组的方法。Constructor类提供一个类的构造函数的信息以及访问类的构造函数的接口。Field类提供一个类的域的信息以及访问类的域的接口。Method类提供一个类的方法的信息以及访问类的方法的接口。Modifier类提供了static方法和常量,对类和成员访问修饰符进行解码。Proxy类提供动态地生成代理类和类实例的静态方法。三、JAVA反射机制提供了什么功能Java反射机制提供如下功能:在运行时判断任意一个对象所属的类在运行时构造任意一个类的对象在运行时判段任意一个类所具有的成员变量和方法在运行时调用任一个对象的方法在运行时创建新类对象在使用Java的反射功能时,基本首先都要获取类的Class对象,再通过Class对象获取其他的对象。这里首先定义用于测试的类:01classType02publicintpubIntField;03publicString pubStringField;04privateintprvIntField;0506publicType()07Log(Default Constructor);080910Type(intarg1, String arg2)11pubIntField = arg1;12pubStringField = arg2;1314Log(Constructor with parameters);151617publicvoidsetIntField(intval) 18this.prvIntField = val;1920publicintgetIntField() 21returnprvIntField;222324privatevoidLog(String msg)25System.out.println(Type:+ msg);26272829classExtendTypeextendsType30publicintpubIntExtendField;31publicString pubStringExtendField;32privateintprvIntExtendField;3334publicExtendType()35Log(Default Constructor);363738ExtendType(intarg1, String arg2)39pubIntExtendField = arg1;40pubStringExtendField = arg2;4142Log(Constructor with parameters);434445publicvoidsetIntExtendField(intfield7) 46this.prvIntExtendField = field7;4748publicintgetIntExtendField() 49returnprvIntExtendField;505152privatevoidLog(String msg)53System.out.println(ExtendType:+ msg);54551、获取类的Class对象Class类的实例表示正在运行的Java应用程序中的类和接口。获取类的Class对象有多种方式:调用getClassBoolean var1 = true;Class classType2 = var1.getClass();System.out.println(classType2);输出:class java.lang.Boolean运用.class语法Class classType4 = Boolean.class;System.out.println(classType4);输出:class java.lang.Boolean运用static method Class.forName()Class classType5 = Class.forName(java.lang.Boolean);System.out.println(classType5);输出:class java.lang.Boolean运用primitive wrapper classes的TYPE语法这里返回的是原生类型,和Boolean.class返回的不同Class classType3 = Boolean.TYPE;System.out.println(classType3);输出:boolean2、获取类的Fields可以通过反射机制得到某个类的某个属性,然后改变对应于这个类的某个实例的该属性值。JAVA的Class类提供了几个方法获取类的属性。publicFieldgetField(Stringname)返回一个Field对象,它反映此Class对象所表示的类或接口的指定公共成员字段publicField getFields()返回一个包含某些Field对象的数组,这些对象反映此Class对象所表示的类或接口的所有可访问公共字段publicFieldgetDeclaredField(Stringname)返回一个Field对象,该对象反映此Class对象所表示的类或接口的指定已声明字段pu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论