当前位置: 首页 > news >正文

jsp动态网站开发与实践店铺推广引流的方法

jsp动态网站开发与实践,店铺推广引流的方法,长春建站模板搭建,有没有人跟狗做的av网站反射 1. 反射1.1 反射的概述:1.2 学习反射到底学什么?1.3 获取字节码文件对象的三种方式1.4 字节码文件和字节码文件对象1.5 获取构造方法1.6 获取构造方法并创建对象1.7 获取成员变量1.8 获取成员变量并获取值和修改值1.9 获取成员方法1.10 获取成员方法…

反射

  • 1. 反射
    • 1.1 反射的概述:
    • 1.2 学习反射到底学什么?
    • 1.3 获取字节码文件对象的三种方式
    • 1.4 字节码文件和字节码文件对象
    • 1.5 获取构造方法
    • 1.6 获取构造方法并创建对象
    • 1.7 获取成员变量
    • 1.8 获取成员变量并获取值和修改值
    • 1.9 获取成员方法
    • 1.10 获取成员方法并运行
    • 面试题:

1. 反射

1.1 反射的概述:

专业的解释:

​ 是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;

​ 对于任意一个对象,都能够调用它的任意属性和方法;

​ 这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。

通俗的理解:

  • 利用反射创建的对象可以无视修饰符调用类里面的内容

  • 可以跟配置文件结合起来使用,把要创建的对象信息和方法写在配置文件中。

    读取到什么类,就创建什么类的对象

    读取到什么方法,就调用什么方法

    此时当需求变更的时候不需要修改代码,只要修改配置文件即可。

1.2 学习反射到底学什么?

反射都是从class字节码文件中获取的内容。

  • 如何获取class字节码文件的对象
  • 利用反射如何获取构造方法(创建对象)
  • 利用反射如何获取成员变量(赋值,获取值)
  • 利用反射如何获取成员方法(运行)

1.3 获取字节码文件对象的三种方式

  • Class这个类里面的静态方法forName(“全类名”)(最常用)
  • 通过class属性获取
  • 通过对象获取字节码文件对象

代码示例:

//1.Class这个类里面的静态方法forName
//Class.forName("类的全类名"): 全类名 = 包名 + 类名
Class clazz1 = Class.forName("com.itheima.reflectdemo.Student");
//源代码阶段获取 --- 先把Student加载到内存中,再获取字节码文件的对象
//clazz 就表示Student这个类的字节码文件对象。
//就是当Student.class这个文件加载到内存之后,产生的字节码文件对象//2.通过class属性获取
//类名.class
Class clazz2 = Student.class;//因为class文件在硬盘中是唯一的,所以,当这个文件加载到内存之后产生的对象也是唯一的
System.out.println(clazz1 == clazz2);//true//3.通过Student对象获取字节码文件对象
Student s = new Student();
Class clazz3 = s.getClass();
System.out.println(clazz1 == clazz2);//true
System.out.println(clazz2 == clazz3);//true

1.4 字节码文件和字节码文件对象

java文件:就是我们自己编写的java代码。

字节码文件:就是通过java文件编译之后的class文件(是在硬盘上真实存在的,用眼睛能看到的)

字节码文件对象:当class文件加载到内存之后,虚拟机自动创建出来的对象。

​ 这个对象里面至少包含了:构造方法,成员变量,成员方法。

而我们的反射获取的是什么?字节码文件对象,这个对象在内存中是唯一的。

1.5 获取构造方法

规则:

​ get表示获取

​ Declared表示私有

​ 最后的s表示所有,复数形式

​ 如果当前获取到的是私有的,必须要临时修改访问权限,否则无法使用

方法名说明
Constructor<?>[] getConstructors()获得所有的构造(只能public修饰)
Constructor<?>[] getDeclaredConstructors()获得所有的构造(包含private修饰)
Constructor getConstructor(Class<?>… parameterTypes)获取指定构造(只能public修饰)
Constructor getDeclaredConstructor(Class<?>… parameterTypes)获取指定构造(包含private修饰)

代码示例:

