《Java程序员面试宝典》第9章

合集下载

java第九章

java第九章

第九章 多线程
第九章 多线程
第二节线程处理
间接创建线程的步骤
定义一个Runnable接口类。 在接口类中定义run() 方法。 在run() 方法中定义具体操作。 创建此Runnable接口类实例对象, 将该对象传递为Thread的对象,并用 start() 方法启动线程。
第九章 多线程
第九章 多线程
第一节线程
三、多线程编程常用的常量和方法
currentThread( ):返回当前运行的线程对象,是一个静 态的方法。 sleep(int n):使当前运行的线程睡n个毫秒,然后继续执 行,也是静态方法。 yield( ):使当前运行的线程放弃执行,切换到其它线程, 是一个静态方法。 isAlive( ):判断线程是否处于执行的状态,返回值true表 示处于运行状态,false表示已停止。start( ):使调用该方 法的线程开始执行。 run( ):该方法由start( )方法自动调用。 stop( ):使线程停止执行,并退出可执行状态。
第九章 多线程
第二节线程处理
二、创建多线程
创建Thread类的子类(直接方式) 实现Runnable接口(间接方式)
第九章 多线程
第二节线程处理
直接创建线程的步骤
定义一个线程Thread 的子类。 在子类中定义run() 方法。 在run() 方法中定义具体操作。 创建实例对象,并用start() 方法启 动线程。
【例】 用实现Runnable接口的方法实现多线程。
class Thread1 implements Runnable{ int n; Thread1(int n){ this.n=n;} public void run( ){ try{ for(int i=0;i<n;i++){ System.out.print("i="+i+" "); Thread.sleep(100); }} catch(InterruptedException e){ } } } 第九章 多线程

《程序员面试宝典》.pdf

《程序员面试宝典》.pdf

《程序员⾯试宝典》.pdf
社会竞争很残酷、⾯试则是⼀场表演,企业永远喜欢可以随机应变、聪明的求职者。

程序员的⾯试不同于⼀般岗位的⾯试。

当你在羡慕程序员⼗⼏万美⾦年薪的同时,你却不知道他们在应付⾯试时,要经历的重重磨难和压⼒。

程序员⾯试中,技术⾯试必不可少,除此之外,还有很多⾮技术相关的问题,例如考察你的逻辑思维能⼒,或者是沟通协作能⼒等等。

这注定了程序员⾯试并不是⾛过场,实⼒永远⽐运⽓重要。

因此,事前准备,也是⼀剂良⽅。

最近很多⼩伙伴问我要⼀些⾯试相关的资料,于是我翻箱倒柜,找到了这本⾮常经典的电⼦书——《程序员⾯试宝典》。

资料介绍
《程序员⾯试宝典》取材于各⼤公司⾯试真题(笔试、⼝试、电话⾯试、英语⾯试,以及逻辑测试和智商测试),详细分析了应聘程序员(含⽹络、测试等)职位的常见考点。

本书的⾯试题除了有详细解析和答案外,对相关知识点还有扩展说明,真正做到了由点成线,举⼀反三,对读者从求职就业到提升计算机专业知识都有显著帮助。

如何获取?。

Java面试宝典(2020版)

Java面试宝典(2020版)

Java⾯试宝典(2020版)⼀、Java 基础1. JDK 和 JRE 有什么区别?JDK:Java Development Kit 的简称,java 开发⼯具包,提供了 java 的开发环境和运⾏环境。

JRE:Java Runtime Environment 的简称,java 运⾏环境,为 java 的运⾏提供了所需环境。

具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的⼯具。

简单来说:如果你需要运⾏ java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK。

2. == 和 equals 的区别是什么?== 解读对于基本类型和引⽤类型 == 的作⽤效果是不同的,如下所⽰:基本类型:⽐较的是值是否相同;引⽤类型:⽐较的是引⽤是否相同;代码⽰例:1 String x = "string";2 String y = "string";3 String z = new String("string");4 System.out.println(x==y); // true5 System.out.println(x==z); // false6 System.out.println(x.equals(y)); // true7 System.out.println(x.equals(z)); // true代码解读:因为 x 和 y 指向的是同⼀个引⽤,所以 == 也是 true,⽽ new String()⽅法则重写开辟了内存空间,所以 == 结果为 false,⽽equals ⽐较的⼀直是值,所以结果都为 true。

