Javaweb知识点
程序员文章站
2024-01-29 14:29:34
...
啦啦啦啦
JavaWeb笔记
1.增强for循环
*1使用场景
1.数组遍历
2.实现了Iterable接口的集合(Set , List------Map没有实现Iterable接口,所以不能使用增强for循环)
*2使用目的
1.为了替换Iterator,即为了替代迭代器(增强for循环的底层就是由迭代器来实现的,所以他可以替代迭代器)
*3使用语法
for(数据类型 变量名:遍历的集合名)
2.可变参数
*1.使用場景
1.当多个方法的逻辑相同,只是参数个数不同时,可以使用可变参数作为 方法的参数
*2.使用方法
1.在方法的参数列表中 数据类型...数组名称(即数据类型后紧跟英文状态下的三个点,然后再跟一个数组名称,这个数组是自动创建用于接收传入的可变参数的,不用人为再去定义,且名称可以随意取)
*3.注意事项
1.可变参数只能定义在一个方法的参数列表中,不能在其他地方定义
2.方法的参数列表中可变参数只能有一个,且只能位于参数列表的最后(因为方法还可以定义其他的参数)
3.反射
*1反射原理
1.框架的实现
就是基于反射的,而框架的开发都是基于配置文件的开发,配置文件中配置了类,通过反射可以获取到那些类中的所有内容,如类中的所有方法,属性等,然后通过类中的方法来执行
***获取属性通过Filed类来完成
***获取构造方法通过Constructor来完成
***获取普通方法通过Method方法来完成
2.反射的原理
1)将编写好的代码保存到本地硬盘,保存为.Java文件
2)通过编译,保存为.class文件
3)在Java的虚拟机(jvm)中,通过类加载器把class文件保存在内存中(class文件,在内存中为class类)
4)使用反射时,先获取到类,然后就能获取到类中的所有内容
3.使用反射操作无参构造函数
1)先获取class类,方法有4种:
a.类名。class
b.对象名.getclass();
c.class.forname("类的路径");
d.包装类.TYPE;(不常用)
语句:Class c=Class.forName("类的路径");
2)获取1)中类的实例(比如一个Person类)
语句:Person p=(Person)c.newInstance();//因为调用newInstance方法的返回值为Object类型,所以强转;
//对类进行实例化,除了使用new,还可以使用newInstance()方法
3) 使用set方法设置值
语句:p.setName("名字");
4)输出,需使用get方法获取设置的name值
语句:System.out.println(p.getName);
4.使用反射操作有参构造函数
1)先获取class类,方法有4种:
a.类名。class
b.对象名.getclass();
c.class.forname("类的路径");
d.包装类.TYPE;(不常用)
语句:Class c=Class.forName("类的路径");
2)使用1)中的类名来获取其对应的有参构造函数
语句:c.getConstructors();//获取所有的构造函数,如果是有参的构造函数,则在参数列表中传递对应的参数
如:c.getConstructor(String.class,String.class);//.class为利用反射
3)设置值
由于是有参构造函数,所以在实例化时即可设置初值
语句:Person p=(Person)c.newInstance("张三",“23”);
4)获取值
也是使用实例名.get方法
如:p.getName();
5.使用反射操作属性
1)获取class类
2)获取类的实例
3)利用类名获取属性
语句:Field f=c.getDeclaredField("属性名")//getDeclaredField()此方法可获取属性,参数即属性名
4)设置值,同样利用set()方法,但是此时有两个参数,参1为实例名,参2位设置的属性值
语句:f.set(p,"属性值");
5)获取值,用get()方法,参数为实例名
语句:f.get(p);
6.使用反射操作普通方法
1)获取class类
2)获取类的实例
3)得到普通方法:类名.getDeclaredMethod(方法名,通过方法想要设置的属性类型);
语句:Method m=c.getDeclaredMethod("setName",String.class)
4)设置值,利用invoke(实例名,参数值)
语句:m.invoke(p,"zhangsan");
5)获取值,get方法
如:实例名.getName();
下一篇: leetcode之链表的中间节点总结