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

赤峰北京网站建设小程序代理模板

赤峰北京网站建设,小程序代理模板,网页截图快捷键是哪个,什么软件可以做企业网站目录 1、反射 1.1、定义 1.2、用途 1.3、反射基本信息 1.4、反射相关的类【重点】 1.5、Class类#xff08;反射机制的起源#xff09; 1.6、Class类中相关的方法 1.7、获得Class对象的三种方式 1.8、反射的使用 1.9、反射的优点、缺点 2、枚举 2.1、背景及定义 …目录 1、反射 1.1、定义 1.2、用途 1.3、反射基本信息 1.4、反射相关的类【重点】 1.5、Class类反射机制的起源 1.6、Class类中相关的方法 1.7、获得Class对象的三种方式 1.8、反射的使用 1.9、反射的优点、缺点 2、枚举 2.1、背景及定义 2.2、使用 2.2.1、Switch语句 2.2.2、常用方法 2.3、枚举优缺点 3、Lambda表达式 3.1、背景 前置小知识函数式接口 3.2、Lambda表达式的基本使用 3.3、Lambda优点、缺点 1、反射 1.1、定义 Java的反射机制是在运行状态中对于任意一个类都能够知道这个类的所有属性和方法对于任意一个对象都能够调用他的任意方法和属性既然能拿到那我们就可以修改部分类型信息。这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机制。 1.2、用途 在日常的第三方应用开发过程中遇到某个类的某个成员变量、方法、属性是私有的、只对系统应用开放的这时我们可以通过反射获取所需要的私有成员或者是方法反射最重要的用途就是开发各种通用框架比如在Spring中我们将所有的Bean交给Spring容器管理无论是XML配置Bean还是注解配置当我们从容器中获取Bean来依赖注入时容器会读取配置而配置中给的就是类的信息spring根据这些类信息需要创建需要的BeanSpring就动态的创建这些类~ 1.3、反射基本信息 Java程序中许多对象在运行时会出现两种类型运行时类型和编译时类型例如Person p new Student(); 这段代码中P就是在编译时类型为Person运行时类型为Student。程序需要在运行时发现对象和类的真实信息。而通过使用反射程序就能判断出该对象和类属于哪些类。 1.4、反射相关的类【重点】 1.5、Class类反射机制的起源 Java文件被编译后生成了.class文件JVM此时就要去解读.class文件被编译后的java文件也被JVM解析为一个对象这个对象就是java.lang.Class。这样当程序在运行时没每个java文件就最终变成了Class类对象的一个实例。我们通过java反射机制应用到这个实例就可以去获得甚至去添加改变这个类的属性和工作使得这个类成为一个动态的类。 1.6、Class类中相关的方法 常用获得类相关的方法【重要】 常用获得类中属性相关方法【重要】 一下方法返回值为Field 获得类中注解相关方法【了解】 获得类中构造器相关方法【重要】 获得类中方法相关方法【重要】 1.7、获得Class对象的三种方式 在我们进行反射之前我们需要做的第一步就是先拿到当前需要反射的类的Class对象然后通过Class对象的核心方法达到反射的目的即在运行状态中对于任意一个类都能够知道这个类的所有属性和方法对象任意一个对象都能调用他的任意方法和属性并修改部分类型信息。 方式一使用Class.forName(类的全路径名)静态方法【前提已明确类的全路径名】 方式二使用.class方法【前提在编译之前就已经明确要操作的Class】 方式三使用类对象的getClass()方法 代码 准备一个Student类 public class Student{//私有属性nameprivate String name lyj;//公有属性agepublic int age 18;//不带参数的构造方法public Student(){System.out.println(Student());}private Student(String name,int age) {this.name name;this.age age;System.out.println(Student(String,name));}private void eat(){System.out.println(i am eat);}public void sleep(){System.out.println(i am pig);}private void function(String str) {System.out.println(str);}Overridepublic String toString() {return Student{ name name \ , age age };} } demo类 public class TestDemo {public static void main(String[] args) {//1.通过getClass获取Class对象Student s1 new Student();Class c1 s1.getClass();//2.直接通过 类名.class 的方式得到,该方法最为安全可靠程序性能更高这说明任何一个类都有一个隐含的静态成员变量 classClass c2 Student.class;//3、通过 Class 对象的 forName() 静态方法来获取用的最多//但可能抛出 ClassNotFoundException 异常Class c3 null;try {//注意这里是类的全路径如果有包需要加包的路径c3 Class.forName(Student);} catch (ClassNotFoundException e) {e.printStackTrace();}//一个类在 JVM 中只会有一个 Class 实例,即我们对上面获取的//c1,c2,c3进行 equals 比较System.out.println(c1.equals(c2));System.out.println(c1.equals(c3));System.out.println(c2.equals(c3));} } 上述就是三种获取方式代码运行结果都是true也就是说一个类在JVM中只会有一个Class实例~ 1.8、反射的使用 代码 import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method;public class ReflectClassDemo {// 创建对象public static void reflectNewInstance() {try {Class? classStudent Class.forName(Student);Object objectStudent classStudent.newInstance();Student student (Student) objectStudent;System.out.println(获得学生对象student);} catch (Exception ex) {ex.printStackTrace();}}// 反射私有的构造方法 屏蔽内容为获得公有的构造方法public static void reflectPrivateConstructor() {try {Class? classStudent Class.forName(Student);//注意传入对应的参数Constructor? declaredConstructorStudent classStudent.getDeclaredConstructor(String.class,int.class);//Constructor? declaredConstructorStudent classStudent.getConstructor();//设置为true后可修改访问权限declaredConstructorStudent.setAccessible(true);Object objectStudent declaredConstructorStudent.newInstance(龙洋静,15);//Object objectStudent declaredConstructorStudent.newInstance();Student student (Student) objectStudent;System.out.println(获得私有构造哈数且修改姓名和年龄student);} catch (Exception ex) {ex.printStackTrace();}}// 反射私有属性public static void reflectPrivateField() {try {Class? classStudent Class.forName(Student);Field field classStudent.getDeclaredField(name);field.setAccessible(true);//可以修改该属性的值Object objectStudent classStudent.newInstance();Student student (Student) objectStudent;field.set(student,小明);String name (String) field.get(student);System.out.println(反射私有属性修改了name name);} catch (Exception ex) {ex.printStackTrace();}}// 反射私有方法public static void reflectPrivateMethod() {try {Class? classStudent Class.forName(Student);Method methodStudent classStudent.getDeclaredMethod(function,String.class);System.out.println(私有方法的方法名为methodStudent.getName());//私有的一般都要加methodStudent.setAccessible(true);Object objectStudent classStudent.newInstance();Student student (Student) objectStudent;methodStudent.invoke(student,我是给私有的function函数传的参数);} catch (Exception ex) {ex.printStackTrace();}}public static void main(String[] args) {reflectNewInstance();// 创建对象reflectPrivateConstructor();// 反射私有的构造方法 屏蔽内容为获得公有的构造方法reflectPrivateField();// 反射私有属性reflectPrivateMethod();// 反射私有方法} } 运行 1.9、反射的优点、缺点 优点 对于任意一个类都能够知道这个类的所有属性和方法对于任意一个对象都能够调用它的任意一个方法增加程序的灵活性和扩展性降低耦合性提高自适应能力反射已经运用在了很多流行框架如Struts、Hibernate、Spring 等等。 缺点 使用反射会有效率问题。会导致程序效率降低。反射技术绕过了源代码的技术因而会带来维护问题。反射代码比相应的直接代码更复杂 。 2、枚举 2.1、背景及定义 枚举是在JDK1.5后引入的主要用途是将一组常量组织起来在这之前表示一组常量通常使用定义常量的方式 public static int final RED 1; public static int final GREEN 2; public static int final BLACK 3; 但是常量举例有不好的地方例如可能碰巧有个数字1但是他有可能误会为是RED现在我们可以直接用枚举来进行组织这样一来就拥有了类型枚举类型。而不是普通的整形1. 枚举 /*** Created with IntelliJ IDEA.* Description:* User:龙宝* Date:2023-11-26* Time:17:19*/ public enum Test {RED,BLACK,GREEN; }优点 将常量组织起来统一进行管理 场景 错误状态码消息类型颜色的划分状态机等... 本质 是java.lang.Enum的子类也就是说自己写的枚举类就算没显示继承Enum但是是默认继承了这个类~ 2.2、使用 2.2.1、Switch语句 /*** Created with IntelliJ IDEA.* Description:* User:龙宝* Date:2023-11-26* Time:17:19*/ public enum Test {RED,BLACK,GREEN,WHITE;public static void main(String[] args) {Test test Test.BLACK;switch (test) {case RED:System.out.println(red);break;case BLACK:System.out.println(black);break;case WHITE:System.out.println(WHITE);break;case GREEN:System.out.println(green);break;default:break;}} }2.2.2、常用方法 使用1 /*** Created with IntelliJ IDEA.* Description:* User:龙宝* Date:2023-11-26* Time:17:19*/ public enum Test {RED,BLACK,GREEN,WHITE;public static void main(String[] args) {Test[] testEnum2 Test.values();for (int i 0; i testEnum2.length; i) {System.out.println(testEnum2[i] testEnum2[i].ordinal());}System.out.println();System.out.println(Test.valueOf(GREEN));} }使用2 /*** Created with IntelliJ IDEA.* Description:* User:龙宝* Date:2023-11-26* Time:17:19*/ public enum Test {RED,BLACK,GREEN,WHITE;public static void main(String[] args) {//拿到枚举实例BLACKTest testEnum Test.BLACK;//拿到枚举实例REDTest testEnum21 Test.RED;System.out.println(testEnum.compareTo(testEnum21));System.out.println(BLACK.compareTo(RED));System.out.println(RED.compareTo(BLACK));} }使用3 1 、当枚举对象有参数后需要提供相应的构造函数 2 、枚举的构造函数默认是私有的 这个一定要记住 /*** Created with IntelliJ IDEA.* Description:* User:龙宝* Date:2023-11-26* Time:17:36*/ public enum Test2 {RED(red,1),BLACK(black,2),WHITE(white,3),GREEN(green,4);private String name;private int key;Test2 (String name,int key) {this.name name;this.key key;} }/*** Created with IntelliJ IDEA.* Description:* User:龙宝* Date:2023-11-26* Time:17:36*/ public enum Test2 {RED(red,1),BLACK(black,2),WHITE(white,3),GREEN(green,4);private String name;private int key;Test2 (String name,int key) {this.name name;this.key key;}public static Test2 getEnumKey (int key) {for (Test2 t: Test2.values()) {if(t.key key) {return t;}}return null;}public static void main(String[] args) {System.out.println(getEnumKey(2));} }2.3、枚举优缺点 优点 枚举常量更简单安全枚举具有内置方法代码更优雅 缺点 不可继承无法扩展 注意 不能通过反射获取枚举类的实例枚举可以避免反射和序列化问题 3、Lambda表达式 3.1、背景 Lambda表达式是允许通过表达式来代替功能接口语法(parameters) - expression 或 (parameters) -{ statements; } 语法说明 paramaters类似方法中的形参列表这里的参数是函数式接口里的参数。这里的参数类型可以明确的声明也可不声明而由JVM隐含的推断。另外当只有一个推断类型时可以省略掉圆括号。 -可理解为“被用于”的意思 方法体可以是表达式也可以代码块是函数式接口里方法的实现。代码块可返回一个值或者什么都不反回这里的代码块块等同于方法的方法体。如果是表达式也可以返回一个值或者什么都不反回。 如下 // 1. 不需要参数,返回值为 2 () - 2 // 2. 接收一个参数(数字类型),返回其2倍的值 x - 2 * x // 3. 接受2个参数(数字),并返回他们的和 (x, y) - x y // 4. 接收2个int型整数,返回他们的乘积 (int x, int y) - x * y // 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void) (String s) - System.out.print(s) 前置小知识函数式接口 函数式接口的意思就是一个接口有且只有一个抽象方法可以有其他方法其他方法需要是Default方法 Lambda表达式的前提条件 1.方法的参数或变量的类型是接口。 2.这个接口中只能有一个抽象方法。 3.2、Lambda表达式的基本使用 看看代码 package com.jdktest01.day01;import java.util.ArrayList; import java.util.Collections;/*** author a1002*/ public class LambdaTest02 {public static void main(String[] args) {ArrayListPerson persons new ArrayList();persons.add(new Person(张三, 58, 174));persons.add(new Person(李四, 58, 176));persons.add(new Person(王五, 54, 171));persons.add(new Person(伞兵, 19, 177));// Collections.sort(persons, new ComparatorPerson() { // Override // public int compare(Person o1, Person o2) { // return o1.getAge() - o2.getAge(); // } // });// persons.forEach((p) - { // System.out.println(p); // });System.out.println();Collections.sort(persons, (Person o1, Person o2) - {return o1.getAge() - o2.getAge();});Collections.sort(persons, (o1, o2) - o2.getAge() - o1.getAge());persons.forEach((p) - {System.out.println(p);});System.out.println(-----------------------------);persons.forEach(t - System.out.println(t));// 对集合中的数据进行排序/*Collections.sort(persons, new ComparatorPerson() {Overridepublic int compare(Person o1, Person o2) {return o1.getAge() - o2.getAge(); // 升序排序}});*/// Collections.sort(persons, (Person o1, Person o2) - { // return o2.getAge() - o1.getAge(); // 降序 // }); // // for (Person person : persons) { // System.out.println(person); // } // // System.out.println(-----------); // persons.forEach((t) - { // System.out.println(t); // });} } 对集合中的数据进行排序 Collections.sort(persons, new ComparatorPerson() {Overridepublic int compare(Person o1, Person o2) {return o1.getAge() - o2.getAge();//升序}}); Lambda写法 Collections.sort(persons, (Person o1, Person o2) - {return o1.getAge() - o2.getAge();}); 简化 Collections.sort(persons, (o1, o2) - o2.getAge() - o1.getAge()); 在Lambda标准格式的基础上使用省略写法的规则为 1. 小括号内参数的类型可以省略         2. 如果小括号内 有且仅有一个参数 则小括号可以省略         3. 如果大括号内 有且仅有一个语句 可以同时省略大括号、 return 关键字及语句分号 Lambda遍历写法 persons.forEach((p) - {System.out.println(p);});//简化 persons.forEach(t - System.out.println(t)); Lambda和匿名内部类的区别 1.所需类型不一样 匿名内部类所需要的类型可以是抽象类接口。 lambda表达式需要的类型必须是接口。 2.抽象方法的数量不一样 匿名内部类所需要的接口中抽象方法的数量随意。 lambda表达式所需要的接口只有一个抽象方法。 3.实现原理不同 匿名内部类是在编译以后形成class。 lambda表达式是在程序运行时动态生成class。   3.3、Lambda优点、缺点 优点 1. 代码简洁开发迅速 2. 方便函数式编程 3. 非常容易进行并行计算 4. Java 引入 Lambda 改善了集合操作 缺点 1. 代码可读性变差 2. 在非并行计算中很多计算未必有传统的 for 性能要高 3. 不容易进行调试
http://www.sadfv.cn/news/309307/

