假定你的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材质反射基础》 在虚拟现实(VR)和3D渲染领域,材质的反射是决定场景真实感的重要因素之一。本教程将详细介绍如何在VR环境中设置和调整材质的反射属性,以创建逼真的视觉效果。 首先,我们需要设置渲染参数。...
本文将深入探讨VR材质的反射基础,以及如何通过一系列步骤来设置和优化反射效果。 首先,我们要理解VR材质中的全局开关(Global switches)。"Default lights"选项控制是否使用场景中的默认灯光。关闭这个选项意味...
【光的反射基础资料知识讲解】 光的反射是光学领域中的基本现象,指的是光线射向物体表面时,一部分光线被物体表面反射回原来的空间。这一现象涉及到一系列关键概念和定律,对于理解和应用光学原理至关重要。 **...
反射基础”这一课程中,徐培成老师会深入讲解这个核心概念。 反射的基石是`java.lang.Class`类,它代表了Java运行时的类型信息。通过`Class`对象,我们可以获取类的构造器、方法、字段等信息,甚至可以在运行时动态...
这篇学习笔记将带你深入了解C#反射的基础知识,帮助你掌握这一关键技能。 1. **程序集(Assembly)**:程序集是.NET应用程序的基本部署和版本控制单位,包含了元数据和IL(中间语言)代码。你可以通过`System....
内含反射的定义,反射的价值,,反射使用的方法以及xml文件的定义,价值,特点详解
Java 反射基础知识点 Java 反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;并且能改变它的属性。下面我们来一起学习一下吧。 一、...
Java反射基础入门 Java反射机制是Java编程语言中一个强大的特性,它允许程序在运行时检查和操作类、接口、对象等的内部信息。本文将详细介绍Java反射的基础知识,包括反射的基本概念、工作原理、使用方法及优缺点。...
关于标签"反射基础",在Java反射基础中,还包括了泛型信息的获取、接口实现类的判断、注解的处理等内容: 1. 泛型信息:虽然Java泛型在编译后会被擦除,但通过反射仍可以获取到泛型的实际类型。 2. 接口实现:`Class...
### 反射基础篇文末总结 反射是Java中一个非常强大的特性,它提供了运行时操作类的能力。虽然反射可以带来很多便利,但也需要注意其潜在的问题,合理地使用反射,可以使我们的代码更加灵活和高效。在实际开发中,...
【光的反射基础巩固练习】 光的反射是光学的基本概念,涉及到光线与物体表面相互作用时的角度关系。在光的反射中,有以下几个关键知识点: 1. 入射角:光线与法线(垂直于反射面的直线)之间的角度称为入射角。 2....
#### Java反射基础 Java反射主要依赖于以下几类API: - `java.lang.Class`: 提供了获取类信息的方法。 - `java.lang.reflect.Field`: 允许访问和修改类的字段。 - `java.lang.reflect.Method`: 用于调用类的方法。 ...
一、反射基础 1. 类与对象的元数据:在Java中,每个类都由Class对象表示,这个对象包含了关于类的所有信息,如类名、构造器、方法、字段等。通过Class类,我们可以获取到运行时的类信息。 2. 获取Class对象:有三...
1. **反射基础** 反射是.NET框架提供的一种特性,通过System.Reflection命名空间中的类来实现。主要类包括Assembly(程序集)、Type(类型)、ConstructorInfo(构造函数信息)、MethodInfo(方法信息)和...
1. PHP反射基础 反射API是PHP内建的一组类,它提供了对类、接口、函数、方法和常量等对象的元数据访问。这些类包括`\ReflectionClass`、`\ReflectionFunction`、`\ReflectionMethod`等,它们分别用于获取关于类、...
变化,需要更换不同的类实例化,频繁修改源...• 反射基础篇中,通常会涵盖上述内容,并在文末进行总结,帮助读者理解和掌握反射的核心概念和使用技巧。在面试或深入学习开源框架时,对反射的理解和运用是非常重要的。
1. 反射基础: Java反射机制主要基于`java.lang.Class`类和`java.lang.reflect`包中的接口和类。`Class`对象代表了运行时的类信息,通过`Class.forName()`方法可以获取到类的`Class`对象。此外,`java.lang.reflect...
1. **反射基础**:C#中的System.Reflection命名空间包含了所有与反射相关的类。其中,Type类是反射的核心,它可以表示任何.NET类型。通过Assembly.Load或typeof运算符可以获取Type对象。 2. **PropertyInfo和...
5. 反射基础:理解反射的概念,学习Class类和反射API的使用。 6. 动态方法调用:使用Method类调用类的方法,包括静态方法和实例方法。 7. 访问私有字段:通过反射访问和修改私有字段的值。 8. 反射与设计模式:如...