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

政府网站建设回顾互联网营销策划

政府网站建设回顾,互联网营销策划,国旅商旅app苹果免费下载,怎样做网站首页的bannerJava笔记_22 一、反射1.1、反射的概述1.2、获取class对象的三种方式1.3、反射获取构造方法1.4、反射获取成员变量1.5、反射获取成员方法1.6、综合练习1.6.1、保存信息1.6.2、跟配置文件结合动态创建 一、反射 1.1、反射的概述 什么是反射? 反射允许对成员变量,成…

Java笔记_22

  • 一、反射
    • 1.1、反射的概述
    • 1.2、获取class对象的三种方式
    • 1.3、反射获取构造方法
    • 1.4、反射获取成员变量
    • 1.5、反射获取成员方法
    • 1.6、综合练习
      • 1.6.1、保存信息
      • 1.6.2、跟配置文件结合动态创建

一、反射

1.1、反射的概述

什么是反射?

反射允许对成员变量,成员方法和构造方法的信息进行编程访问
在这里插入图片描述

1.2、获取class对象的三种方式

  1. Class.forName(“全类名”);
    • 全类名:包名+类名
  2. 类名.class
  3. 对象.getclass()
    在这里插入图片描述
package reflect.Dome1;public class Dome {public static void main(String[] args) throws ClassNotFoundException {//方式一Class aClass = Class.forName("reflect.Dome1.student");System.out.println(aClass);//方式二Class aClass1 = student.class;System.out.println(aClass1);//与方式一的结果相同student s = new student();Class aClass2 = s.getClass();System.out.println(aClass2);//三个方式结果相同}
}
package reflect.Dome1;public class student {private String name;private int age;public student() {}public student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String toString() {return "student{name = " + name + ", age = " + age + "}";}
}

1.3、反射获取构造方法

Class类中用于获取构造方法的方法

方法名称说明
Constructor<?>[ ] getConstructors()返回所有公共构造方法对象的数组
Constructor<?>[ ] getDeclaredConstructors()返回所有构造方法对象的数组
Constructor<T> getConstructor(Class<?>… parameterTypes)返回单个公共构造方法对象
Constructor<T> getDeclaredConstructor(Class<?>… parameterTypes)返回单个构造方法对象

Constructor类中用于创建对象的方法

方法名称说明
T newlnstance(Object… initargs)根据指定的构造方法创建对象
setAccessible(boolean flag)设置为true,表示取消访问权限
package reflect.Dome2;import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;public class dome {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {Class class1 = Class.forName("reflect.Dome2.student");Constructor[] constructors = class1.getConstructors();for (Constructor constructor : constructors) {System.out.println(constructor);}Constructor con = class1.getDeclaredConstructor(String.class,int.class);System.out.println(con);Constructor[] declaredConstructors = class1.getDeclaredConstructors();for (Constructor declaredConstructor : declaredConstructors) {System.out.println(declaredConstructor);}//如果是私有构造方法,则不能直接使用,只能看到//通过添加setAccessible方法,暴力取消临时权限校验。就可以使用con.setAccessible(true);student stu = (student) con.newInstance("张三", 21);System.out.println(stu);}
}
package reflect.Dome2;public class student {private String name;private int age;public student() {}private student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String toString() {return "student{name = " + name + ", age = " + age + "}";}
}

1.4、反射获取成员变量

Class类中用于获取成员变量的方法

方法名称说明
Field[] getFields()返回所有公共成员变量对象的数组
Field[] getDeclaredFields()返回所有成员变量对象的数组
Field getField(String name)返回单个公共成员变量对象
Field getDeclaredField(String name)返回单个成员变量对象

Field类中用于创建对象的方法

方法名称说明
void set(Object obj, Object value)赋值
Object get(Object obj)获取值
package reflect.Dome3;import java.lang.reflect.Field;public class dome {public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {Class clazz = Class.forName("reflect.Dome3.Student");//获取到公共成员变量Field[] fields = clazz.getFields();for (Field field : fields) {System.out.println(field);}//查找该成员变量Field gender = clazz.getField("gender");System.out.println(gender);//获取所有的成员变量Field[] declaredField = clazz.getDeclaredFields();for (Field field : declaredField) {System.out.println(field);}//获取私有变量Field name = clazz.getDeclaredField("name");System.out.println(name);//获取权限修饰符int modifiers = name.getModifiers();System.out.println(modifiers);//获取成员变量的名称String name1 = name.getName();System.out.println(name1);//获取成员变量的类型Class<?> type = name.getType();System.out.println(type);//创建一个对象Student s = new Student("张三",23,"男");name.setAccessible(true);Object o = name.get(s);System.out.println(o);//修改s里面name的值name.set(s,"小王");System.out.println(s);}
}
package reflect.Dome3;public class Student {private String name;private int age;public String gender;public Student() {}public Student(String name, int age, String gender) {this.name = name;this.age = age;this.gender = gender;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public String toString() {return "Student{name = " + name + ", age = " + age + ", gender = " + gender + "}";}
}

1.5、反射获取成员方法

Class类中用于获取成员方法的方法

方法名称说明
Method[] getMethods()返回所有公共成员方法对象的数组,包括继承的
Method[] getDeclaredMethods()返回所有成员方法对象的数组,不包括继承的
Method getMethod(String name, Class<?>… parameterTypes)返回单个公共成员方法对象
Method getDeclaredMethod(String name, Class<?>… parameterTypes)返回单个成员方法对象

Method类中用于创建对象的方法

方法名称说明
Object invoke(Object obj, Object… args)运行方法

参数一:用obj对象调用该方法
参数二:调用方法的传递的参数(如果没有就不写)
返回值:方法的返回值(如果没有就不写)

package reflect.Dome4;import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;public class dome {public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, IllegalAccessException {Class aClass = Class.forName("reflect.Dome4.student");//包括父类的方法Method[] methods = aClass.getMethods();for (Method method : methods) {System.out.println(method);}System.out.println("===================================");//不包括父类的方法Method[] declaredMethods = aClass.getDeclaredMethods();for (Method declaredMethod : declaredMethods) {System.out.println(declaredMethod);}System.out.println("===================================");//返回单个公共成员方法变量Method getAge = aClass.getMethod("setAge", int.class);System.out.println(getAge);System.out.println("===================================");//返回单个成员方法对象Method eat = aClass.getDeclaredMethod("eat", String.class);System.out.println(eat);//返回方法的名称System.out.println("===================================");String name = eat.getName();System.out.println(name);System.out.println("===================================");Class<?> declaringClass = eat.getDeclaringClass();System.out.println(declaringClass);System.out.println("===================================");//返回方法里面的参数Parameter[] parameters = eat.getParameters();for (Parameter parameter : parameters) {System.out.println(parameter);}System.out.println("===================================");//返回方法抛出的异常Class<?>[] exceptionTypes = eat.getExceptionTypes();for (Class<?> exceptionType : exceptionTypes) {System.out.println(exceptionType);}//利用反射运行方法student s = new student("xiaowang",23,'男');eat.setAccessible(true);//没有返回值就不需要写//eat.invoke(s, "烧烤");//果如有返回值就需要写String o = (String) eat.invoke(s, "烧烤");System.out.println(o);}
}
package reflect.Dome4;import java.io.IOException;public class student {private String name;private int age;public char gender;public student() {}public student(String name, int age, char gender) {this.name = name;this.age = age;this.gender = gender;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public char getGender() {return gender;}public void setGender(char gender) {this.gender = gender;}private String eat(String str) throws IOException,RuntimeException,ArithmeticException {System.out.println(getName()+"正在吃"+str);return "奥利给";}public String toString() {return "student{name = " + name + ", age = " + age + ", gender = " + gender + "}";}
}

1.6、综合练习

反射的作用:

  1. 获取一个类里面所有的信息,获取到了之后,再执行其他的业务逻辑
  2. 结合配置文件,动态的创建对象并调用方法

1.6.1、保存信息

在这里插入图片描述

package reflect.Dome5;import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Field;public class dome {public static void main(String[] args) throws IllegalAccessException, IOException {student s = new student("小明",18,181.0,"玩");teacher t = new teacher("王老师",30);printClass(t);}public static void printClass(Object obj) throws IllegalAccessException, IOException {Class aClass = obj.getClass();//创建IO流BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\Java\\IDEA\\代码文件\\Three\\a.txt"));Field[] declaredFields = aClass.getDeclaredFields();for (Field declaredField : declaredFields) {//进行修饰符忽略declaredField.setAccessible(true);//获取到该变量的名字String name = declaredField.getName();//获取到该变量的值Object value = declaredField.get(obj);//写出数据bw.write(name+"="+value);bw.newLine();System.out.println(name+"="+value);}bw.flush();bw.close();}
}
package reflect.Dome5;public class student {private String name;private int age;private double height;private String hobby;public student() {}public student(String name, int age, double height, String hobby) {this.name = name;this.age = age;this.height = height;this.hobby = hobby;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}urn height*/public double getHeight() {return height;}public void setHeight(double height) {this.height = height;}public String getHobby() {return hobby;}public void setHobby(String hobby) {this.hobby = hobby;}public String toString() {return "student{name = " + name + ", age = " + age + ", height = " + height + ", hobby = " + hobby + "}";}
}
package reflect.Dome5;public class teacher {private String name;private int age;public teacher() {}public teacher(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String toString() {return "teacher{name = " + name + ", age = " + age + "}";}
}

1.6.2、跟配置文件结合动态创建

在这里插入图片描述

package reflect.Dome6;import java.io.FileInputStream;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Properties;public class dome {public static void main(String[] args) throws IOException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {//读取配置文件中的信息Properties prop = new Properties();FileInputStream fis = new FileInputStream("prop.properies");//读取的文件prop.load(fis);fis.close();System.out.println(prop);//获取全类名和方法名Object classname = prop.get("classname");Object method = prop.get("method");System.out.println(classname);System.out.println(method);//利用反射创建对象并运行方法Class<?> aClass = Class.forName((String) classname);//获取构造方法Constructor con = aClass.getDeclaredConstructor();Object o = con.newInstance();System.out.println(o);//获取成员方法并运行Method declaredMethod = aClass.getDeclaredMethod((String) method);declaredMethod.setAccessible(true);declaredMethod.invoke(o);}
}
package reflect.Dome6;public class student {private String name;private int age;private char gender;public student() {}public student(String name, int age, char gender) {this.name = name;this.age = age;this.gender = gender;}public void study(){System.out.println("正在学习");}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public char getGender() {return gender;}public void setGender(char gender) {this.gender = gender;}public String toString() {return "student{name = " + name + ", age = " + age + ", gender = " + gender + "}";}
}
classname=reflect.Dome6.student
method=study

在这里插入图片描述

http://www.yidumall.com/news/83832.html

相关文章:

  • 网站中队人物介绍怎么做百度权重10的网站
  • 用php做网站用什么框架国际网站平台有哪些
  • wordpress图片付费主题网站优化流程
  • 泉州全网营销优化企业站seo
  • 如何给网站做快速排名推广普通话内容100字
  • 海外网站代理免费b站推广入口
  • 深圳门户网站建设特点亚马逊站外推广网站
  • 安徽网站seo免费域名注册
  • 深圳信科做网站竞价推广专员
  • 自己做的网站访问速度慢seo是如何优化
  • 西安旅游攻略知乎杭州seo网络推广
  • 湖北网站推广方案兰州seo快速优化报价
  • wordpress 子菜单seo个人优化方案案例
  • 制作网站的软件有哪些香港头条新闻
  • 网站建设都需要那些材料常见的网络直接营销有哪些
  • 做网站的软件公司谷歌浏览器 安卓下载2023版官网
  • 网站建设公司利润怎么样网站设计与制作公司
  • 网站被刷怎么办外链群发软件
  • 琼筑网站是哪家做的微信引流推广怎么找平台
  • 做赌博网站是什么案件数据网站
  • 建网站 是否 数据库seo推广效果
  • 文件注入网站百度搜索引擎营销
  • 装饰网站建设微信营销推广方案
  • 织梦CMS做的网站能过等保三级吗广州网站推广服务
  • 廊坊市安次区建设局网站近期国际新闻热点大事件
  • 商城网站前置审批如何建立网站平台的步骤
  • 建设银行网站查询密码搜索引擎优化技术
  • 耐思尼克的建站宝盒营销软文小短文
  • 成都网站建设创新互联抖音账号权重查询
  • 网站建设与规划实验总结大庆网络推广