相关文章:

  • 怎么做网站更新和维护网页制作免费版
  • 小程序网站建设的公司应用商店下载安装正版最新版
  • 工作室 网站建设在线做网站教程
  • wordpress搜索标签页seo外链技巧
  • 长沙网站建设网站推广微信营销邢台润联科技有限公司
  • 4435建站创新的中小型网站建设
  • 想自己在家做外贸网站建设食品网站
  • 中国营销网站国内logo设计网站
  • wordpress 添加文章seo诊断
  • 网站建设营销型网站做网站用什么面板好
  • 什么的网站策划利用网络媒体营销来做电商网站论文
  • 在线网站推荐几个最近中文字幕2019视频1
  • 珠海网站设计网络优化中国建设银行网站地址
  • 高端品销售网站电商数据统计网站
  • 龙凤网站建设云聚达住房和城乡建设部网站投诉电话
  • 怎么通过局域网建设网站小说素材网站
  • 淘宝联盟网站模板厦门有做网站建设
  • 企业网站设计公司济南小程序开发制作
  • 制作网站书签怎么做黄页大全有哪些
  • 手机网站创建四川省住房和城乡建设局网站
  • 站长之家seo施工企业安全生产评价标准jgjt77破解版
  • 网站排名优化软件电话站酷网怎么接单赚钱
  • 做网站可以赚钱么网上书城网站开发方案
  • 赤峰做网站建设的企业用vps建网站备案
  • 有域名怎样建设网站杭州专业做网站的公司哪家好
  • 高端网站建设公司兴田德润在那里一般人公司注册费用
  • 昆明网站推广wordpress网站速度检测
  • 专业网站建设兴田德润wordpress调用热评文章
  • 跨境电商网站建设现货交易平台排行榜
  • 网站设计活动主题东莞快速做网站