Method类的invoke(Object obj,Object args[])方法接收的参数必须为对象。在学习jdk的动态代理时,invoke方法里面需要传入参数数组。以下代码来此狂神说的例子
狂神说Spring06:静态/动态代理模式
public class ProxyInvocationHandler implements InvocationHandler {
private Object target;
public void setTarget(Object target) {
this.target = target;
public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(),
target.getClass().getInterfaces(),this);
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
log(method.getName());
Object result = method.invoke(target, args);
return result;
public void log(String methodName){
System.out.println("执行了"+methodName+"方法");
首先生成代理类:Proxy的newProxyInstance()方法,有三个参数:
loader: 用哪个类加载器去加载代理对象
interfaces:动态代理类需要实现的接口
h:动态代理方法在执行时,会调用h里面的invoke方法去执行
public static Object newProxyInstance(ClassLoader loader,
Class<?>[] interfaces,
InvocationHandler h)
throws IllegalArgumentException
然后代理类调用真实角色的方法,并返回对象。invoke()方法也有三个参数:
proxy:就是代理对象,newProxyInstance方法的返回对象
method:调用的方法
args: 方法中的参数
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
log(method.getName());
Object result = method.invoke(target, args);
return result;
这里用到invoke就是反射的invoke方法,第一个参数就是对象实例,一般也是由反射获取,第二个是参数列表,必须为对象。
invoke(obj, new Object[]{“args1”, “args2”})
反射之invoke方法
一个例子弄懂invoke方法
在学习jdk的动态代理时,invoke方法里面需要传入多个参数。动态代理也是传入Object[] args,参数数组。如果是多个参数不能直接传入多个参数,需要创建参数数组狂神说Spring06:静态/动态代理模式反射之invoke方法一个例子弄懂invoke方法...
学习动态代理,先从静态代理入手
假如现在我们面临一个需求,把一个项目中所有访问数据库的方法都记录日志。最直接的方法是修改所有代码,在每个方法里面都加入写日志代码:
public class Dao {
User findUserbyId(int id) {
// 业务代码
// 加入写日志代码
但是这样工作量会很大,并且模块之间是耦合的,比如下次的需求是修改记录日志的内容,那么又要去修改所有业务代码,显然这种方法是不可取的。
近期看到 invoke 方法第一个参数的另外一种传法,如下:
public class Event {
public static final String TAG= "Event";
public static void test(){
Log.d(TAG, "Event test: ");
Class<?> aClass = Cl...
享有全球盛誉的编程专家Jeffrey Richter,这位与Microsoft .NET开发团队合作长达8年时间的资深顾问,在本书中和读者分享他编程生涯中积累的所有丰富经验和心得,他的独到、睿智的见解,他的远见卓识,为开发人员构建健壮、可靠和具有良好响应能力的应用程序与组件奠定了良好的基础。
《CLR via C#(第3版) 》针对.NET Framework 4.0和多核编程进行了全面更新和修订,是帮助读者深入探索和掌握公共语言运行时、C#和.NET开发的重要参考,同时也是帮助开发人员构建任何一种应用程序(如Microsoft Silverlight、ASP.NET、Windows Prensentation Foundation、Web服务和控制台应用程序)的良师益友。
本书涵括以下主题:
· 构建、部署应用程序、组件和共享程序集,并对它们进行版本管理
· 理解基元类型、值类型和引用类型的行为,从而最高效地定义和使用它们
· 使用泛型和接口来定义可重用的算法
· 高效使用特定的CLR类型——委托、枚举、定制attribute、数组和字符串
· 理解垃圾回收器是如何管理内存资源的
· 使用线程池、任务、取消、计时器和异步I/O操作来设计响应性强、稳定性高和伸缩性大的解决方案
· 借助于异常处理来进行状态管理
· 使用CLR寄宿、AppDomain、程序集加载、反射和C#的dynamic类型来构造具有动态扩展能力的应用程序
本书作者作者Jeffrey Richter,.NET和Windows编程领域当之无愧的大师和权威,以著述清楚明了,行文流水,言简意赅著称,在国内具有相当高的知名度,他的著作之一《Windows核心编程(第5版)》屡获殊荣,在国内外都享有盛誉,在国内因年销量过万而获得中国书刊业发行协会“2009年度全行业畅销书品种”称号。
第1章 CLR的执行模型
1.1 将源代码编译成托管模块
1.2 将托管模块合并成程序集
1.3 加载公共语言运行时
1.4 执行程序集的代码
1.4.1 IL和验证
1.4.2 不安全的代码
1.5 本地代码生成器:NGen.exe
1.6 Framework类库
1.7 通用类型系统
1.8 公共语言规范
1.9 与非托管代码的互操作性
第2章 生成、打包、部署和管理应用程序及类型
2.1 .NET Framework部署目标
2.2 将类型生成到模块中
2.2.1 响应文件
2.3 元数据概述
2.4 将模块合并成程序集
2.4.1 使用Visual Studio IDE将程序集添加到项目中
2.4.2 使用程序集链接器
2.4.3 为程序集添加资源文件
2.5 程序集版本资源信息
2.5.1 版本号
2.6 语言文化
2.7 简单应用程序部署(私有部署的程序集)
2.8 简单管理控制(配置)
第3章 共享程序集和强命名程序集
3.1 两种程序集,两种部署
3.2 为程序集分配强名称
3.3 全局程序集缓存
3.4 在生成的程序集中引用一个强命名程序集
3.5 强命名程序集能防范篡改
3.6 延迟签名
3.7 私有部署强命名程序集
3.8 “运行时”如何解析类型引用
3.9 高级管理控制(配置)
3.9.1 发布者策略控制
第4章 类 型 基 础
4.1 所有类型都从System.Object派生
4.2 类型转换
4.2.1 使用C#的is和as操作符来转型
4.3 命名空间和程序集
4.4 运行时的相互联系
第5章 基元类型、引用类型和值类型
5.1 编程语言的基元类型
5.1.1 checked和unchecked基元类型操作
5.2 引用类型和值类型
5.3 值类型的装箱和拆箱
5.3.1 使用接口更改已装箱值类型中的字段(以及为什么不应该这样做)
5.3.2 对象相等性和同一性
5.4 对象哈希码
5.5 dynamic基元类型
第6章 类型和成员基础
6.1 类型的各种成员
6.2 类型的可见性
6.2.1 友元程序集
6.3 成员的可访问性
6.4 静态类
6.5 分部类、结构和接口
6.6 组件、多态和版本控制
6.6.1 CLR如何调用虚方法、属性和事件
6.6.2 合理使用类型的可见性和成员的可访问性
6.6.3 对类型进行版本控制时的虚方法的处理
第7章 常量和字段
7.1 常量
7.2 字段
第8章 方法
8.1 实例构造器和类(引用类型)
8.2 实例构造器和结构(值类型)
8.3 类型构造器
8.3.1 类型构造器的性能
8.4 操作符重载方法
8.4.1 操作符和编程语言互操作性
8.5 转换操作符方法
8.6 扩展方法
8.6.1 规则和原则
8.6.2 用扩展方法扩展各种类型
8.6.3 ExtensionAttribute
8.7 分部方法
8.7.1 规则和原则
第9章 参 数
9.1 可选参数和命名参数
9.1.1 规则和原则
9.1.2 DefaultParameterValueAttribute和OptionalAttribute
9.2 隐式类型的局部变量
9.3 以传引用的方式向方法传递参数
9.4 向方法传递可变数量的参数
9.5 参数和返回类型的指导原则
9.6 常量性
第10章 属性
10.1 无参属性
10.1.1 自动实现的属性
10.1.2 合理定义属性
10.1.3 对象和集合初始化器
10.1.4 匿名类型
10.1.5 System.Tuple类型
10.2 有参属性
10.3 调用属性访问器方法时的性能
10.4 属性访问器的可访问性
10.5 泛型属性访问器方法
第11章 事件
11.1 设计要公开事件的类型
11.1.1 第一步:定义类型来容纳所有需要发送给事件通知接收者的附加信息
11.1.2 第二步:定义事件成员
11.1.3 第三步:定义负责引发事件的方法来通知事件的登记对象
11.1.4 第四步:定义方法将输入转化为期望事件
11.2 编译器如何实现事件
11.3 设计侦听事件的类型
11.4 显式实现事件
第12章 泛型
12.1 Framework类库中的泛型
12.2 Wintellect的Power Collections库
12.3 泛型基础结构
12.3.1 开放和封闭类型
12.3.2 泛型类型和继承
12.3.3 泛型类型同一性
12.3.4 代码爆炸
12.4 泛型接口
12.5 泛型委托
12.6 委托和接口的逆变和协变泛型类型实参
12.7 泛型方法
12.7.1 泛型方法和类型推断
12.8 泛型和其他成员
12.9 可验证性和约束
12.9.1 主要约束
12.9.2 次要约束
12.9.3 构造器约束
12.9.4 其他可验证性问题
第13章 接口
13.1 类和接口继承
13.2 定义接口
13.3 继承接口
13.4 关于调用接口方法的更多探讨
13.5 隐式和显式接口方法实现(幕后发生的事情)
13.6 泛型接口
13.7 泛型和接口约束
13.8 实现多个具有相同方法名和签名的接口
13.9 用显式接口方法实现来增强编译时类型安全性
13.10 谨慎使用显式接口方法实现
13.11 设计:基类还是接口?
第14章 字符、字符串和文本处理
14.1 字符
14.2 System.String类型
14.2.1 构造字符串
14.2.2 字符串是不可变的
14.2.3 比较字符串
14.2.4 字符串留用
14.2.5 字符串池
14.2.6 检查字符串中的字符和文本元素
14.2.7 其他字符串操作
14.3 高效率构造字符串
14.3.1 构造StringBuilder对象
14.3.2 StringBuilder的成员
14.4 获取对象的字符串表示:ToString
14.4.1 指定具体的格式和语言文化
14.4.2 将多个对象格式成一个字符串
14.4.3 提供定制格式化器
14.5 解析字符串来获取对象:Parse
14.6 编码:字符和字节的相互转换
14.6.1 字符和字节流的编码和解码
14.6.2 Base-64字符串编码和解码
14.7 安全字符串
第15章 枚举类型和位标志
15.1 枚举类型
15.2 位标志
15.3 向枚举类型添加方法
第16章 数组
16.1 初始化数组元素
16.2 数组转型
16.3 所有数组都隐式派生自System.Array
16.4 所有数组都隐式实现IEnumerable,Icollection和IList
16.5 数组的传递和返回
16.6 创建下限非0的数组
16.7 数组的访问性能
16.8 不安全的数组访问和固定大小的数组
第17章 委托
17.1 初识委托
17.2 用委托回调静态方法
17.3 用委托回调实例方法
17.4 委托揭秘
17.5 用委托回调许多方法(委托链)
17.5.1 C#对委托链的支持
17.5.2 取得对委托链调用的更多控制
17.6 委托定义太多啦(泛型委托)
17.7 C#为委托提供的简化语法
17.7.1 简化语法1:不需要构造委托对象
17.7.2 简化语法2:不需要定义回调方法
17.7.3 简化语法3:局部变量不需要手动包装到类中即可传给回调方法
17.8 委托和反射
第18章 定制attribute
18.1 使用定制attribute
18.2 定义自己的attribute类
18.3 attribute的构造器和字段/属性的数据类型
18.4 检测定制attribute
18.5 两个attribute实例的相互匹配
18.6 检测定制attribute时不创建从Attribute派生的对象
18.7 条件attribute类
第19章 可空值类型
19.1 C#对可空值类型的支持
19.2 C#的空接合操作符
19.3 CLR对可空值类型的特殊支持
19.3.1 可空值类型的装箱
19.3.2 可空值类型的拆箱
19.3.3 通过可空值类型调用GetType
19.3.4 通过可空值类型调用接口方法
第20章 异常和状态管理
20.1 定义“异常”
20.2 异常处理机制
20.2.1 try块
20.2.2 catch块
20.2.3 finally块
20.3 System.Exception类
20.4 FCL定义的异常类
20.5 抛出异常
20.6 定义自己的异常类
20.7 用可靠性换取开发效率
20.8 指导原则和最佳实践
20.8.1 善用finally块
20.8.2 不要什么都捕捉
20.8.3 得体地从异常中恢复
20.8.4 发生不可恢复的异常时回滚部分完成的操作——维持状态
20.8.5 隐藏实现细节来维系契约
20.9 未处理的异常
20.10 对异常进行调试
20.11 异常处理的性能问题
20.12 约束执行区域(CER)
20.13 代码契约
第21章 自动内存管理(垃圾回收)
21.1 理解垃圾回收平台的基本工作原理
21.1.1 从托管堆分配资源
21.2 垃圾回收算法
21.3 垃圾回收与调试
21.4 使用终结操作来释放本地资源
21.4.1 使用CriticalFinalizerObject类型确保终结
21.4.2 SafeHandle类型及其派生类型
21.4.3 使用SafeHandle类型与非托管代码进行互操作
21.5 对托管资源使用终结操作
21.6 什么会导致调用Finalize方法
21.7 终结揭秘
21.8 Dispose模式:强制对象清理资源
21.9 使用实现了Dispose模式的类型
21.10 C#的using语句
21.11 一个有趣的依赖性问题
21.12 手动监视和控制对象的生存期
21.13 对象复活
21.14 代
21.15 用于本地资源的其他垃圾回收功能
21.16 预测需求大量内存的操作能否成功
21.17 编程控制垃圾回收器
21.18 线程劫持
21.19 垃圾回收模式
21.20 大对象
21.21 监视垃圾回收
第22章 CLR寄宿和AppDomain
22.1 CLR寄宿
22.2 AppDomain
22.2.1 跨越AppDomain边界访问对象
22.3 卸载AppDomain
22.4 监视AppDomain
22.5 AppDomain FirstChance异常通知
22.6 宿主如何使用AppDomain
22.6.1 可执行应用程序
22.6.2 Microsoft Silverlight富Internet应用程序
22.6.3 Microsoft ASP.NET Web窗体和XML Web服务应用程序
22.6.4 Microsoft SQL Server
22.6.5 更多的用法只局限于你自己的想象力
22.7 高级宿主控制
22.7.1 使用托管代码管理CLR
22.7.2 编写健壮的宿主应用程序
22.7.3 宿主如何拿回它的线程
第23章 程序集加载和反射
23.1 程序集加载
23.2 使用反射构建动态可扩展应用程序
23.3 反射的性能
23.3.1 发现程序集中定义的类型
23.3.2 类型对象的准确含义
23.3.3 构建Exception派生类型的一个层次结构
23.3.4 构造类型的实例
23.4 设计支持加载项的应用程序
23.5 使用反射发现类型的成员
23.5.1 发现类型成员
23.5.2 BindingFlags:筛选返回的成员种类
23.5.3 发现类型的接口
23.5.4 调用类型的成员
23.5.5 一次绑定、多次调用
23.5.6 使用绑定句柄来减少进程的内存耗用
第24章 运行时序列化
24.1 序列化/反序列化快速入门
24.2 使类型可序列化
24.3 控制序列化和反序列化
24.4 格式化器如何序列化类型实例
24.5 控制序列化/反序列化的数据
24.5.1 如何在基类没有实现ISerializable的前提下定义一个实现它的类型
24.6 流上下文
24.7 将类型序列化为不同的类型以及将对象反序列化为不同的对象
24.8 序列化代理
24.8.1 代理选择器链
24.9 反序列化对象时重写程序集和/或类型
第25章 线程基础
25.1 Windows为什么要支持线程
25.2 线程开销
25.3 停止疯狂
25.4 CPU发展趋势
25.5 NUMA架构的机器
25.6 CLR线程和Windows线程
25.7 使用专用线程执行异步的计算限制操作
25.8 使用线程的理由
25.9 线程调度和优先级
25.10 前台线程和后台线程
25.11 继续学习
第26章 计算限制的异步操作
26.1 CLR线程池基础
26.2 执行简单的计算限制操作
26.3 执行上下文
26.4 协作式取消
26.5 任务
26.5.1 等待任务完成并获取它的结果
26.5.2 取消任务
26.5.3 一个任务完成时自动启动一个新任务
26.5.4 任务可以启动子任务
26.5.5 任务内部揭秘
26.5.6 任务工厂
26.5.7 任务调度器
26.6 Parallel的静态For,ForEach和Invoke方法
26.7 并行语言集成查询(PLINQ)
26.8 执行定时计算限制操作
26.8.1 太多的计时器,太少的时间
26.9 线程池如何管理线程
26.9.1 设置线程池限制
26.9.2 如何管理工作者线程
26.10 缓存线和伪共享
第27章 I/O限制的异步操作
27.1 Windows如何执行I/O操作
27.2 CLR的异步编程模型(APM)
27.3 AsyncEnumerator类
27.4 APM和异常
27.5 应用程序及其线程处理模型
27.6 异步实现服务器
27.7 APM和计算限制操作
27.8 APM的注意事项
27.8.1 在没有线程池的前提下使用APM
27.8.2 总是调用EndXxx方法,而且只调用一次
27.8.3 调用EndXxx方法时总是使用相同的对象
27.8.4 为BeginXxx和EndXxx方法使用ref,out和params实参
27.8.5 不能取消异步I/O限制操作
27.8.6 内存消耗
27.8.7 有的I/O操作必须同步完成
27.8.8 FileStream特有的问题
27.9 I/O请求优先级
27.10 将IAsyncResult APM转换为Task
27.11 基于事件的异步模式
27.11.1 将EAP转换为Task
27.11.2 APM和EAP的对比
27.12 编程模型的泥沼
第28章 基元线程同步构造
28.1 类库和线程安全
28.2 基元用户模式和内核模式构造
28.3 用户模式构造
28.3.1 易失构造
28.3.2 互锁构造
28.3.3 实现简单的Spin Lock
28.3.4 Interlocked Anything模式
28.4 内核模式构造
28.4.1 Event构造
28.4.2 Semaphore构造
28.4.3 Mutex构造
28.4.4 在一个内核构造可用时调用一个方法
第29章 混合线程同步构造
29.1 一个简单的混合锁
29.2 自旋、线程所有权和递归
29.3 混合构造的大杂烩
29.3.1 ManualResetEventSlim和SemaphoreSlim类
29.3.2 Monitor类和同步块
29.3.3 ReaderWriterLockSlim类
29.3.4 OneManyLock类
29.3.5 CountdownEvent类
29.3.6 Barrier类
29.3.7 线程同步构造小结
29.4 著名的双检锁技术
29.5 条件变量模式
29.6 用集合防止占有锁太长的时间
29.7 并发集合类
通过反射的机制,可以通过invoke方法来调用类的函数。invoke函数的第一个参数是方法的实例,如果该方法是静态方法,可以用null或者用类来代替,第二个参数是变长的,是调用该方法的参数。
package com.tn.class;
import java.lang.reflect.Method;
import java.util.Arrays;
public class Client {
public static void main(String[] args) throws Except
转载来自:http://yjm199.blog.51cto.com/4408395/1347472
import java.net.MalformedURLException;
import java.net.URL;
import org.codehaus.xfire.client.Client;
//引用的xfire.client.Client包
publiccla
在用.NET Framework框架的WinForm构建GUI程序界面时,如果要在控件的事件响应函数中改变控件的状态,例如:某个按钮上的文本原先叫“打开”,单击之后按钮上的文本显示“关闭”,初学者往往会想当然地这么写:
void ButtonOnClick(object sender,EventArgs e)
button.Text="关闭";
这样的写法运行程序之后,可...
public class Test {
public static void main(String[] args) throws Exception {
int[] arr={1,2,3};
//把int[]传给Object...objects,会把int[]当成1个Object对象处理
//传入非对象的数组时,它会把整个数组当做一个Object 实例,打印出的 结果为 1
get(arr); //输出1
a concise di library which can avoid check null when want to invoke a implementation by interface
Project
It had been used in project KnowWeather ,you can learn more.
同时已用在日活百万级别的线上项目中
Introduce
Feature
通过控制反转实现module间服务提供、Activity跳转,Activity支持参数自动处理传递的参数,不需要繁琐的注解标注
多接口支持。优点在于不必要暴露所有接口,只需将需要的接口暴露,比如一个服务可能支持多个功能,但是有些功能只需要再module内使用,有些需要提供给其他module,这样就可以抽离出多个接口,只需要将需要暴露的放到基础module里。
支持多进程Activity跳转的参数自动处理
接口化的通信方式类似于“SDK” 数据结构,面向接口编程,更清晰直观, 对IDE更友好(可在IDE中直接跳转),协议变化直接反映在编译上,维护接口也简单
不需要繁琐
npm install use-spotify
用SpotifyApiProvider包装您的组件, SpotifyApiProvider其传递有效的访问令牌。 阅读以获取更多详细信息。
使用useSpotify或useSpotifyLazy挂钩。
引擎盖下use-spotify利用 。
挂钩的第一个参数是任何spotify方法名称。
第二个参数是选项。
第三个参数是Spotify方法特有的参数列表。
有关每种方法及其参数的更多文档,请参见文档或。
const result = useSpotify ( spotifyMethod , options , ... args )
const [ invoke , result ] = useSpotify
示例描述:本章演示如何开始使用JDK进行程序的开发。
HelloWorldApp.java 第一个用Java开发的应用程序。
firstApplet.java 第一个用Java开发的Applet小程序。
firstApplet.htm 用来装载Applet的网页文件
示例描述:本章介绍开发Java的基础语法知识。
accumulationByDoWhile.java 用do~while语句写的累加程序
accumulationByFor.java 用for语句写的累加程序
accumulationByWhile.java 用while语句写的累加程序
boolExample.java 演示boolean变量的程序
charExample.java 演示char变量的程序
compare.java 演示前缀、后缀自加之间区别的程序
constCharExample.java 演示转义字符
converseNumber.java 逆向输出数字
daffodilNumber.java 求水仙花数
division.java 演示整除结果
errorCompoundVariable.java 错误使用局部变量示例
factorial.java 求阶乘
Fibonacci.java 求Fiblnacci数列
GcdAndGcm.java 求最大公约数和最小公倍数
errorInit.java 演示变量初始化错误的程序
integerExample.java 演示各种整型变量的使用
isPrime.java 判断素数
leapYearByIf.java 用if语句判断闰年
leapYearByLogical.java 用逻辑表达式判断闰年
lowToUpper.java 小写字母转换成大写字母
lozengeStar.java 输出一个由*组成的菱形
multiplyTable.java 求乘法口诀表
narrowingConversion_1.java 缩减转换引发错误示例1
narrowingConversion_2.java 缩减转换引发错误示例2
notMultipleOfThree.java 把100-200之间不能被3整除的数输出
outputByDoWhile.java 用while循环随机输出数据
outputByWhile.java 用do~while循环随机输出数据
outputMax.java 求两个数中的最大数
overflowExample.java 演示溢出
precedence.java 演示自加运算符的优先级
primeNumber.java 输出100-200之间的所有素数
ranking.java 评定成绩等级
rankingBySwitch.java 用switch语句评定成绩等级
realExample.java 演示浮点数的有效位数
remainder.java 取余运算示例
showBreak.java 利用标号语句跳转出所有循环嵌套
showCount.java 循环计数示例
showDoubleLoop.java 演示双重循环
showDoubleLoopSe.java 改进的双重循环
showOrder_1.java 演示操作数求值顺序示例1
showOrder_2.java 演示操作数求值顺序示例2
sign.java 用条件运算实现符号函数示例
signByIF.java 用if语句实现符号函数示例
triangleStar.java 输出一个由*组成的直角三角形
upperToLowCase.java 大写转换成小写
variableScopeExample.java 变量使用范围示例
示例描述:本章学习对象和类。
accessMember.java 访问成员变量示例
constructNoPara.java 无参数的构造方法
constructWithPara.java 带参数的构造方法
declareDefault.java 缺省访问权限的使用
declarePrivate.java 私有访问权限的使用
declareProtected.java 保护访问权限的使用
deriveClass.java 子类访问父类变量示例
getLinePara.java 获取命令行参数示例
hasStaticMethod.java 静态成员方法示例
hasStatMember.java 静态成员变量示例
HelloNative.c 用C写的一个小程序
HelloNative.dll 用C生成的DLL文件
HelloNative.exp 用VC编译生成的辅助文件
HelloNative.h 用javah生成的C语言用的头文件
HelloNative.java 准备调用C函数的java文件
HelloNative.lib 用VC编译生成的静态库文件
HelloNative.obj 用VB编译生成的目标文件
HelloNativeTest.java 测试本地化是否成功的类文件
instanceVar.java 定义一个实例成员变量
invokeByObject.java 对象实参传递示例程序
invokeByValue.java 传值调用示例程序
invokeMethod.java 同一个类中调用方法示例
invokeOther.java 类的外部调用方法示例
invokeStaticMethod.java 调用静态方法示例
localVariable.java 演示局部变量
localVSmember.java 局部变量与成员变量同名问题示例
onlyTest.java 对象传值示例
otherClass.java 从类的外部访问对象的成员
showInstVar.java 演示不同的对象拥有不同的成员变量
showMain.java 演示main方法访问本类成员
showMethod.java 演示如何定义一个方法体
showReturn_1.java return语句示例1
showReturn_2.java return语句示例2
showStaicVar.java 演示静态变量的使用
staticBlock.java 演示静态块的使用
staticVar.java 定义静态变量
supplyTest.java 对象作为静态成员使用示例
trySwap.java 试图交换两个形参的值
useOnlyTest.java 创建多个对象,演示this的作用
useStaticBolck.java 使用静态块
useStVar.java 使用静态成员变量
示例描述:本章学习继承与多态。
absClass.java 抽象类定义示例
ancestor.java 基类定义示例1
ancestor_1.java 另一个基类定义
anonymousInner.java 匿名内部类
base.java 定义一个基类
BaseColors.java 一个简单的接口
basePoint.java 一个测试用的基类
Colorable.java 一个子接口
ColoredPoint.java 一个测试用子类
common.java 一个公用类
derive.java 一个测试用子类
differ.java 测试静态方法与实例方法之间的区别
forefather.java 一个简单的基类
grandson.java 上面这个类的子类
hasConstructor.java 拥有构造器的类
hasFinalFun.java 拥有最终方法的类
hasRecall.java 可以完成回调功能的类
HasStatic.java 一个简单的拥有静态成员的类
hideMember_1.java 成员隐藏示例1
hideMember_2.java 成员隐藏示例2
hideMember_3.java 成员隐藏示例3
hideMember_4.java 成员隐藏示例4
hideMember_5.java 成员隐藏示例5
implementABS.java 继承一个抽象类
impRecall.java 实现回调函数
inheritConstruct_1.java 构造器继承示例1
inheritConstruct_2.java 构造器继承示例2
inheritConstruct_3.java 构造器继承示例3
inheritConstruct_4.java 构造器继承示例4
inheritConstruct_5.java 构造器继承示例5
inheritConstruct_6.java 构造器继承示例6
inheritor.java 子类覆盖父类示例
inPack.java 包示例
LotsOfColors.java 定义一个子接口
matching.java 重载解析示例
notInPack.java 用前缀引用包中的类
onlyShow.java 一个简单的接口
Outer_1.java 外部类示例1
Outer_2.java 外部类示例2
Outer_3.java 外部类示例3
Outer_4.java 外部类示例4
Outer_5.java 外部类示例5
Outer_6.java 外部类示例6
Outer_7.java 外部类示例7
Outer_8.java 外部类示例8
overrideMember_1.java 成员方法覆盖示例1
overrideMember_2.java 成员方法覆盖示例2
overrideMember_3.java 成员方法覆盖示例3
overrideMember_4.java 成员方法覆盖示例4
overrideMember_5.java 成员方法覆盖示例5
Paintable.java 实现了多个接口的方法
PaintedPoint.java 实现了多个接口的方法
Point.java 一个简单的类
PrintColors.java 一个子接口
RainbowColors.java 一个子接口
realPoint.java 一个子类
second.java 属于一个命名包的类
showDiff.java 演示隐藏与覆盖之间的区别
showSomething.java 测试运行时多态
stupid.java 试图覆盖最终方法的类,它有错误
Sub.java 一个简单的子类
Super.java 一个基类
testOverload.java 测试方法的重载示例1
testOverload_1.java 测试方法的重载示例2
testOverload_2.java 测试方法的重载示例3
testOverload_3.java 测试方法的重载示例4
useConstructor.java 使用构造器
useHideMember_2.java 试图使用隐藏的成员变量
useInner.java 使用内部类
示例描述:本章学习数组与字符串。
ArrayString.java 字符串数组
assignTwoDime.java 为二维数组赋值
getMaxElem.java 获取数组中的最大元素
incCapicity.java 演示StingBuffer的容量增长
SortDemo.java 排序示例
travelTwoDime.java 遍历二维数组
traversing.java 遍历一维数组
useStrBuf.java 使用StringBuffer示例
useString.java 使用String示例
YanghuiTri.java 构造和显示杨辉三角
示例描述:本章学习Java的异常处理。
demoException_1.java 异常示例1
demoException_2.java 异常示例2
demoException_3.java 异常示例3
demoException_4.java 异常示例4
demoException_5.java 异常示例5
divZeroError.java 除零异常
hasCheckException.java 检查型异常
MyException.java 用户自定义异常
myInput.java 输入数据示例
nestException_1.java 异常嵌套示例1
nestException_2.java 异常嵌套示例2
nestException_3.java 异常嵌套示例3
outBoundError.java 下标越界异常
throwException.java 抛出异常示例
throwsException.java 声明抛出异常
useMyException.java 使用自定义异常
示例描述:本章学习Java的输入和输出。
CopyFile.java 文件复制实例
dir.java 显示目录下的所有文件和目录
encrypt.java 文件加密
FileList.java 自己实现的一个文件名称枚举类
MyDataIO.java 数据输入输出示例
MyFileOutput.java 将键盘读入的文字保存到文件
MyPipedIO.java 管道流示例
MySequenceIn.java 顺序输入流示例
ObjectFileTest.java 序列化对象示例
ReadAndWrite.java 读入和写出数据
ReadAndWriteFile.java 读入数据写出到文件
Student.java 定义一个用来序列化的类
ThreadIn.java 接收数据用的线程类
ThreadOut.java 发送数据用的线程类
TypeFile.java 显示文件内容的类
useScanner.java 用Scanner接收用户的输入
示例描述:本章学习多线程。
enhanceThread.java 一个自己定义的增强型线程类
ThreadImRunnable.java 继承Runnable接口实现多线程
mulThread.java 创建多个线程对象的类
demoJoin.java 演示使用join()以确保主线程最后结束
clicker.java 一个计数用的线程类
demoPri.java 调用上面这个类设置线程优先级示例
myThread.java 自己定义的一个Thread的子类
mutexThread.java 一个能管理临界区的线程类
demoMutex.java 使用上面这个类来演示线程的互斥
commSource.java 一个共享资源的类
demoSynchrony.java 演示线程的同步
setDataThread.java 设置数据的线程类
readDataThread.java 读取数据的线程类
demoEnhanceThread.java 使用自己定义的线程类示例
producer_consumer.java 演示生产者-消费者线程
consumer.java 消费者线程
producer.java 生产者线程
common.java 公有类
示例描述:本章学习运行时类型识别。
Candy.java 一个用来测试的简单类
changeFields.java 改变属性值示例
Circle.java 一个用于测试的简单类
DumpMethods.java 使用反射机制来获取类中的方法
getClassName.java 利用反射机制获取类的名字
invokeConstructor.java 利用反射机制调用构造器
invokeMethod.java 利用反射机制调用成员方法
listConstructors.java 利用反射机制获取构造器列表
listFields.java 利用反射机制获取成员属性列表
listMethods.java 利用反射机制获取成员方法列表
loadClass.java 动态装载一个类
Shape.java 一个用于测试的简单类
useArray1.java 用反射机制使用数组示例1
useArray2.java 用反射机制使用数组示例2
示例描述:本章学习泛型。
demoBounds.java 演示有界类型
demoForceChange.java 演示强制类型转换
demoGeneric.java 泛型类的使用示例
demoGenIF.java 测试泛型类
demoGenMethods.java 泛型方法示例
demoHerit_1.java 泛型类继承示例1
demoHerit_2.java 泛型类继承示例2
demoRTTI_1.java 泛型类的类型识别示例1
demoRTTI_2.java 泛型类的类型识别示例2
demoWildcard.java 通配符使用示例
demoWipe.java 擦拭示例
derivedGen.java 泛型父类继承示例
derivedNonGen.java 非泛型父类继承示例
foo.java 一个有错误的类
Gen.java 无限界的泛型擦拭
Generic.java 一个简单的泛型类
genMethod.java 一个泛型方法
GenStr.java 有限界的泛型擦拭
MinMax.java 泛型接口示例
MyClass.java 实现一个泛型接口
nonGen.java 以非泛型类为父类
simpGen.java 使用泛型类示例
Stats.java 一个有界类泛型
superGen.java 父类是泛型
twoGen.java 有两个参数的泛型类
示例描述:本章学习集合。
CompareScore.java 实现比较器接口
demoAlgorithm.java 集合中简单算法示例
demoArrayList.java 链表使用示例
demoBinSearch.java 二分查找示例
demoEnumSet.java 枚举类型示例
demoHashMap.java 哈希映射示例
demoHashSet.java 哈希集合示例
demoSort.java 排序示例
demoTreeMap.java 树映射示例
demoTreeSet.java 树集合示例
demoVector.java 向量使用示例
job.java 模拟操作系统的进程调度
monkey.java 用链表求猴子选大王
myCompare.java 自己实现的比较器接口
reverseString.java 利用栈将字符串逆序输出
scheduling.java 模拟操作系统的作业调度过程
showClothValue.java 根据用户输入型号输出相应的价格
Size.java 一个枚举类
Student.java 用于记录学生信息的类
示例描述:本章学习类型包装器、自动装箱和元数据。
demoAnno.java 给方法做注释示例
demoAutoBox_1.java 自动装/拆箱机制示例1
demoAutoBox_2.java 自动装/拆箱机制示例2
demoAutoBox_3.java 自动装/拆箱机制示例3
demoInteger.java 整数类型包装器使用示例
demoSingle.java 单成员注释使用示例
DeprecatedClass.java Deprecated注释示例
InProgress.java Documented元注释使用示例
Marker.java 一个被注释的接口
Meta.java 利用反射机制获取方法的注释
MetaAll.java 获取所有注释示例
MyAnno.java 包含了默认值的注释
MyMarker.java 标记注释使用示例
MySingle.java 单成员注释使用示例
OverrideTester.java Override注释示例
SuppressWarningsTester.java SuppressWarnings注释示例
TODO.java Target元注释使用示例
What.java 显示全部注释
示例描述:本章学习常用工具类。
checkEmail.java 利用正则表达式检验Email的合法性
currentTime_1.java 显示时间示例程序1
currentTime_2.java 显示时间示例程序2
currentTime_3.java 显示时间示例程序3
DateAndTime.java 用Calendar显示当前的日期和时间
demoFmtTime.java 使用时间格式转换符输出日期和时间
demoFormatter.java Formatter简单输出示例
demoGroup.java 组匹配使用示例
demoMathing.java 匹配方法使用示例
demoMemory.java 内存管理示例程序
demoPattern_1.java Pattern使用示例1
demoPattern_2.java Pattern使用示例2
demoRandom.java 产生随机数序列示例
demoReplace.java 替换方法使用示例
demoRound.java 取整函数使用示例
elapsed.java 计算程序运行时间
exitJVM.java 从子线程中退出虚拟机
getPI.java 利用随机数求π值
progPI.java 利用反正切函数求π的值
runNotepad.java 启动记事本
showCalendar.java 用GregorianCalendar实现一个万年历
showProperties.java 获取环境属性
textToTime.java 从文本串创建日期对象
useLog.java 利用换底公式求任意对数值
示例描述:本章学习GUI程序设计。
addNodeInJTree.java 在JTree中增加节点示例
AlarmClock.java 小闹钟程序
AWTComponents.htm 为显示AWT组件而编制的网页文件
AWTComponents.java AWT组件示例
AWTFrame.java 用AWT编写的一个简单窗口
CheckAchromatopsiat.java 色盲检测程序
demoBorderLayout.java 边框布局使用示例
demoCardLayout.java 卡片布局使用示例
demoGridBagLayout.java 增强网格布局使用示例
demoGridLayout.java 网格布局使用示例
demoJApplet.htm 运行JApplet的网页文件
demoJApplet.java JApplet使用示例
demoJButton.java 按钮使用示例
demoJCheckbox.java 复选框使用示例
demoJComboBox.java 组合框使用示例
demoJDialog.java 对话框使用示例
demoJFrame.java JFrame简单使用示例
demoJLabel_1.java 图像标签使用示例
demoJLabel_2.java 改变标签上鼠标形状示例
demoJList.java 列表框使用
demoJMenu.java 菜单使用示例
demoJPanel.java 面板使用简单示例
demoJRadioButton.java 单选按钮使用示例
demoJScrollPane_1.java 在JScrollPane创建时添加组件示例
demoJScrollPane_2.java 通过add()方法添加组件示例
demoJSplitPane_1.java 分隔板简单示例1
demoJSplitPane_2.java 分隔板简单示例2
demoJTabbedPane.java 选项板使用示例
demoJTable_1.java 表格使用示例1
demoJTable_2.java 表格使用示例2
demoJTable_3.java 表格使用示例3
demoJTable_4.java 表格使用示例4
demoJTable_5.java 表格使用示例5
demoJText.java 文本框和密码框使用示例
demoJTextArea.java 文本区使用示例
demoJToolBar.java 工具栏使用示例
demoJTree.java 创建JTree示例
ExampleFileFilter.java Sun公司提供的一个文件名过滤器
findDialog.java 查找对话框
fontDialog.java 字体选择对话框
MyTableModel.java 本类实现了一个表格用的模型,取代默认的模型
Notebook.java 记事本
painting_1.java 在面板上画出简单图形示例1
painting_2.java 在面板上画出图形示例2
reMulEvent.java 响应单击按钮事件
showTriDialog.java 用系统预定义的对话框
本章下面还有一些编程要用到的图片和声音文件,不一一列出。
示例描述:本章学习多媒体程序设计。
building.java 调用另外一个houseCanvas类画出一栋房子
CombinerCanvas.java 编写自己的画布,所要显示的图片在此画布上显示
CombinPic.java 合成两幅图片
DrawArcs.java 画椭圆和圆弧示例
DrawLines.java 画直线示例
DrawPoly.java 画多边形示例
DrawRects.java 画矩形示例
fadeInOut.java 淡入淡出效果示例
FillArea.java 填充图形示例
FontsCanvas.java 自行管理字体的画布
GetFonts.java 获取系统中安装的字体示例
GrayFilter.java 自己实现的GrayFilter类
GrayModel.java 实现一个具备灰度变换功能的Model
houseCanvas.java 用直线画出一栋房子
illumination.java 光照特效示例
LightingLiteral.java 字体特效显示示例
ManageFonts.java 自行管理字体示例
mixing.java 显示色彩混合效果
playAudio.java 在Application中播放声音文件
playMP3.java 增强的声音播放文件
playMusic.htm 可以播放背景音乐的一个网页
playMusic.java 利用AudioClip播放声音文件
playVideo.java 媒体播放器编写示例
ResizeOval.java 缩放图形示例
ShowFonts.java 建和使用字体示例
SoundBase.java 将Java Sound API封装在一个线程中
TransparencyExample.java 为实现色彩混合效果而定义的画布
viewPic.java 用标签显示图像示例
本章下面还有一些编程要用到的图片和声音文件,不一一列出
示例描述:本章学习数据库程序设计。
AddressList.java 学生信息管理系统实例
deleteData.java 从数据库中删除记录
FirstExample.mdb 本章用到的数据库文件
insertData.java 向数据库中添加新数据
queryData.java 查询数据示例
updateData.java 修改数据示例
示例描述:本章学习C/S网络程序设计。
chatClient.java 聊天客户端程序
chatServer.java 聊天服务端程序
Client.java 一个简单的客户端程序
DownFile.java 文件下载示例
GetHostName.java 根据IP查找主机名
GetIP.java 根据域名查找IP地址
GetMyIP.java 获取本机IP地址
MultiServer.java 可以响应多个客户端的服务程序
myBrowser.java 一个简单的浏览器
Server.java 一个简单的服务端程序
ServerThread.java 一个服务端的线程类
UDPChat.java 用UDP实现的聊天程序示例
示例描述:本章学习JSP程序设计。本章所有文件均已经按照Tomcat网站部署的要求放置在各自的目录下,然后打包成ZIP文件。读者只需要解包后放置在某一分区中,然后在Tomcat中配置好入口就可以使用。
下面的文件均放置在ROOT目录下面
ArbitraryObject.java 实现一个事件监听者接口的类
calendar.jsp 用JSP实现的日历
count.txt 站点计数器保存的数据文件
counter.jsp 用JSP实现的计数器
faq.java 连接数据库用的JavaBean
leaveword.htm 留言板的主页面
Model.java 自己定义的事件源类
ModelChangedListener.java 自己定义的一个事件监听者接口
MouseMovedExampleEvent.java 事件状态对象示例
MouseMovedExampleListener.java 鼠标事件监听者接口与事件监听者示例
OurButtonCustomizer.java 实现一个“按钮”Beans的定制器
query.jsp 数据库查询程序
saveword.java 用于保存记录的JavaBean
saveword.jsp 后台保存数据的JSP文件
viewword.jsp 查看留言的JSP页面
WeekDayBeanInfo.java 实现BeanInfo接口示例
WeekDayEditor.java 实现属性编辑器接口
下面的文件均存放在chat目录下,是聊天室的组成文件。
chatreg.java 用户注册用到的JavaBean文件
chatreg.jsp 用户注册的前台JSP文件
chatregcof.jsp 用户注册检查JSP文件
chatroom.jsp 聊天室的主页面
confirm.jsp 检查登录是否正确的JSP文件
in.jsp 即将进入聊天室前的提示页面
listuser.jsp 显示聊天室内的所有用户名的JSP文件
logout.jsp 清除用户的相关信息
netchat.jsp 用户进入聊天室的界面文件
showmsg.jsp 显示各个用户所说的话
talk.jsp 用户聊天用的JSP文件
示例描述:本章是一个IM软件的完整代码。
ChatFrame.java 聊天用的主界面程序
ClientManageFrame.java 是好友管理窗口,也是客户端程序的主窗口
DBConnection.java 连接数据库用的JavaBean
FindUserDlg.java 查找好友对话框
FindUserInfo.java 显示用户基本信息
FriendLabel.java 在list列表中显示用户的头像和字符信息
Login.java 用户登录界面
LoginUser.java 定时器的任务类,用于定时获取上线的用户的信息
MyInfo_AboutBox.java 显示作者信息
ReceiveOthersDialog.java 当用户收到陌生人的消息时,这个类向用户提示
RegisterDialog.java 用户注册面板
Server.java 提供各种服务的类
ServerFrame.java 服务器端的主界面
ServerThread.java 与客户端通讯的线程
SetCenter.java 将窗口设置在屏幕中央的类
showTimeTask.java 刷新时间的类
StartServer.java 启动服务器的主类
UpdateDialog.java 更新用户信息的对话框
UserInfo.java 获取用户信息的类
UserInfoBean.java 保存用户信息的一个JavaBean
查看InvocationHandler的接口说明
InvocationHandler is the interface implemented by the invocation handler of a proxy instance.
Each proxy instance has an associated invocation handler. When a method is invo...
String doSomething(String thingsNeedParm);
String doOtherNotImportantThing(String otherThingsNeedParm);
然后是代理接口的...
Invoke() 方法是 Unity3D 的一种委托机制
如: Invoke("SendMsg", 5); 它的意思是:5 秒之后调用 SendMsg() 方法;
使用 Invoke() 方法需要注意 3点:
1 :它应该在 脚本的生命周期里的(Start、Update、OnGUI、FixedUpdate、LateUpdate)中被调用;
2:Invoke(); 不能接受含有 参数的方
对于外部调用的动态库应用
反射时要用到Assembly.LoadFile(),然后才是获取类型、执行
方法等;
当用
反射创建当前程序集中对象实例或执行某个类下静态
方法时只需通过Type.GetType("类的完整名")。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
Java 的 `invoke` 方法是 java.lang.reflect 包中 Method 类的一个方法,可以动态地调用一个方法。使用方法如下:
1. 获取要调用的类的 Class 对象。
2. 通过 Class 对象的 `getMethod` 方法获取要调用的方法的 Method 对象。
3. 通过 Method 对象的 `invoke` 方法调用该方法。
示例代码:
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args) throws Exception {
Class clazz = Class.forName("example.Example");
Object obj = clazz.newInstance();
Method method = clazz.getMethod("methodName", new Class[]{});
method.invoke(obj, new Object[]{});
注意:使用 `invoke` 方法可能会抛出异常,因此需要在代码中进行异常处理。
Hugo_PureJ:
java两个线程交替打印0~100
BYJZX:
java两个线程交替打印0~100
Insist_shanshan:
N皇后和N皇后2
不正经的kimol君:
leetcode课程表(图论邻接表)
Insist_shanshan: