企业网站申请流程怎么提高网站权重
2025/12/28 0:36:29 网站建设 项目流程
企业网站申请流程,怎么提高网站权重,海口网站开发公司电话,谷歌推广开户文章目录Ⅰ. Collection工具类Ⅱ. 概念与意义Ⅲ. 反射相关的类与操作一、Class类#xff08;一切反射的起点#xff09;二、获取Class类的三种方式#xff08;Student类见附录#xff09;三、创建对象的两种方式① 直接调用 Class 中的 newInstance() 方法② 生成 Construc…文章目录Ⅰ. Collection工具类Ⅱ. 概念与意义Ⅲ. 反射相关的类与操作一、Class类一切反射的起点二、获取Class类的三种方式Student类见附录三、创建对象的两种方式① 直接调用 Class 中的 newInstance() 方法② 生成 Constructor 构造方法对象四、操作类的字段例子五、操作类的方法例子附录Ⅰ. Collection工具类官方文档Collections和Collection名字看起来很相似但实际上它们是两个完全不同的东西不过它们确实有一些关系主要体现在Collections是为了操作Collection接口的集合类提供了很多常用的工具方法。方法作用示例sort()对 List 排序Collections.sort(list);reverse()翻转 ListCollections.reverse(list);shuffle()打乱 ListCollections.shuffle(list);swap()交换元素Collections.swap(list, i, j);max()/min()求最大 / 最小元素Collections.max(list);frequency()某元素出现次数Collections.frequency(list, apple);copy()拷贝列表Collections.copy(dest, src);dest 必须有足够容量fill()用一个值填充整个列表Collections.fill(list, 0);binarySearch()二分查找需已排序Collections.binarySearch(list, target);replaceAll()替换指定值Collections.replaceAll(list, oldVal, newVal);rotate()旋转列表整体右移Collections.rotate(list, k);其中要倒序排序的话可以使用Collections.sort(list, Collections.reverseOrder());并且排序的类型如果是自定义类型同样要重写一下特定的比较器如下所示Collections.sort(rec,newComparatorString(){publicintcompare(Stringword1,Stringword2){returncnt.get(word1)cnt.get(word2)?word1.compareTo(word2):cnt.get(word2)-cnt.get(word1);}});Ⅱ. 概念与意义Java反射是一种机制允许程序在运行时查看类的信息如属性、方法、构造器等动态创建对象访问和修改属性调用方法操作泛型参数、注解等元信息反射的意义和应用场景如下所示应用场景描述举例框架设计核心Spring、Hibernate、MyBatis 等全靠它动态注入Bean、解析注解、AOP通用工具类/库开发不知道具体类时也能处理JSON序列化、ORM字段映射插件机制 / 动态加载类运行时加载未编译进来的类SPI机制、Class.forName()动态代理 AOP 编程实现日志增强、权限控制等JDK动态代理、AspectJ测试 Mock 框架访问私有字段模拟行为JUnit, Mockito 等简化开发 / 规避重复代码构建泛型代码库动态调用 setter/getter使用反射的风险和代价如下所示风险/代价描述⏱ 性能开销反射是解释型操作慢于直接调用 安全问题可访问私有字段/方法绕过封装 可读性差代码不直观难调试 编译器检查失效编译时不知道是否写错方法名或类型Ⅲ. 反射相关的类与操作类名用途Class类代表类的实体在运行的Java应用程序中表示类和接口Field类代表类的成员变量、属性Method类代表类的方法Constructor类代表类的构造方法Annotation类代表类的注解一、Class类一切反射的起点官方文档Java文件被编译后生成了.class文件JVM此时会去解读这个.class文件而.class文件也被JVM解析为一个对象这个对象就是java.lang.Class。通过Java的反射机制应用到这个实例就可以去获得甚至去添加改变这个类的属性和动作使得这个类成为一个动态的类。一旦拿到了Class对象比如Class?clazzPerson.class;// 具体获取方式看后面可以做很多事比如下面的操作剩下的查文档方法用途clazz.getName()获取类名clazz.getDeclaredFields()获取所有字段所有权限均可访问clazz.getDeclaredField(String name)获取指定字段所有权限均可访问下面方法也是类似clazz.getDeclaredMethods()获取所有方法所有权限均可访问clazz.getDeclaredConstructors()获取构造器所有权限均可访问clazz.newInstance()创建对象已废弃推荐 getConstructor().newInstance()clazz.getSuperclass()获取父类clazz.getInterfaces()获取实现的接口clazz.isInterface()是否是接口clazz.isAnnotationPresent(XXX.class)是否被某注解标记clazz.getLoader()获得类的加载器二、获取Class类的三种方式Student类见附录方式语法说明Class.forName(全限定名)Class.forName(com.demo.Person)常用于配置、动态加载类静态变量classPerson.class编译期就能获得类信息对象.getClass()obj.getClass()运行时获得对象的真实类型publicstaticvoidmain(String[]args){// 1. 使用Class.forName()注意要指定包名并且最好捕捉异常Class?c1null;try{c1Class.forName(Reflection.Student);}catch(ClassNotFoundExceptione){e.printStackTrace();}// 2. 使用指定类的class静态变量Class?c2Student.class;// 3. 使用对象实例的getClass()方法StudentstnewStudent();Class?c3st.getClass();// 一个类在JVM中只会有一个Class实例因此c1、c2、c3都指向同一个Class实例System.out.println(c1c2);// trueSystem.out.println(c2c3);// trueSystem.out.println(c3c1);// true}☠注意事项一个类在JVM中只会有一个Class实例。不管你创建多少对象它们的.getClass()是同一个。泛型信息在运行时会被擦除可以参考泛型笔记。Class.forName()会触发类初始化会执行静态代码块慎用三、创建对象的两种方式① 直接调用Class中的newInstance()方法第一种方式就是调用Class对象中的newInstance()方法这种方法现在已经被淘汰了原因如下所示只能调用无参构造方法如果构造方法不是public会抛异常已被标记为过时方法从JDK 9起publicstaticvoidmain(String[]args){try{// 1. 先获取Class对象ClasscClass.forName(Reflection.Student);// 2. 然后调用newInstance()方法创建对象注意要强转成Student类型Studentp(Student)c.newInstance();System.out.println(p);}catch(ClassNotFoundExceptione){thrownewRuntimeException(e);}catch(InstantiationExceptione){thrownewRuntimeException(e);}catch(IllegalAccessExceptione){thrownewRuntimeException(e);}}② 生成 Constructor 构造方法对象官方文档第二种方式先调用Class对象中的getConstructor()系列的方法得到Constructor对象然后调用该对象中的newInstance()方法优势如下所示可调用有参构造方法可修改构造器可见性setAccessible(true)publicstaticvoidmain(String[]args){try{// 1. 获取Class对象Class?csClass.forName(Reflection.Student);// 2. 获取无参的构造方法来创建对象Constructor?non_arg_constructorcs.getDeclaredConstructor();Students1(Student)non_arg_constructor.newInstance();System.out.println(s1);// 3. 获取带参的构造方法来创建对象因为带参构造方法是私有的所以要设置权限为trueConstructor?arg_constructorcs.getDeclaredConstructor(String.class,int.class);arg_constructor.setAccessible(true);Students2(Student)arg_constructor.newInstance(liren,18);System.out.println(s2);}catch(ClassNotFoundExceptione){thrownewRuntimeException(e);}catch(NoSuchMethodExceptione){thrownewRuntimeException(e);}catch(InvocationTargetExceptione){thrownewRuntimeException(e);}catch(InstantiationExceptione){thrownewRuntimeException(e);}catch(IllegalAccessExceptione){thrownewRuntimeException(e);}}// 运行结果Student()Student{namebit,age18}Student(String,name)Student{nameliren,age18}四、操作类的字段例子官方文档publicstaticvoidmain(String[]args){// 使用反射操作字段try{Class?csClass.forName(Reflection.Student);// 1. 输出类名打印字段信息System.out.println(ClassName: cs.getName());for(Fielde:cs.getDeclaredFields()){System.out.println(e.getName() e.getType().getName() Modifier.toString(e.getModifiers()));}// 2.1 获取私有属性nameFieldnamefieldcs.getDeclaredField(name);namefield.setAccessible(true);// 对于私有属性需要设置Accessible为true// 2.2 获取该类对象并设置name属性的值然后用namefield.get()获取这个私有值Studentst(Student)cs.newInstance();namefield.set(st,liren);System.out.println(反射私有属性修改了namenamefield.get(st));}catch(ClassNotFoundException|NoSuchFieldExceptione){thrownewRuntimeException(e);}catch(InstantiationExceptione){thrownewRuntimeException(e);}catch(IllegalAccessExceptione){thrownewRuntimeException(e);}}// 运行结果ClassName:Reflection.Studentnamejava.lang.StringprivateageintpublicStudent()反射私有属性修改了nameliren五、操作类的方法例子官方文档publicstaticvoidmain(String[]args){try{ClassStudentcsStudent.class;// 获取带参的私有方法然后设置权限最后使用invoke()方法进行调用Method func_methodcs.getDeclaredMethod(function,String.class);func_method.setAccessible(true);func_method.invoke((Student)cs.newInstance(),我是给私有的function函数传的参数);// 还可以输出方法的指定信息System.out.println(方法名func_method.getName());System.out.println(修饰符为Modifier.toString(func_method.getModifiers()));}catch(NoSuchMethodException e){thrownewRuntimeException(e);}catch(InvocationTargetException e){thrownewRuntimeException(e);}catch(IllegalAccessException e){thrownewRuntimeException(e);}catch(InstantiationException e){thrownewRuntimeException(e);}}// 运行结果Student()我是给私有的function函数传的参数 方法名function修饰符为private附录classStudent{// 私有属性nameprivateStringnamebit;// 公有属性agepublicintage18;// 不带参数的构造⽅法publicStudent(){System.out.println(Student());}privateStudent(Stringname,intage){this.namename;this.ageage;System.out.println(Student(String,name));}privatevoideat(){System.out.println(i am eat);}voidsleep(){System.out.println(i am pig);}privatevoidfunction(Stringstr){System.out.println(str);}OverridepublicStringtoString(){returnStudent{namename\, ageage};}}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询