`
shameant
  • 浏览: 58802 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JAVA reject

阅读更多

java的反射在java中是一项很有用的功能,hibernate和spring中都使用了该功能。为了方便大家理解java的反射,下面我写了一个简单的例子,希望对大家的学习有所帮助!

实现反射的类主要包括以下几个:
1、Class 表示一个类的类
2、Field 表示属性的类
3、Method 表示方法的类
4、Constrctor 表示类的构造方法的类
Class类位于java.lang包中,后面三个类都位于java.lang.reflect包中。
下面请看例子,注释在程序中:
/**

 * @description 这是java反射的演示示例,本程序完成的功能是复制一个简单的bean对象。假定bean对象的每个属性都有getXxx()和setXxx()方法。

 * @author fangjian 2008.06.11

 */



import java.lang.reflect.*;



public class ReflecTester {

	public Object copy(Object object) throws Exception

	{

		//Class类是java反射中的核心类,有几个常用方法:

		//1、getName() 以String形式返回类的名称

		//2、getFields()返回所有public类型的属性 

		//3、getField(String name)返回指定名称的属性对象 

		//4、getDeclaredFields() 以数组形式返回类的所有属性对象

		//5、getMethod(String name, Class[] parameterTypes) 返回指定的方法对象,name表示方法名称,parameterTypes表示参数类型

		//6、getConstructors()获得默认的构造方法

		//7、getConstructor(Class[] parameterTypes)获得特定的构造方法,parameterTypes为构造方法的参数类型

		

		//获得传入的对象的类型(getClass()方法用于获得对象的类型,它是在Object类中定义的,因此任何对象都可以调用)

		Class classType=object.getClass();

		System.out.println(classType.getName());

		

		//根据传入对象的类型,构造一个新的对象

		Object objectCopy=classType.newInstance();

		

		//取得传入的对象的所有属性,本例包括name和age

		Field fields[]=classType.getDeclaredFields();

		

		//遍历每个属性

		for(int i=0;i<fields.length;i++)

		{

			//取得一个属性对象

			Field field=fields[i];

			//取得属性的名字,例如:name

			String fieldName=field.getName();

			//取得属性名称的第一个字母,然后转换成大写,例如:N

			String firstChar=fieldName.substring(0, 1).toUpperCase();

			//构造一个get方法名,例如:getName

			String getMethodName="get"+firstChar+fieldName.substring(1);

			//构造一个set方法名,例如:setName

			String setMethodName="set"+firstChar+fieldName.substring(1);

			

			//根据方法的名字,取得Method对象,下面两行语句分别取得了get和set方法对象

			Method getMothod=classType.getMethod(getMethodName, new Class[]{});

			Method setMothod=classType.getMethod(setMethodName, new Class[]{field.getType()});

			

			//Method对象的invoke方法,用于动态的执行指定对象的方法。它的第一个参数表示拥有该方法的对象,第二个

			//参数表示该方法的参数

			

			//根据传入的对象及其相应的方法对象,就可以调用get方法对象取得相应的属性值了,例如:zhaona

			Object value=getMothod.invoke(object, new Object[]{});

			//根据新构造的对象,调用set方法对象,就可以为其设置相应的属性值了,例如:zhaona

			setMothod.invoke(objectCopy, new Object[]{value});			

		}

		return objectCopy;

	}

	

	public static void main(String[] args) 

	{

		//新建一个bean类,并设置值

		TestBean tb=new TestBean();

		tb.setName("zhaona");

		tb.setAge(26);

		

		//实例化当前类

		ReflecTester rt=new ReflecTester();

		try {

			//执行copy方法,将新建的bean类传入

			TestBean tbCopy=(TestBean)rt.copy(tb);

			//测试返回的类的各个属性是否与原类一致

			System.out.print(tbCopy.getName()+"-----"+tbCopy.getAge());

		} catch (Exception e) {

			e.printStackTrace();

		}

		

	}

}

//测试使用的类

class TestBean{

	String name;

	int age;

	public int getAge() {

		return age;

	}

	public String getName() {

		return name;

	}

	public void setAge(int age) {

		this.age = age;

	}

	public void setName(String name) {

		this.name = name;

	}

}
 
分享到:
评论

相关推荐

    reject-用于Java和Android的依赖注入框架

    `Reject` 是一个专为Java和Android开发设计的轻量级依赖注入(Dependency Injection,简称DI)框架。依赖注入是一种软件设计模式,它可以帮助开发者解耦组件,使得代码更易于测试和维护。通过将依赖关系从对象内部...

    radius客户端java版本

    - 通常,Java Radius客户端库会封装基本的网络通信细节,提供API来构建和解析Radius报文,包括认证请求(Access-Request)、认证响应(Access-Accept/Reject)等。 3. **源代码分析**: - 源代码中可能包含用于...

    java的五子棋程序

    - 如果消息为 `/reject`,则提示连接被拒绝,并恢复界面状态。 - 如果消息以 `/peer` 开头,则设置对手的信息和当前颜色(此处仅展示了部分代码)。 ### 技术要点 1. **多线程**:通过继承 `Thread` 类来实现多...

    JAVA多人在线五子棋源代码

    3. **/reject**:如果客户端尝试加入或创建一个已经满员的游戏,服务器将发送此命令。 - 显示错误信息。 - 关闭游戏按钮,并重新启用“加入游戏”和“创建游戏”按钮。 4. **/peer**:当客户端收到此命令时,表示...

    java网络五子棋源代码

    - 游戏拒绝:`/reject`命令表示用户尝试加入的游戏已被拒绝,客户端将更新状态并重新启用游戏控制按钮。 - 对手信息:`/peer`命令告知客户端其对手的名称,进一步初始化游戏状态。 #### 3. **网络通信机制** 本...

    自动机 DFA java程序

    7. **调试与测试**:对于给定的DFA,通过提供不同输入序列(accept和reject trace)进行测试,可以帮助确保程序正确地实现了自动机的行为。 通过理解和实现DFA的Java程序,你可以深入理解形式语言的理论,并学习...

    自定义实现Java线程池

    throw new RejectedExecutionException("command is too much, reject execute"); } private void addThread(Runnable task) { // 为代码健壮性考虑,常规参数校验 if (task == null) throw new ...

    java网络五子棋的源代码

    ### Java网络五子棋源代码解析 #### 一、项目概述 本项目为一个基于Java语言实现的网络五子棋游戏。它通过客户端与服务器之间的通信来实现多人在线对弈的功能。该程序主要包括以下几个核心部分:`chessClient.java...

    五子棋Java源代码

    《五子棋Java源代码解析》 五子棋是一种经典的双人对弈游戏,而将它实现为Java程序,能够帮助我们深入理解网络编程、图形用户界面(GUI)设计以及多线程等核心Java概念。这里我们将分析一个简单的五子棋Java源代码...

    Java中有界队列的饱和策略(reject policy)原理解析

    主要介绍了Java中有界队列的饱和策略(reject policy)原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    多用户五子棋java实现

    - 如果接收到的消息为 `/reject`,则显示无法加入游戏的信息。 - 如果接收到的消息以 `/peer` 开头,则获取对战对手的名称,并根据客户端的角色(服务器或客户端)设置游戏状态。 ##### 2. chessInterface.java ...

    linux下java和tomcat配置 非常详细 适合菜鸟)

    - 在文件中找到`-A INPUT -j REJECT --reject-with icmp-host-prohibited`这一行,并在其上方添加: ```bash -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT ``` - 重启防火墙使新规则...

    java网络五子棋.doc

    - 如果消息为 `/reject`,则提示用户无法加入游戏。 - 更新状态栏文本,禁用某些按钮。 - 如果消息以 `/peer` 开始,则设置对手的名称。 - 提取对手名称,并进行相应的逻辑处理。 ##### 2. **chessInterface....

    Java编程的五子棋游戏

    - 收到 `/reject` 消息时,表明游戏请求被拒绝,此时会禁用某些控制按钮并提示用户。这一机制可以确保用户了解当前的游戏状态。 2. **游戏逻辑处理**: - 当收到 `/peer` 消息时,游戏会根据当前的角色(服务器端...

    基于JAVA的课程设计-五子棋

    如果收到`/reject`,则表示加入游戏的请求被拒绝,并更新用户界面;而`/peer`消息则指示了对手的名称。 2. **chessinterface.java** - 客户端界面 此文件包含客户端的图形用户界面(GUI)实现,可能包括棋盘、聊天...

    vue axios v0.19.2 版本,java 開發 前端 下載

    return Promise.reject(error); }); ``` 6. **错误处理**:如上所示,Axios的`.catch`方法可以捕获请求错误。在复杂的场景下,可以使用`.then`链式调用来处理不同的响应状态。 7. **使用Vue插件**:Vue社区还...

    java编写的五子棋

    - 如果接收到的消息为`/reject`,则显示拒绝信息并重新启用创建和加入游戏按钮。 - 如果接收到的消息以`/peer`开头,则处理对手的信息。 #### 2. `chessServer.java` - **功能**: 服务端主类,负责接收客户端连接...

    java 小游戏(5子棋的实现)

    else if(recMessage.equals("/reject")) { try { chessclient.chesspad.statusText.setText("不能加入游戏"); chessclient.controlpad.cancelGameButton.setEnabled(false); chessclient.controlpad....

    基于网络的java网络五子棋

    } else if (recMessage.equals("/reject")) { // 处理拒绝连接的情况 // ... } else if (recMessage.startsWith("/peer")) { // 设置对手名称等信息 // ... } } } ``` ##### 2. `chessServer.java` - **...

    基于java的网络五子棋的学习讲解文档

    例如,当服务器发送`/reject`消息时,客户端会更新界面状态,禁用某些按钮并显示相应提示。 8. **并发控制**:由于可能存在多个客户端同时操作,因此需要考虑并发控制,确保数据的一致性和正确性。这可能涉及到同步...

Global site tag (gtag.js) - Google Analytics