栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

20220420java第二阶段----webserver、反射、注解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

20220420java第二阶段----webserver、反射、注解

webserver WebServer主类


WebServer是一个Web容器,实现了Tomcat中的基础功能,通过这个项目的学习了解Tomcat的
底层工作逻辑。
Web容器是一个Web服务端程序,主要负责两方面的工作:
1:管理部署在容器中的所有网络应用
2:与客户端(通常就是浏览器)进行TCP通讯,并基于HTTP协议进行应用交互,使得客户端可以
  通过网络远程调用容器下不同网络应用中的内容。
  网络应用(webapp):包含的内容大致有:网页,处理业务的代码,其他资源等。就是俗称的"网站"

与客户端交流的流程分成三步:1:解析请求2:处理请求3:发送响应

每个请求由三部分构成:请求行 消息头 消息正文

每个响应由三部分组成: 状态行,响应头,响应正文

反射

反射是java的动态机制,可以允许我们在程序[运行期间]再确定实例化,调用某个方法,操作某个属性。反射机制大大的提高了代码的灵活度,但是会有更高的系统开销和较慢的运行效率。 因此反射机制不能被过度的使用。

类对象  Class的实例

JVM在加载一个类的class文件时,就会同时创建一个Class的实例,使用该实例记录加载的
类的一切信息(类名,有哪些属性,哪些方法,哪些构造器等)。并且每个被JVM加载的类都有
且只有一个Class的实例与之对应。
反射的第一步就是获取要操作的类的类对象,以便程序在运行期间得知要操作的类的一切信息
然后对其进行响应的操作。

获取一个类的类对象的常见方式:
1:类名.class
例如:
    Class cls = String.class;
    Class cls = int.class;
    注意:基本类型获取类对象只有这一种方式。

2:Class.forName(String className)
例如:
    Class cls = Class.forName("java.lang.String");
    这里传入的类名必须是类的完全限定名,即:包名.类名

3:还可以通过类加载器形式完成

cls.getName(); 获取当前类对象所表示的类的完全限定名

cls.getSimpleName() 仅获取类名(不包含包名)

Method[] getMethods() 获取当前类对象所表示的类中定义的所有公开方法,包含从超类继承下来的方法

java.lang.reflect.Method类,方法对象
该类的每一个实例用于表示某个类中定义的一个方法,通过它可以获取其表示的方法中的
相关信息(方法名,参数个数,参数类型,返回值类型等等,并且还可以调用这个方法)

使用反射机制实例化对象

1获取要实例化的类的类对象
     Class cls = Class.forName("reflect.Person");

2类对象直接提供了可以通过公开的无参构造器实例化的功能
Object obj = cls.newInstance();

使用有参构造器进行实例化

  cls.getConstructor();//不穿任何参数时获取的仍然是无参构造器
        Constructor c = cls.getConstructor(String.class,int.class);
        //new Person("王五",55);
        Object obj = c.newInstance("王五",55);//实例化时要传入构造器要求的实际参数

 使用反射机制调用方法

  //2调用方法
        //2.1通过类对象获取要调用的方法
//        Method method = cls.getMethod("sayHello");//获取的是无参的sayHello方法
        Method method = cls.getMethod(methodName);
        //2.2通过获取的方法对象来调用该方法
//        obj.sayHello()  因为obj指向的是及一个Person对象,因此反射机制可以调用到它的sayHello()
        method.invoke(obj);

调用有参方法

 Method method = cls.getMethod("doSomeThing", String.class);
method.invoke(obj,"玩游戏");//p.doSomeThing("玩游戏");

区别:

getMethod(),getMethods()
它们都是获取Class所表示的类的所有公开方法,包含从超类继承的

getDeclaredMethod(),getDeclaredMethods()
这两个方法获取的都是Class所表示的类中当前类自身定义的方法。包含私有方法

method.setAccessible(true);//强行打开dosome方法的访问权限

main方法上的参数String[] args的作用是

在命令行上使用java命令指定当前类时,可以传递参数进来,此时会被main上的String[] args接收

两个开发中常用的相对路径

//1这里的当前目录表示的是当前ReflectDemo7这个类所在最外层包的上一级目录
File dir = new File(
        ReflectDemo7.class.getClassLoader().getResource(".").toURI()
);

//2这里的当前目录就是当前类所在的目录
File dir = new File(
        ReflectDemo7.class.getResource(".").toURI()
);

 注解
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/830273.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号