public class ReflectDemo2 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {//1.获得整体(class字节码文件对象)Class clazz = Class.forName("com.itheima.reflectdemo.Student");//2.获取构造方法对象//获取所有构造方法(public)Constructor[] constructors1 = clazz.getConstructors();for (Constructor constructor : constructors1) {System.out.println(constructor);}System.out.println("=======================");//获取所有构造(带私有的)Constructor[] constructors2 = clazz.getDeclaredConstructors();for (Constructor constructor : constructors2) {System.out.println(constructor);}System.out.println("=======================");//获取指定的空参构造Constructor con1 = clazz.getConstructor();System.out.println(con1);Constructor con2 = clazz.getConstructor(String.class,int.class);System.out.println(con2);System.out.println("=======================");//获取指定的构造(所有构造都可以获取到,包括public包括private)Constructor con3 = clazz.getDeclaredConstructor();System.out.println(con3);//了解 System.out.println(con3 == con1);//每一次获取构造方法对象的时候,都会新new一个。Constructor con4 = clazz.getDeclaredConstructor(String.class);System.out.println(con4);}
}

1.6 获取构造方法并创建对象

涉及到的方法:newInstance

代码示例:

//首先要有一个javabean类
public class Student {private String name;private int age;public Student() {}public Student(String name) {this.name = name;}private Student(String name, int age) {this.name = name;this.age = age;}//get,set方法public String toString() {return "Student{name = " + name + ", age = " + age + "}";}
}//测试类中的代码:
//需求1:
//获取空参,并创建对象//1.获取整体的字节码文件对象
Class clazz = Class.forName("com.itheima.a02reflectdemo1.Student");
//2.获取空参的构造方法
Constructor con = clazz.getConstructor();
//3.利用空参构造方法创建对象
Student stu = (Student) con.newInstance();
System.out.println(stu);System.out.println("=============================================");//测试类中的代码:
//需求2:
//获取带参构造,并创建对象
//1.获取整体的字节码文件对象
Class clazz = Class.forName("com.itheima.a02reflectdemo1.Student");
//2.获取有参构造方法
Constructor con = clazz.getDeclaredConstructor(String.class, int.class);
//3.临时修改构造方法的访问权限(暴力反射)
con.setAccessible(true);
//4.直接创建对象
Student stu = (Student) con.newInstance("zhangsan", 23);
System.out.println(stu);

1.7 获取成员变量

规则:

​ get表示获取

​ Declared表示私有

​ 最后的s表示所有,复数形式

​ 如果当前获取到的是私有的,必须要临时修改访问权限,否则无法使用

方法名:

方法名说明
Field[] getFields()返回所有成员变量对象的数组(只能拿public的)
Field[] getDeclaredFields()返回所有成员变量对象的数组,存在就能拿到
Field getField(String name)返回单个成员变量对象(只能拿public的)
Field getDeclaredField(String name)返回单个成员变量对象,存在就能拿到

代码示例:

public class ReflectDemo4 {public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {//获取成员变量对象//1.获取class对象Class clazz = Class.forName("com.itheima.reflectdemo.Student");//2.获取成员变量的对象(Field对象)只能获取public修饰的Field[] fields1 = clazz.getFields();for (Field field : fields1) {System.out.println(field);}System.out.println("===============================");//获取成员变量的对象(public + private)Field[] fields2 = clazz.getDeclaredFields();for (Field field : fields2) {System.out.println(field);}System.out.println("===============================");//获得单个成员变量对象//如果获取的属性是不存在的,那么会报异常//Field field3 = clazz.getField("aaa");//System.out.println(field3);//NoSuchFieldExceptionField field4 = clazz.getField("gender");System.out.println(field4);System.out.println("===============================");//获取单个成员变量(私有)Field field5 = clazz.getDeclaredField("name");System.out.println(field5);}
}public class Student {private String name;private int age;public String gender;public String address;public Student() {}public Student(String name, int age, String address) {this.name = name;this.age = age;this.address = address;}public Student(String name, int age, String gender, String address) {this.name = name;this.age = age;this.gender = gender;this.address = address;}//get,set方法public String toString() {return "Student{name = " + name + ", age = " + age + ", gender = " + gender + ", address = " + address + "}";}
}

1.8 获取成员变量并获取值和修改值

方法说明
void set(Object obj, Object value)赋值
Object get(Object obj)获取值

代码示例:

public class ReflectDemo5 {public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {Student s = new Student("zhangsan",23,"广州");Student ss = new Student("lisi",24,"北京");//需求://利用反射获取成员变量并获取值和修改值//1.获取class对象Class clazz = Class.forName("com.itheima.reflectdemo.Student");//2.获取name成员变量//field就表示name这个属性的对象Field field = clazz.getDeclaredField("name");//临时修饰他的访问权限field.setAccessible(true);//3.设置(修改)name的值//参数一:表示要修改哪个对象的name?//参数二:表示要修改为多少?field.set(s,"wangwu");//3.获取name的值//表示我要获取这个对象的name的值String result = (String)field.get(s);//4.打印结果System.out.println(result);System.out.println(s);System.out.println(ss);}
}public class Student {private String name;private int age;public String gender;public String address;public Student() {}public Student(String name, int age, String address) {this.name = name;this.age = age;this.address = address;}public Student(String name, int age, String gender, String address) {this.name = name;this.age = age;this.gender = gender;this.address = address;}
//get,set 方法public String toString() {return "Student{name = " + name + ", age = " + age + ", gender = " + gender + ", address = " + address + "}";}
}

1.9 获取成员方法

规则:

​ get表示获取

​ Declared表示私有

​ 最后的s表示所有,复数形式

​ 如果当前获取到的是私有的,必须要临时修改访问权限,否则无法使用

方法名说明
Method[] getMethods()返回所有成员方法对象的数组(只能拿public的)
Method[] getDeclaredMethods()返回所有成员方法对象的数组,存在就能拿到
Method getMethod(String name, Class<?>… parameterTypes)返回单个成员方法对象(只能拿public的)
Method getDeclaredMethod(String name, Class<?>… parameterTypes)返回单个成员方法对象,存在就能拿到

代码示例:

public class ReflectDemo6 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException {//1.获取class对象Class<?> clazz = Class.forName("com.itheima.reflectdemo.Student");//2.获取方法//getMethods可以获取父类中public修饰的方法Method[] methods1 = clazz.getMethods();for (Method method : methods1) {System.out.println(method);}System.out.println("===========================");//获取所有的方法(包含私有)//但是只能获取自己类中的方法Method[] methods2 = clazz.getDeclaredMethods();for (Method method : methods2) {System.out.println(method);}System.out.println("===========================");//获取指定的方法(空参)Method method3 = clazz.getMethod("sleep");System.out.println(method3);Method method4 = clazz.getMethod("eat",String.class);System.out.println(method4);//获取指定的私有方法Method method5 = clazz.getDeclaredMethod("playGame");System.out.println(method5);}
}

1.10 获取成员方法并运行

方法

Object invoke(Object obj, Object… args) :运行方法

参数一:用obj对象调用该方法

参数二:调用方法的传递的参数(如果没有就不写)

返回值:方法的返回值(如果没有就不写)

代码示例:

package com.itheima.a02reflectdemo1;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;public class ReflectDemo6 {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {//1.获取字节码文件对象Class clazz = Class.forName("com.itheima.a02reflectdemo1.Student");//2.获取一个对象//需要用这个对象去调用方法Student s = new Student();//3.获取一个指定的方法//参数一:方法名//参数二:参数列表,如果没有可以不写Method eatMethod = clazz.getMethod("eat",String.class);//运行//参数一:表示方法的调用对象//参数二:方法在运行时需要的实际参数//注意点:如果方法有返回值,那么需要接收invoke的结果//如果方法没有返回值,则不需要接收String result = (String) eatMethod.invoke(s, "重庆小面");System.out.println(result);}
}public class Student {private String name;private int age;public String gender;public String address;public Student() {}public Student(String name) {this.name = name;}private Student(String name, int age) {this.name = name;this.age = age;}//get,set 方法public String toString() {return "Student{name = " + name + ", age = " + age + "}";}private void study(){System.out.println("学生在学习");}private void sleep(){System.out.println("学生在睡觉");}public String eat(String something){System.out.println("学生在吃" + something);return "学生已经吃完了,非常happy";}
}

面试题:

​ 你觉得反射好不好?好,有两个方向

​ 第一个方向:无视修饰符访问类中的内容。但是这种操作在开发中一般不用,都是框架底层来用的。

​ 第二个方向:反射可以跟配置文件结合起来使用,动态的创建对象,动态的调用方法。

后记
👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹


文章转载自:
http://ripidolite.bfmq.cn
http://tigrine.bfmq.cn
http://cameo.bfmq.cn
http://pectize.bfmq.cn
http://sedentarily.bfmq.cn
http://wesleyan.bfmq.cn
http://embryotic.bfmq.cn
http://unlucky.bfmq.cn
http://copen.bfmq.cn
http://vivisectionist.bfmq.cn
http://moldavite.bfmq.cn
http://dispenser.bfmq.cn
http://misdirection.bfmq.cn
http://hoggish.bfmq.cn
http://deuced.bfmq.cn
http://fisc.bfmq.cn
http://heterogamous.bfmq.cn
http://estray.bfmq.cn
http://sparable.bfmq.cn
http://pharmacopsychosis.bfmq.cn
http://naprapath.bfmq.cn
http://wallasey.bfmq.cn
http://godavari.bfmq.cn
http://poltroonery.bfmq.cn
http://antinatalism.bfmq.cn
http://valley.bfmq.cn
http://videocast.bfmq.cn
http://live.bfmq.cn
http://belfry.bfmq.cn
http://acrawl.bfmq.cn
http://orometry.bfmq.cn
http://fricassee.bfmq.cn
http://potoroo.bfmq.cn
http://mousebird.bfmq.cn
http://kepi.bfmq.cn
http://humbert.bfmq.cn
http://twitch.bfmq.cn
http://aitch.bfmq.cn
http://buic.bfmq.cn
http://trichloride.bfmq.cn
http://monstrous.bfmq.cn
http://carloadings.bfmq.cn
http://unappealing.bfmq.cn
http://hawkthorn.bfmq.cn
http://chirurgery.bfmq.cn
http://zooblast.bfmq.cn
http://havoc.bfmq.cn
http://demonism.bfmq.cn
http://incorporable.bfmq.cn
http://unequipped.bfmq.cn
http://inhumanly.bfmq.cn
http://hacksaw.bfmq.cn
http://banjax.bfmq.cn
http://quizee.bfmq.cn
http://defalcator.bfmq.cn
http://metacompilation.bfmq.cn
http://propulsor.bfmq.cn
http://events.bfmq.cn
http://flubdub.bfmq.cn
http://willinghearted.bfmq.cn
http://defi.bfmq.cn
http://interdental.bfmq.cn
http://suit.bfmq.cn
http://hashigakari.bfmq.cn
http://tergeminate.bfmq.cn
http://floodlight.bfmq.cn
http://presentative.bfmq.cn
http://beezer.bfmq.cn
http://chlorous.bfmq.cn
http://photocopier.bfmq.cn
http://voteable.bfmq.cn
http://underripe.bfmq.cn
http://barrelage.bfmq.cn
http://lindy.bfmq.cn
http://kansu.bfmq.cn
http://scarp.bfmq.cn
http://bastardly.bfmq.cn
http://lustrine.bfmq.cn
http://odontologist.bfmq.cn
http://fleetingly.bfmq.cn
http://salutatorian.bfmq.cn
http://viron.bfmq.cn
http://hexachloride.bfmq.cn
http://roumania.bfmq.cn
http://hackhammer.bfmq.cn
http://unafraid.bfmq.cn
http://unregarded.bfmq.cn
http://aminopyrine.bfmq.cn
http://kilogrammetre.bfmq.cn
http://salty.bfmq.cn
http://pourparler.bfmq.cn
http://pert.bfmq.cn
http://campanology.bfmq.cn
http://washstand.bfmq.cn
http://owly.bfmq.cn
http://thanatocoenosis.bfmq.cn
http://occasional.bfmq.cn
http://wuzzle.bfmq.cn
http://myocardiograph.bfmq.cn
http://acrimony.bfmq.cn
http://www.dt0577.cn/news/105999.html

相关文章:

  • idc网站模版互联网营销案例
  • 深圳教育平台网站建设杭州seo按天计费
  • 广东购物网站建设权威解读当前经济热点问题
  • 广东省高校质量工程建设网站南宁网站建设公司
  • 为违法网站做推广进去要几年360搜索引擎下载
  • 网络营销方式优缺点南通关键词优化平台
  • 网站开发90天营销推广计划
  • 宝鸡市做网站的公司如何做好网络销售技巧
  • 做养生哪个网站有客人推广渠道有哪些方式
  • 网站怎么加在线客服百度指数专业版app
  • 清远建设网站制作互联网营销师培训机构哪家好
  • 天河做网站技术百度知道问答平台
  • 玉器企业网站源码查销售数据的网站
  • 如何在图片上做网站水印图百度seo引流
  • 广饶县开发区政法委网站开seo优化论坛
  • php网站开发接口开发seo管理系统培训运营
  • 珠海市做网站百度客服
  • 邢台网站改版开发今日新闻网
  • 旅游网站建设项目谷歌google下载安卓版 app
  • 模块网站开发工具电商怎么做新手入门
  • 闸北网站优化公司什么是网络营销策划
  • 东明网站制作电商网站制作
  • 专门做餐厅设计的网站出词
  • 江西正东建设工程有限公司网站广告营销推广方案
  • icp网站建设上海网站快速排名优化
  • 网站登录密码忘记了外贸平台自建站
  • 海口 做网站梅花seo 快速排名软件
  • tcn短链接在线生成长沙官网seo
  • 主流网站开发语言爱站网备案查询
  • 昆山网站建设公司网络广告网站