equals 解读equals 本质上就是 ==,只不过 String 和 Integer 等重写了 equals ⽅法,把它变成了值⽐较。

Java面试宝典

Java面试宝典

Java面试宝典答:匿名的内部类是没有名字的内部类。

能够继承抽象(SDK1.5没有限制),但一个内部类能够作为一个接口,由另一个内部类实现3.Static Nested Class 和Inner Class的不同答:Nested Class (一样是C++的说法),Inner Class (一样是JAVA的说法)。

Java内部类与C++嵌套类最大的不同就在因此否有指向外部的引用上。

注:静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不能从一个static内部类的一个对象访问一个外部类对象4.&和&&的区别答:&是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)5.Collection 和Collections的区别答:Collection是集合类的上级接口,继承与他的接口要紧有Set 和List.Collections是针对集合类的一个关心类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作6.什么时候用assert答:assertion(断言)在软件开发中是一种常用的调试方式,专门多开发语言中都支持这种机制。

在实现中,assertion确实是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证那个boolean表达式的值为true;假如该值为false,说明程序差不多处于不正确的状态下,系统将给出警告或退出。

一样来说,assertion用于保证程序最差不多、关键的正确性。

assertion检查通常在开发和测试时开启。

为了提高性能,在软件公布后,assertion检查通常是关闭的7.String s = new String("xyz");创建了几个String Object答:"xyz"本身作为字符常量,在汇编语言中应该作为常量放在数据段,Java有一个类似数据段的constant pool 储存那个常量,在classloader加载那个类的时候就把"xyz"和那个类的其他一些信息放在constant pool new String("xyz")依照常量"xyz"在heap上创建String对象因此,一共两个对象String(String original) Initializes a newly created String object so that it represents the same sequence of characters as the argument; in other words, the newly created string is a copy of the argument string.8.Math.round(11.5)等於多少? Math.round(-11.5)等於多少答: Math.round(11.5)==12;Math.round(-11.5)==-11;round方法返回与参数最接近的长整数,参数加1/2后求其floor 9.short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错答:short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)short s1 = 1; s1 += 1;(能够正确编译)10.Java有没有goto答:java中的保留字,现在没有在java中使用11.数组有没有length()那个方法? String有没有length()那个方法答:数组没有length()那个方法,有length的属性。

Java程序设计基础第9章 实现接口

