假定你的web application 名称为news,你在浏览器中输入请求路径:
http://localhost:8080/news/main/list.jsp
则执行下面向行代码后打印出如下结果:
1、 System.out.println(request.getContextPath());
打印结果:/news
2、System.out.println(request.getServletPath());
打印结果:/main/list.jsp
3、 System.out.println(request.getRequestURI());
打印结果:/news/main/list.jsp
4、 System.out.println(request.getRealPath("/"));
打印结果:F:\Tomcat 6.0\webapps\news\test
request.getScheme();
返回的协议名称,默认是http
request.getServerName()
返回的是你浏览器中显示的主机名,你自己试一下就知道了
getServerPort()
获取服务器端口号
类Class:
https://blog.csdn.net/u011240877/article/details/54604146 (类、属性、方法)
//使用反射第一步:获取操作类MethodDemoFieldDemo所对应的Class对象
Class < ?>cls = Class.forName("com.testReflect.MethodDemo");
//使用MethodDemo类的class对象生成 实例
MethodDemo factory = (MethodDemo)c.newInstance();
1. 使用Class.forName( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象。
2.Class.forName()的作用是要求JVM查找并加载指定的类,首先要明白,java里面任何class都要装载在虚拟机上才能运行,而静态代码是和class绑定的,【class装载成功就表示执行了你的静态代码了】,【而且以后不会再走这段静态代码了】。
Class.getName():以String的形式,返回Class对象的“实体”名称;
返回com.test.Apple
Class.getSimpleName():获取源代码中给出的“底层类”简称。
返回Apple
clazz.getInterfaces()方法: 获取类实现的接口
如:
public class Person implements eagle,whal
Class<?> string01 = person.getClass().getInterfaces()[0];
//获得person对象所实现的第一个接口
属性Field:
http://www.51gjie.com/java/791.html
https://blog.csdn.net/u014102846/article/details/81481126
1. Class.getDeclaredField(String name);
返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段(包括私有成员)。
2. Class.getDeclaredFields();
返回 Field 对象的一个数组,该数组包含此 Class 对象所表示的类或接口所声明的【所有字段】(包括私有成员)。
3. Class.getField(String name);
返回一个 Field 对象,它反映此 Class 对象所表示的类或接口的指定公共成员字段。
4. Class.getFields();
返回一个包含某些 Field 对象的数组,该数组包含此 Class 对象所表示的类或接口的所有【可访问公共字段】。
主要方法
getType(): 【获取属性声明时类型对象】(返回class对象)
getGenericType() : 返回属性声的Type类型
getName() : 获取属性声明时名字
getAnnotations() : 获得这个属性上所有的注释
getModifiers() : 获取属性的修饰
isEnumConstant() : 判断这个属性是否是枚举类
isSynthetic() : 判断这个属性是否是 复合类
get(Object obj) : 【取得obj对象这个Field上的值】
返回指定对象obj上此 Field 表示的字段的值
set(Object obj, Object value) : 【向obj对象的这个Field设置新值value】
将指定对象变量上此 Field 对象表示的字段设置为指定的新值
Method:
http://www.51gjie.com/java/796.html
获取Method类对象
一共有4种方法,全部都在Class类中:
1. getMethods(): 获得类的public类型的方法
2. getMethod(String name, Class[] params): 获得类的特定方法,name参数指定方法的名字,params参数指定方法的参数类型
3. getDeclaredMethods(): 获取类中所有的方法(public、protected、default、private)
4. getDeclaredMethod(String name, Class[] params): 获得类的特定方法,name参数指定方法的名字,params参数指定方法的参数类型
Method.invoke() 反射调用一个方法,当然一般只用于正常情况下无法直接访问的方法(比如:private 的方法,或者无法或者该类的对象)。
参数:
第一个参数是方法属于的对象(如果是静态方法,则可以直接传 null)
第二个可变参数是该方法的参数
A a1 = new A(); Class c = a1.getClass(); // 2.获取方法 名称和参数列表来决定 getMethod获取的是public的方法 getDelcaredMethod自己声明的方法 try { System.out.println("==================调用print(int a, int b)方法"); // Method m = c.getMethod("print", new Class[]{int.class,int.class}); Method m = c.getMethod("print", int.class, int.class); // 方法的反射操作 // a1.print(10, 20);方法的反射操作是用m对象来进行方法调用 和a1.print调用的效果完全相同 // 方法如果没有返回值返回null,有返回值返回具体的返回值 // Object o = m.invoke(a1,new Object[]{10,20}); Object o = m.invoke(a1, 10, 20); }
java.lang.reflect.Method.getParameterTypes()方法返回一个Class对象数组,它们表示【此Method对象的方法的形式参数类型】。如果底层方法没有参数,则返回长度为0的数组。
即方法上参数类型:
import java.lang.reflect.Method; public class MethodDemo { public static void main(String[] args) { Method[] methods = SampleClass.class.getMethods(); Class[] parameterTypes = methods[1].getParameterTypes(); for(Class parameterType: parameterTypes){ System.out.println(parameterType.getName()); } } } class SampleClass { private String sampleField; public String getSampleField() { return sampleField; } public void setSampleField(String sampleField) { this.sampleField = sampleField; } }
结果:
java.lang.String
相关推荐
VR材质反射基础.docxVR材质反射基础.docx
VR材质反射基础.pdfVR材质反射基础.pdf
光的反射基础资料知识讲解.doc
【IT十八掌徐培成】Java基础第25天-01.反射基础.zip
C#反射学习,自己的学习笔记,涵盖了动态加载程序,每一小结以虚线结束,认真看完也就差不多学完了反射主要的类
内含反射的定义,反射的价值,,反射使用的方法以及xml文件的定义,价值,特点详解
- 反射基础篇文末总结 反射是一个非常重要的知识点,在学习Spring 框架时,Bean的初始化用到了反射,在破坏单例模式时也用到了反射,在获取标注的注解时也会用到反射······ 当然了,反射在日常开发中,我们...
Java基础 反射篇 反射的思想及作用 反射的基本使用 获取类的 Class 对象 构造类的实例化对象 获取一个类的所有信息 获取类中的变量(Field) 获取类中的方法(Method) 获取类的构造器...反射基础篇文末总结
java反射入门 实现java反射的两种模式
C# 反射的基本应用
文章目录Java基础之反射1 前言2 反射的基本概念3 reflection的工作机制4 构造Class对象方式5 Java反射机制操作的基础套路5.1 Java中的类反射5.2 Java反射机制获取类中构造方法的信息5.3 获取类中方法的信息6 Java...
反射操作工具,基础数据转换
jOOR 在java原生的反射基础上进行了简单的封装,使得反射使用方便不少! 举个简单的列子,供大家参考。 java 原生反射写法: try { Method m1 = department.getClass().getMethod("getEmployees"); Employee ...
北大青鸟ACCP6.0 第三学期 Y2 JAVA方向 reflection 反射 基础复习 上课示例
主要介绍了PHP 反射的相关资料,帮助大家回顾和理解PHP的相关知识,感兴趣的朋友可以了解下
java基础,反射枚举基础,自己总结的笔记。
Java反射就是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。下面我们来一起学习一下吧
本工程为Java反射机制 基础知识demo