Java程序设计基础第9章 实现接口
第9章 实现接口
复习提问
1.如何区分父类与子类中的同名方法?
2.抽象类与普通类有什么不同?
本章提要
1. 2. 3. 4.
主要知识点: 接口的定义; 接口的声明; 接口的实现; 接口的使用 学习目标:掌握接口的声明、实现和使 用方法,能在实际开发中用接口定义软 件的功能结构。
9.1 定义接口
9.1.1 什么叫接口 在软件工程中,由一份“契约”规定来 自不同开发小组的软件之间如何相互作 用是非常常见的。每个小组都可以在不 知道其他小组代码的前提下独立开发自 己的代码。Java中的interface就是这样 的一份“契约”,它规定了一组执行规 范。
9.1 定义接口
9.1.2 声明接口 [修饰符] interface 接口名 [extends 父接口名列表]{ [public][static][final] 数据类型 属性名=常量值; [public][abstract] 返回类型 方法名(参数列表); } 例9-1:在里程表功能软件中,巳知每种交通工具每小 时的运行速度都是3个整数A、B、C的表达式,定义的 接口如下: Interface OdometerInterface { //定义软件实现的功能“契约” double getSpeed(doublea, double b, double c); //计 算运算速度的抽象方法 String getName(); //获取交通工具的名称 }
9.2 实现接口
9.2.1 实现一个接口 由某个类为接口中的抽象方法书写语句并定义实在的方法体。语法格式: [修饰符] class 类名 implements 接口名 例9-2:在里程表功能软件中,巳知汽车Car 的速度运算公式为:a*b/c,飞机Plane 的速度运算公式为:a+b+c。 1. class Plane implements OdometerInterface { 2. public double getSpeed (double a, double b, double c) { 3. return (a+ b + c); 4. } 5. public String getName(){ 6. return "Plane"; 7. } 8. } 9. class Car implements OdometerInterface { 10. public double getSpeed (double a, double b, double c) { 11. return ( a*b/c ); 12. } 13. public String getName(){ 14. return "Car"; 15. } 16. }

Java上第九章 抽象类、接口和包

Java上第九章 抽象类、接口和包

包 - 2
范例解析: 例如:编写一个测试文件Temp.java。 package cn.hope; public class Temp{ public void testPackage(){ System.out.println(“testing……”); } }
包 - 3
编译Temp.java文件。 javac –d . Temp.java 其中 –d 是带包编译的参数 . 是包依托路径,“.”代表当前文件夹 编译结果会在当前文件夹下生成cn子文件 夹,在cn下生成hope文件夹,在hope文件夹 中存放Temp.class文件。
接口 - 4
使用接口:
练习:让Person类实现Running接口。 public class Person implements Running{ public void running(){ System.out.println("person run……"); } }
包 ห้องสมุดไป่ตู้ 1
包是类的容器,是一系列相关类和接口的 集合,也是对类的一种更大的封装。 使用包的主要原因是要保证类名的唯一性 ,即“防止命名混乱”和“控制包中成员的 可访问性”。 语法:package 包名[.子包名[.子包名[…]]]
抽象类 - 2
抽象类的语法: [修饰符] abstract class 类名 [extends …][implements …]{ }
例如: public abstract class Animal{ public abstract void sound(); }
抽象类 - 3
定义抽象类的子类: public class Cat extends Animal{ public void sound(){ System.out.println("miao……"); } } 练习:另外定义Animal类的两个子类,覆 盖sound方法。

Java面试宝典PDF版


28、AnonymousInner Class (匿名内部类)是否可以 extends(继承)其它类,是否可以 implements(实现)interface(接 口)?...................................................................................................................2 29、super.getClass()方法调用.....................................................................2 30、String 是最基本的数据类型吗?.....................................................................2 31、String s = "Hello";s = s + " world!";这两行代码执行后,原始的 String 对象中的内容到 底变了没有? 2 32、是否可以继承 String 类?..............................................................................2 33、String s =new String("xyz");创建了几个 String Object?二者之间有什么区别? 2 34、String 和 StringBuffer 的区别.......................................................................2 35、如何把一段逗号分割的字符串转换成一个数组?...........................................2 36、数组有没有 length()这个方法?String 有没有 length()这个方法?...................2 37、下面这条语句一共创建了多少个对象:Strings="a"+"b"+"c"+"d";.................2 38、try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally{}里的 code 会不会被执行, 什么时候被执行,在 return 前还是 后?.................................................................................................2 39、下面的程序代码输出的结果是多少?...........................................................2 40、final,finally, finalize 的区别。......................................................................2 41、运行时异常与一般异常有何异同?..............................................................2 42、error 和 exception 有什么区别?.....................................................................2 43、Java 中的异常处理机制的简单原理和应用。................................................2 44、请写出你最常见到的5个 runtimeexception。...............................................2 45、JAVA 语言如何进行异常处理,关键字:throws,throw,try,catch,finally 分别代表什么意 义?在 try 块中可以抛出异常 吗?............................................................................................................2 46、java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和 suspend() 方法为何不推荐使 用?..........................................................................................................................2 47、sleep()和 wait() 有什么区别?.....................................................................2 48、同步和异步有何异同,在什么情况下分别使用他们?举例说明。.................2 49.下面两个方法同步吗?(自己发明)...........................................................2 50、多线程有几种实现方法?同步有几种实现方法?.............................................2

《Java程序设计与应用》 第9章


所有的对象都有充当互斥锁的内置侦听器。在给定的时刻,
任何侦听器只能由一个线程拥有。通过使用synchronized关键
字对方法进行修饰,可以启用锁定特性。在调用同步方法时,
该对象就被锁定,而试图访问该对象的其他线程就只能等待。
Java对同步的支持可以通过wait()、notify()和notifyAll()方法
currentThread方法返回一个对当前线程的引用。
2020年1月10日星期五
8
9.1.4 Runnable接口
创建新的执行线程的方法: 创建一个Thread类的子类,该类重载run方法即可 实现 Runnable 接口,Байду номын сангаас实现run方法。
Runnable的使用 使用Runnable对象的程序会创建一个Thread对象,并把
Interrupt方法用于中断一个线程。如果线程已经被中断 ,该方法便返回true,否则返回false。程序可以调用 isInterrupted方法确定该线程是否被中断。 setName方法用于设置线程的名称; getName方法用于返回线程的名称; toString方法返回一个包含线程名称、线程优先级和线程 所属线程组的字符串;
第九章 多线程
学习目的:
掌握多线程的基础知识 掌握线程的生命周期 了解线程的优先级 了解用线程制作动画的方法
学习重点:
多线程的基础知识 线程的生命周期
2020年1月10日星期五
2
第九章 多线程
本章提要: 1. 多线程编程基础
线程的基本概念、线程模型、Thread类、Runnable接口、 线程间的数据共享、多线程的同步控制与通信和守护线程 2.线程的生命周期 线程的几种基本状态、死锁问题和控制线程的生命 3.线程的优先级 4.用于制作动画的线程

Java面试题宝典(含答案、代码)

1. 功能描述:数组的循环移位,输入:{a,b,c},2输出:{b,c,a}要求实现方法:/***data :待循环数组*index:移动位数*/public String[] getChildren(String[] data,int index){//TODOreturn null;}[java] view plain copyprint?1. package com.iotex;2.3. import java.util.Arrays;4.5. /**6. * @author iotex7. * @date 2017/05/12 9:16:568. */9. public class Demo20 {10. public static void main(String[] args) {11. String[] data = {"a","b","c"};12. System.out.println(Arrays.toString(getChildren(data,2)));13.14. }15. public static String[] getChildren(String[] data,int index){16. String[] resData = new String[data.length];17. for(int i = 0;i<resData.length-1;i++) {18. resData[i] = data[index-1+i];19. }20. resData[resData.length-1] = data[0];21. return resData;22.23. }24.25. }[java] view plain copyprint?1. package com.iotex;2.3. import java.util.Arrays;4.5. /**6. * @author iotex7. * @date 2017/05/12 9:16:568. */9. public class Demo20 {10. public static void main(String[] args) {11. String[] data = {"a","b","c"};12. System.out.println(Arrays.toString(getChildren(data,2)));13.14. }15. public static String[] getChildren(String[] data,int index){16. String[] resData = new String[data.length];17. for(int i = 0;i<resData.length-1;i++) {18. resData[i] = data[index-1+i];19. }20. resData[resData.length-1] = data[0];21. return resData;22.23. }24.25. }2. 程序实现目标:输入一个字符,将字符转换为小写,将其对应的ASCII值加5后,输出结果。

Java语言程序设计课件第9章Java网络编程


• InetAddress 类提供了操作IP地址的各种方法。该类本身没有构造方法,而是通过调 用相关静态方法获取实例。常用方法:
方法名称 boolean equals(Object obj) byte[] getAddress() static InetAddress[] getAHByName(String host)
9.4.1 DATAGRAMPACKET类
• 在TCP/IP协议的传输层除了一个TCP协议之外,还有一个UDP协议。UDP协议是用户 数据报协议的简称,也用于网络数据的传输。虽然UDP协议是一种不太可靠的协议, 但有时在需要较快地接收数据并且可以忍受较小错误的情况下,UDP就会表现出更 大的优势。
9.1 JAVA 网络编程基础知识
• 9.1.1 网络协议 • 9.1.2 套接字和端口
9.1.1 网络协议
• 网络编程的目的就是直接或间接地通过网络协议与其他计算机进行通信。在Java语 言中包含网络编程所需要的各种类,编程人员只需要创建这些类的对象,调用相应 的方法,就可以进行网络应用程序的编写。
9.3.4 传输对象数据
• 经过前面的学习,掌握了如何在服务器开始一个端口监听套接字,以及如何在客户 端连接服务器,发送简单的数字。本次案例将实现如何在客户端发送一个对象到服 务器端,服务器如何解析对象中的数据。
9.4 JAVA UDP通信
• 9.4.1 DatagramPacket类 • 9.4.2 DatagramSocket类
9.3 JAVA TCP通信
• 9.3.1 ServerSocket 类 • 9.3.2 Socket 类 • 9.3.3 客户端与服务器端的简单通信 • 9.3.4 传输对象数据
9.3.1 SERVERSOCKET 类
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
·148·
第9章
Java 的反射机制
ng.reflect 包下。Field 提供有关类或接口的单个字段的信息,以及对它的动态访问权 限,反射的字段可能是一个静态的字段或实例的字段。 Field 的方法主要分为两大类,即 getXXX 和 setXXX。其中 getXXX 是用于获取某个 对象的该字段的值,并且有一定的类型规定,例如,getFloat()、getInt()等;而 setXXX 则 是用于设置值,它们一般有两个参数,一个是对象引用,另一个则是需要设置的值。 以下为一个 Field 的使用示例,通过反射来比较两个对象的大小:
import ng.reflect.Field; //测试类 class FieldTestClass{ String name; //属性 1,姓名 int age; //属性 2,年龄 //构造方法 public FieldTestClass(String name, int age) { super(); = name; this.age = age; } } public class FieldTest { public static void main(String[] args) { FieldTestClass obj1 = new FieldTestClass("hello1",100); //创建对象 1 FieldTestClass obj2 = new FieldTestClass("hello2",300); //创建对象 2 System.out.println(compare(obj1, obj2).name+” is bigger”); } //用反射定义一个通用的比较方法,返回 age 相对更大的对象 private static FieldTestClass compare(FieldTestClass obj1, FieldTestClass obj2){ try { //以下用两种方式获取一个 Field 对象 Field field = obj1.getClass().getDeclaredField("age"); field = FieldTestClass.class.getDeclaredField("age"); //获得两个对象的 age 的值 int val1 = (Integer)field.get(obj1); int val2 = (Integer)field.get(obj2); //进行比较 if(val1 > val2){ return obj1; }else{ return obj2; } } catch (Exception e) { e.printStackTrace(); } return null; } }
9.1
反 射 基 础
反射提供了一种动态的功能,这种动态功能非常的强大。它主要体现在通过反射相关 的 API,就可以知道一个陌生的 Java 类的所有信息,包括属性、方法、构造器等。而且元 素完全可以在运行时动态的进行创建或调用, 而不必在 JVM 运行时就进行确定。 本节将集 中讨论有关 Java 反射机制基础的常见面试题。
Class.forName("com.test.Student"); //动态加载 Student 类
说明:JDBC 导入驱动类,就是 Class.forName()的一个常用例子。
不管通过什么样的形式,类一旦被加载进入 JVM 以后,就会为它创建一个 Class 类的 实例对象。 那么, 开发者又该如何得到这个 Class 对象呢?概括来说, 要得到一个类的 Class
第9章
Java 的反射机制
类的类。 Java 用 Class 类来代表了所有的类,方便了开发者掌控类信息。通过 Class,开发者可 以得到属性(Field)、方法(Method)、构造器(Constructor)、修饰符(Modifier)等信 息。在动态的获取这些信息以后,开发者就可以用该 Class 创建实例、调用任何方法、访 问任何属性等操作,这些也是反射的主要用途。 反射机制相关的 API 主要集中在 ng.reflect 包下面,开发者也就是利用该包下面 的接口和类进行相关的反射开发的。大多数的框架,如 Struts、Hibernate 和 Spring,都会 频繁地使用反射 API 来完成它们动态的功能。 【答案】 反射是为了能够动态地加载一个类,动态地调用一个方法,动态地访问一个属性等动 态要求而设计的。它的出发点就在于 JVM 会为每个类创建一个 ng.Class 类的实例, 通过该对象可以获取这个类的信息,然后通过使用 ng.reflect 包下的 API 以达到各种 动态需求。
面试题 088 如何操作类的成员变量(Field)
Field 类,代表是的类的属性(字段),也称为成员变量。既然反射可以获取到它的对 象, 那又该如何使用它呢?本例在回答该问题的同时, 全面地讲解 Java 反射机制关于 Field 的常用方法。 【出现频率】 ★★★★ 【关键考点】 Field 的含义; Field 类的常用方法。 【考题分析】 Field 对象通过 Class 类的 getDeclaredField()或 getDeclaredFields()方法获取到,处于
Sutdent stu = new Student(); //创建学生对象
(2)访问该类的静态成员,示例代码如下:
System.out.println(Student.count); //访问静态的 count 成员变量
(3)使用 Class 类的静态 forName()方法,动态地加载一个指定类名的类。如果类未找 到,则抛出 ClassNotFoundException 异常,示例代码如下:
面试题 086 反射的原理是什么
严格意义上来讲, Java 并不是动态语言, 它并没有 Perl 和 Python 那样灵活多变。 但是, Java 的反射机制却让它显得动态起来,这是为什么呢?通过回答本例问题,将了解 Java 反 射的原理是什么。 【出现频率】 ★★★★ 【关键考点】 什么是反射机制; 反射机制的作用是什么。 【考题分析】 一般情况下, 如果想生成这个类的对象时, 运行这个程序的 JVM 会确认这个类的 Class 对象是否已经加载。如果尚未加载,JVM 就会根据类名查找.class 文件,并将其载入,一 旦这个类的 Class 对象被载入内存,它就可以被用来创建这个类的所有对象。 另外,对于一个未知类型的引用来说,通常会采用强制类型转换的形式来得到开发者 想要的类型引用,如果执行了一个错误的类型转换,就会抛出一个 ClassCastException 异常。 在以上两个过程中,Class 类一直都在起作用。因为 Class 类实例包含的是一个 Java 类的全部信息,包括类名、方法、属性等。换句话来说,也就是 Class 对象就是代表一个
Student stu = new Student(); Class<Student> clazz = stu.getClass(); //创建一个 Student 对象 //调用 getName 方法
注意:从 Javቤተ መጻሕፍቲ ባይዱ 5.0 开始,Class 类是支持泛型的,这个类型也就是它所代表的类。
获取到 Class 对象以后,就可以通过调用它的一些成员方法来获取它所代表的类的属 性、方法、修饰符等信息,以及调用 newInstance()方法来创建新的实例对象,还有其他一 些功能方法。 【答案】 每一个 Class 类的对象就代表了一种被加载进入 JVM 的类,它代表了该类的一种信息 映射。开发者可以通过以下 3 种途径获取到 Class 对象。 Class 类的 forName()方法的返回值。 访问所有类都会拥有的静态的 class 属性。 调用所有对象都会有的 getClass()方法。 在 Class 类 中 , 定 义 许 多 关 于 类 信 息 的 方 法 。 例 如 , getName() 、 getMethod() 、 getConstructor()和 newInstance()等可以用于反射开发,还有 isInstance()和 isInterface()等一 些关于类的功能方法。
面试题 089 如何操作类的方法(Method)
Method 类,代表的是类的方法(静态或非静态的)。与 Field 类似,反射可以获取到 它的对象,使用它的方式则是方法动态调用。本例在回答该问题的同时,将更全面地讲解 Java 反射机制关于 Method 的常用方法。 【出现频率】 ★★★★ 【关键考点】 Method 的含义; Method 类的常用方法。 【考题分析】 Method 对 象 通 过 Class 类 的 getMethod() 或 getMethods() 方 法 获 取 到 , 也 处 于 ng.reflect 包下。Method 提供关于类或接口中的某个方法(以及如何访问该方法)的 信息,所反映的方法可能是类方法或实例方法(包括抽象方法在内)。 Method 类中使用最多的方法是 invoke(),它的含义就是方法调用。它的第一个参数为 Class 所代表的类的一个实例对象,以后则是一个不定长的 Object 类型的参数列表,它是 Method 对象所代表的方法需要的参数列表。
第9章
Java 的反射机制
反射机制(Reflection),是 Java 提供的一项比较高级的功能,一般的 Java 开发者使 用它的时候相对比较少。 但是, Java 的反射却是大多数框架的基础, 例如, Struts、 Hibernate 和 Spring 等。反射机制就好像外科医生的解剖工具,突然从外太空来了一个人,如何知道 它的具体构造呢?最好的办法就是把它解剖来看一看,反射机制就是用来解剖 Java 的类、 接口、方法、属性等元素的。本章将包含关于 Java 的反射机制的一些常见面试题,并且分 析这些题目和知识点,帮助读者梳理这些方面的知识。
相关文档
最新文档