反射

Reflection(反射)是被视为动态语言的关键,反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法。

加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个 类只有一个Class对象),这个对象就包含了完整的类的结构信息。可以通过这个对象看到类的结构。

  • 正常方式:引入需要的”包类”名称——通过new实例化——取得实例化对象
  • 反射方式:实例化对象——getClass()方法——得到完整的“包类”名称

Java反射机制提供的功能:

  • 在运行时判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所具有的成员变量和方法
  • 在运行时获取泛型信息
  • 在运行时调用任意一个对象的成员变量和方法
  • 在运行时处理注解
  • 生成动态代理

Class 类

Class实例对应着加载到内存中的一个运行时类,可以利用该实例调用和获取运行时类中的结构。一个 Class 对象包含了特定某个结构(class/interface/enum/annotation/primitive type/void/[])的有关信息。

哪些类型可以有Class对象?

(1)class: 外部类,成员(成员内部类,静态内部类),局部内部类,匿名内部类 (2)interface:接口 (3)[]:数组 (4)enum:枚举 (5)annotation:注解@interface (6)primitive type:基本数据类型 (7)void

其他说明:

  • Class本身也是一个类
  • Class对象只能由系统建立对象
  • 一个加载的类在 JVM 中只会有一个Class实例
  • 一个Class对象对应的是一个加载到JVM中的一个.class文件
  • 每个类的实例都会记得自己是由哪个 Class 实例所生成
  • 通过Class可以完整地得到一个类中的所有被加载的结构Class类是Reflection的根源,针对任何你想动态加载、运行的类,唯有先获得相应的 Class对象
  • Class类是Reflection的根源,针对任何你想动态加载、运行的类,唯有先获得相应的 Class对象
  • 加载到内存的运行时类,会缓存一段时间,在此时间内,可以通过不同方式来获取此类

相关方法:

方法名 功能说明
static Class forName(String name) 返回指定类名 name 的 Class 对象
Object newInstance() 调用缺省构造函数,返回该Class对象的一个实例
Class getSuperClass() 返回当前Class对象的父类的Class对象
getName() 返回此Class对象所表示的实体(类、接口、数组类、基本类型 或void)名称
Class [] getInterfaces() 获取当前Class对象的接口
ClassLoader getClassLoader() 返回该类的类加载器
Class getSuperclass() 返回表示此Class所表示的实体的超类的Class
Constructor[] getConstructors() 返回一个包含某些Constructor对象的数组
Field[] getDeclaredFields() 返回Field对象的一个数组
Method getMethod(String name,Class … paramTypes) 返回一个Method对象,此对象的形参类型为paramType

获取Class类的实例(四种方法):

  • 前提:若已知具体的类,通过运行时类的class属性获取,该方法最为安全可靠, 程序性能最高
    • 实例:Class clazz = String.class;
  • 前提:已知某个类的实例,调用该实例的getClass()方法获取Class对象
    • 实例:Person p = new Person(); Class clazz = p.getClass();
  • 前提:已知一个类的全类名,且该类在类路径下,可通过Class类的静态方法forName()获取,可能抛出ClassNotFoundException (这种方法用的频率最高)
    • 实例:Class clazz = Class.forName(“java.lang.String”);
  • 其他方式(不做要求)
    • ClassLoader cl = this.getClass().getClassLoader();
    • Class clazz4 = cl.loadClass(“类的全类名”);

读取配置文件的两种方法:

方法一,流读取:

Properties p = new Properties();
FileInputStream fi = new FileInputStream(new File("jdbc.properties"));//相对路径在module下
p.load(fi);
String username = p.getProperty("username");
String password = p.getProperty("password");
System.out.println(username+" || "+password);

方法二,类加载器读取:

Properties p1 = new Properties();
ClassLoader cl = Day11.class.getClassLoader();
InputStream is = cl.getResourceAsStream("jdbc.properties");//相对路径在module的src下
p1.load(is);
String username1 = p1.getProperty("username");
String password1 = p1.getProperty("password");
System.out.println(username1+" || "+password1);

创建运行时类的对象

创建类的对象:调用Class对象的newInstance()方法。要求: 1)类必须有一个无参数的构造器。 2)类的构造器的访问权限需要足够。

对于没有无参的构造器,创建对象的方式是:

  • 通过Class类的getDeclaredConstructor(Class … parameterTypes)取得本类的指定形参类型的构造器
  • 向构造器的形参中传递一个对象数组进去,里面包含了构造器中所需的各个参数
  • 通过Constructor实例化对象。
//1.根据全类名获取对应的Class对象 
String name = “xx.xx.Person"; 
Class clazz = null; 
clazz = Class.forName(name); 
//2.调用指定参数结构的构造器,生成Constructor的实例 
Constructor con = clazz.getConstructor(String.class,Integer.class); 
//3.通过Constructor的实例创建对应类的对象,并初始化类属性 
Person p2 = (Person) con.newInstance("Peter",20); 
System.out.println(p2);

获取运行时类的完整结构

  • 实现的全部接口
    • public Class<?>[] getInterfaces() 确定此对象所表示的类或接口实现的接口。
  • 所继承的父类
    • public Class<? Super T> getSuperclass() 返回表示此 Class 所表示的实体(类、接口、基本类型)的父类的 Class。
  • 全部的构造器
    • public Constructor[] getConstructors() 返回此 Class 对象所表示的类(无父类)的所有public构造方法
    • public Constructor[] getDeclaredConstructors() 返回此 Class 对象表示的类声明的所有构造方法
    • Constructor类中:
      • 取得修饰符: public int getModifiers();
      • 取得方法名称: public String getName();
      • 取得参数的类型:public Class<?>[] getParameterTypes();
  • 全部的方法
    • public Method[] getDeclaredMethods() 返回此Class对象所表示的类或接口(不包含父类)的全部方法
    • public Method[] getMethods() 返回此Class对象所表示的类或接口(不包含父类)的public的方法
    • Method类中:
      • 取得全部的返回值 :public Class<?> getReturnType();
      • 取得全部的参数 : public Class<?>[] getParameterTypes();
      • 取得修饰符 : public int getModifiers();
      • 取得异常信息 : public Class<?>[] getExceptionTypes();
  • 全部的Field(属性)
    • public Field[] getFields() 返回此Class对象所表示的类或接口及其父类的public的Field
    • public Field[] getDeclaredFields() 返回此Class对象所表示的类或接口及其父类的全部Field
    • Field方法中:
      • 以整数形式返回此Field的修饰符 : public int getModifiers();(用Modifiers.toString()方法可视化)
      • 得到Field的属性类型 : public Class<?> getType(); (用getName()方法可视化)
      • 返回Field的名称 : public String getName() ;
  • Annotation相关
    • get Annotation(Class<T> annotationClass)
    • getDeclaredAnnotations()
  • 泛型相关
    • 获取父类泛型类型:Type getGenericSuperclass()
    • 泛型类型:ParameterizedType
    • 获取实际的泛型类型参数数组:getActualTypeArguments()
  • 抛出的异常
    • public Class<?>[] getExceptionTypes();
  • 类所在的包
    • Package getPackage()

调用运行时类的指定结构

调用指定方法

通过反射,调用类中的方法,通过Method类完成。步骤:

  • 通过Class类的getMethod(String name,Class…parameterTypes)方法取得一个Method对象,并设置此方法操作时所需要的参数类型(因为重载的存在,需要指定形参列表)。
  • 之后使用Object invoke(Object obj, Object[] args)进行调用,并向方法中传递要设置的obj对象的参数信息。

Object invoke(Object obj, Object … args)说明:

  • Object 对应原方法的返回值,若原方法无返回值,此时返回null
  • 若原方法若为静态方法,此时形参Object obj可为null
  • 若原方法形参列表为空,则Object[] args为null
  • 若原方法声明为private,则需要在调用此invoke()方法前,显式调用方法对象的setAccessible(true)方法,将可访问private的方法。

调用指定属性

在反射机制中,可以直接通过Field类操作类中的属性,通过Field类提供的set()和 get()方法就可以完成设置和取得属性内容的操作。

  • public Field getField(String name) 返回此Class对象表示的类或接口的指定的public的Field。
  • public Field getDeclaredField(String name)返回此Class对象表示的类或接口的指定的Field。
  • 在Field中:
    • public Object get(Object obj) 取得指定对象obj上此Field的属性内容。
    • public void set(Object obj,Object value) 设置指定对象obj上此Field的属性内容。

关于setAccessible方法的使用:

  • Method和Field、Constructor对象都有setAccessible()方法。
  • setAccessible启动和禁用访问安全检查的开关。
  • 参数值为true则指示反射的对象在使用时应该取消Java语言访问检查。
  • 提高反射的效率。如果代码中必须用反射,而该句代码需要频繁的被调用,那么请设置为true。
  • 使得原本无法访问的私有成员也可以访问。
  • 参数值为false则指示反射的对象应该实施Java语言访问检查。
public class Person implements Comparable{public int id;private String name;private Person(String name){this.name = name;}private void showNation(String name){System.out.println("你好,我的名字是"+name);}...
}Class clazz = Person.class;
Constructor cons1 = clazz.getDeclaredConstructor(String.class);
cons1.setAccessible(true);
Person p2 = (Person) cons1.newInstance("刘星星");Field name2 = clazz.getDeclaredField("name");//调用属性name
name2.setAccessible(true);
name2.set(p2,"李鑫鑫");//设置属性nameMethod m2 = clazz.getDeclaredMethod("showNation",String.class);//调用方法showNation,且指定形参列表
m2.setAccessible(true);
m2.invoke(p2,"中国");//相当于p2.showNation("中国")

动态代理


静态代理:

静态代理模式中代理类和被代理类在编译期间就确定下来,缺乏动态性,不利于扩展。

public class Po {public static void main(String[] args) {Network server = new Server();Network client = new Client(server);client.browse();   
}interface Network{public void browse();
}//被代理
class Server implements Network@Overridepublic void browse() {System.out.println("被代理者访问网络");}
}//代理
class Client implements Network{private Network network;public Client(Network network) {this.network = network;}public void check(){System.out.println("代理者在访问前的一些准备工作");} public void end(){System.out.println("代理者在访问后的一些收尾工作");}@Overridepublic void browse() {check();network.browse();end();}
}

动态代理:

Proxy :专门完成代理的操作类,是所有动态代理类的父类。通过此类为一个或多个接口动态地生成实现类。

  • 提供用于创建动态代理类和动态代理对象的静态方法
    • static Class<?> getProxyClass(ClassLoader loader, Class<?>… interfaces) 创建 一个动态代理类所对应的Class对象
    • static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) 直接创建一个动态代理对象

其中,InvocationHandler h——得到InvocationHandler接口的实现类实例,ClassLoader loader——类加载器,
Class<?>[] interfaces——得到被代理类实 现的全部接口

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
interface Human{void getBelief();String eat(String food);
}
class SuperMan implements Human{@Overridepublic void getBelief() {System.out.println("我是超人,我相信我可以飞!");}@Overridepublic String eat(String food) {return "我是超人,我爱吃" + food;}
}
class BatMan implements Human{@Overridepublic void getBelief() {System.out.println("我是蝙蝠侠,我相信我很有钱!");}@Overridepublic String eat(String food) {return "我是蝙蝠侠,我爱吃" + food;}
}
class ProxyFactory{//调用此方法,返回代理类对象public static Object getProxyInstance(Object obj){//obj是被代理对象MyInvocationHandler handler = new MyInvocationHandler();handler.bind(obj);return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(), handler);}
}
class MyInvocationHandler implements InvocationHandler{private Object object;//需要使用被代理类对象进行赋值public void bind(Object object){this.object = object;}//当通过代理类对象调用方法A时,会自动地调用如下invoke()方法://将被代理类要执行的方法A的功能声明在invoke()方法中。@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//method,即为代理类对象调用的方法,此方法也就作为了被代理类对象要调用的方法。return method.invoke(object,args);}
}
public class ProxyTest {public static void main(String[] args) {Human proxyInstance = (Human) ProxyFactory.getProxyInstance(new SuperMan());//当通过代理类调用方法时,会自动地调用被代理类中同名方法。System.out.println(proxyInstance.eat("麻辣烫"));proxyInstance.getBelief();Human proxyInstance2 = (Human) ProxyFactory.getProxyInstance(new BatMan());System.out.println(proxyInstance2.eat("披萨"));proxyInstance2.getBelief();}
}

动态代理与AOP(Aspect Orient Programming)

使用Proxy生成一个动态代理时,往往并不会凭空产生一个动态代理,这样没有太大的意义。通常都是为指定的目标对象生成动态代理。

这种动态代理在AOP中被称为AOP代理,AOP代理可代替目标对象,AOP代理包含了目标对象的全部方法。但AOP代理中的方法与目标对象的方法存在差异: AOP代理里的方法可以在执行目标方法之前、之后插入一些通用处理。


Lambda表达式

Lambda 是一个匿名函数,可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。其本质是作为函数式接口的一个实例(只有一个抽象方法)。

Comparator<Integer> c1 = new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return Integer.compare(o1,o2);}
};Comparator<Integer> c2 = (o1,o2)-> Integer.compare(o1,o2);//lambda表达式Comparator<Integer> c3 = Integer::compare;//方法引用

操作符“->” ,该操作符被称为 Lambda 操作符或箭头操作符。它将 Lambda 分为两个部分:

  • 左侧:指定了 Lambda 表达式需要的参数列表。(其实就是接口中抽象方法的形参列表)
  • 右侧:指定了 Lambda 体,是 Lambda 表达式要执行的功能。(其实就是接口中抽象方法的方法体)

使用:

  • 语法格式一:无参,无返回值
Runnable r1 = new Runnable() {@Overridepublic void run() {System.out.println("我爱你!");}
};
r1.run();Runnable r2 = () -> System.out.println("我爱你Lambda!");
r2.run();
  • 语法格式二:Lambda 需要一个参数,但是没有返回值。
Consumer<String> con = new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}
};
con.accept("我爱你!");Consumer<String> con1 = (String s) -> {System.out.println(s);
};
con1.accept("我爱你Lambda!");
  • 语法格式三:数据类型可以省略,因为可由编译器推断得出,称为“类型推断”
Consumer<String> con1 = (s) -> {System.out.println(s);
};
  • 语法格式四:Lambda 若只需要一个参数时,参数的小括号可以省略
Consumer<String> con1 = s -> {System.out.println(s);
};
  • 语法格式五:Lambda 需要两个或以上的参数,多条执行语句,并且可以有返回值
Comparator<Integer> c2 = (o1,o2)-> {System.out.println("我爱你Lambda!");return Integer.compare(o1,o2);
}
  • 语法格式六:当 Lambda 体只有一条语句时,return 与大括号若有,都可以省略
Comparator<Integer> c2 = (o1,o2)-> Integer.compare(o1,o2);

上述 Lambda 表达式中的参数类型都是由编译器推断得出的。Lambda 表达式中无需指定类型,程序依然可以编译,这是因为 javac 根据程序的上下文,在后台推断出了参数的类型。Lambda 表达式的类型依赖于上下文环境,是由编译器推断出来的。这就是所谓的类型推断

总结:

  • Lambda形参列表的参数类型可以省略(类型推断)。
  • Lambda形参列表只有一个参数,则括号可以省略。
  • Lambda体应该用{}包裹,如果只有一句执行语句(可能是return语句),可以省略{}以及return关键字。

函数式接口

只包含一个抽象方法的接口,称为函数式接口。

可以通过 Lambda 表达式来创建该接口的对象。(若 Lambda 表达式抛出一个受检异常(即:非运行时异常),那么该异常需要在目标接口的抽象方法上进行声明)。

可以在一个接口上使用@FunctionalInterface 注解,这样做可以检查它是否是一个函数式接口。同时 javadoc 也会包含一条声明,说明这个接口是一个函数式接口。


方法引用与构造器引用

方法引用

当要传递给Lambda体的操作,已经有实现的方法了,可以使用方法引用。方法引用可以看做是Lambda表达式深层次的表达。换句话说,方法引用就是Lambda表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是Lambda表达式的一个语法糖。

要求:实现接口的抽象方法的参数列表和返回值类型,必须与方法引用的方法的参数列表和返回值类型保持一致。

格式:使用操作符“::” 将类(或对象) 与方法名分隔开来。如下三种主要使用情况:

  • 对象::实例方法名
  • 类::静态方法名
  • 类::实例方法名
Comparator<Integer> c2 = (o1,o2)-> Integer.compare(o1,o2);//lambda表达式
Comparator<Integer> c3 = Integer::compare;//方法引用Consumer<String> con1 = s -> System.out.println(s);//lambda表达式
Consumer<String> con1 = System.out::println;//方法引用

注意:当函数式接口方法的第一个参数是需要引用方法的调用者,并且第二个参数是需要引用方法的参数(或无参数)时:ClassName::methodName

构造器引用

格式: ClassName::new。与函数式接口相结合,自动与函数式接口中方法兼容。 可以把构造器引用赋值给定义的方法,要求构造器参数列表要与接口中抽象方法的参数列表一致。且方法的返回值即为构造器对应类的对象。

数组引用

格式: type[] :: new


Stream API

Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用 Stream API 对集合数据进行操作,就类似于使用 SQL 执行的数据库查询。 也可以使用 Stream API 来并行执行操作。简言之,Stream API 提供了一种高效且易于使用的处理数据的方式。

Stream 和 Collection 集合的区别:Collection 是一种静态的内存数据结构,而 Stream 是有关计算的。前者是主要面向内存,存储在内存中,后者主要是面向 CPU,通过 CPU 实现计算。Stream是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。 “集合讲的是数据,Stream讲的是计算!”

注意:

  • Stream 自己不会存储元素。
  • Stream 不会改变源对象。相反,他们会返回一个持有结果的新Stream。
  • Stream 操作是延迟执行的。这意味着他们会等到需要结果的时候才执行。

使用流程:

  • Stream实例化
  • 一系列中间操作(过滤、映射…)
  • 终止操作

流程注意点:

  • 一个中间操作链,对数据源的数据进行处理
  • 一旦执行终止操作,就执行中间操作链,并产生结果。之后,不会再被使用
查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 前端 —— JavaScript 基础篇 15 --- event 事件对象

    在上一篇的文章中提到过 event 对象 。Event 对象代表事件的状态。与事件相关的一系列数据 ,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。什么时候会产生Event 对象呢? event对象只在事件发生的过程中才有效例如: 当用户单击某个元素的时候,该元…...

    2024/4/24 10:55:13
  2. faster-rcnn.pytorch-1.0指南(四)——训练自己的数据集

    目录faster-rcnn.pytorch-1.0指南(一)——序言 faster-rcnn.pytorch-1.0指南(二)——平台搭建和模型训练 faster-rcnn.pytorch-1.0指南(三)——制作PASCAL VOC2007数据集 faster-rcnn.pytorch-1.0指南(四)——训练自己的数据集在完成制作PASCAL VOC2007数据集后可以开始…...

    2024/4/24 10:55:12
  3. 二分法+最大公约数+最小公倍数 1201. 丑数 III

    1201. 丑数 III 请你帮忙设计一个程序,用来找出第 n 个丑数。 丑数是可以被 a 或 b 或 c 整除的 正整数。 示例 1: 输入:n = 3, a = 2, b = 3, c = 5 输出:4解释:丑数序列为 2, 3, 4, 5, 6, 8, 9, 10… 其中第 3 个是 4。 示例 2: 输入:n = 4, a = 2, b = 3, c = 4 输出…...

    2024/4/24 10:55:06
  4. 改错:[WinError 10061] 由于目标计算机积极拒绝,无法连接。解决办法

    当你使用python 的pip install xxx 包的时候可能会出现下面的错误提示,这个提示是你的电脑自己注册表限制导致代理出问题了。网上说把 Proxy 打头的键值对(如ProxyEnable,ProxyOverride,ProxyServer等)全部删除,个人觉得不合适,毕竟是注册表上的东东,你没有十足的把握不…...

    2024/4/24 10:55:06
  5. MySQL拼接html字符串

    //MySQL拼接html字符串 "<span style=color:red>上海市</span>"CASE a.colName WHEN 2 THEN "<span style=color:red>北京市</span>" WHEN 3 THEN "<span style=color:red>上海市</span>" ELSE " &…...

    2024/4/24 10:55:02
  6. 实现跟随鼠标提示框

    html部分js部分 /*事件类型:mouseover让提示框显示mouseout让提示框隐藏mousemove让提示框跟随鼠标去移动clientX clientY 原点位置:可视窗口的左上角为原点*///提示框内容var arr = ["唐太宗","唐高宗","武则天","唐玄宗"];//【注…...

    2024/4/24 10:55:02
  7. 一文带你看懂MySQL索引原理以及查询优化,看不懂你来打我

    强烈推荐观看马士兵老师直播,最全 MySQL 优化方法,从此优化不再难丨带你彻底了解 MySQL的各种底层实现机制,横扫一切关于MqSQL的面试问题​www.bilibili.com一、介绍1.什么是索引?一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生…...

    2024/4/24 10:55:08
  8. 一入股市深似海

    一入股市深似海一入股市深似海 从此不喜亦无忧 坐看涨停我撤单 跌停与我又何干关灯吃面会有时 追涨杀跌不足惜A股没有新鲜事 但盈亏各凭本事“上个月股票涨的时候我吃什么狗吃什么,上个星期股票跌的时候狗吃什么我吃什么…………………这个星期可能要吃狗了!”有网友列出了一…...

    2024/4/24 10:54:59
  9. winform scm服务

    服务启动 static void Main() {ServiceBase[] ServicesToRun;ServicesToRun = new ServiceBase[]{new Service1()};ServiceBase.Run(ServicesToRun); }服务组件 serivice.cs 鼠标右键添加安装程序serviceProcessInstaller1 的账户设置成localsystem否则安装时提示密码登录 ser…...

    2024/4/24 10:55:05
  10. nginx解决跨域问题的正确配置方式

    server {#其他配置.....location / {add_header Access-Control-Allow-Origin *;add_header Access-Control-Allow-Methods GET, POST, PATCH, PUT, OPTIONS, DELETE;add_header Access-Control-Expose-Headers *;add_header Access-Control-Allow-Headers Origin, Content-Typ…...

    2024/4/23 23:32:44
  11. 【ubuntu】拷贝文件指定个数

    find . -maxdepth 1 -type f |head -n|xargs cp -t "$destdir"-n :指定前n个文件...

    2024/4/24 10:54:57
  12. “No Problem”没问题,不客气的其他英语表达方式

    “No Problem”,可以在回答,没问题,不客气是来用。No problem is quite an informal way of saying ‘you’re welcome’. It could also mean ‘yes, I can do it’, and is seen as a way of saying ‘This is easy, I can do it, and it doesn’t pose any problems’. A…...

    2024/4/24 10:54:56
  13. 1029 Median (25分)(一个字短!)

    1029 Median (25分) 分析 为了节省时间,先将第一个数组全部输入,而第二个数组一边输入一边找中位数,cnt记录在中位数之前一共有多少个数字,cnt_i用于计数在中位数之前,有多少个数字是属于第一个数组的,cnt_j用于计数在中位数之前有多少个数字是属于第二个数组的,当cnt_i…...

    2024/4/24 10:54:55
  14. js 之 类型转换

    JavaScript的转换类型javascript 是一门弱类型的语言在将类型转换前需要知道JavaScript中的数据类型数据类型 五种包含值的数据类型:数字(number) 字符串(string) 布尔 (Boolean) 对象(object) 函数(function)两种不包含值的数据类型:Undefined null三种对象类型:…...

    2024/4/24 10:54:56
  15. 关于在终端运行rosrun时找不到对应的包的解决方法

    关于在终端运行rosrun时找不到对应的包的解决方法参考文章: (1)关于在终端运行rosrun时找不到对应的包的解决方法 (2)https://www.cnblogs.com/bigzhao/p/6198073.html 备忘一下。...

    2024/4/24 10:54:54
  16. 外部按钮调用ECharts图表的保存为图片操作

    外部按钮调用ECharts图表的保存为图片操作 最近使用ECharts库绘制图表,依据需求希望可以把图表设置的保存为图片操作可以在图表外部调用,主要是希望可以和项目之前的下载图片操作界面保持一致。然后上网找了一些方法,有很多,但是我遇到了一个问题就是ECharts中的getConnecte…...

    2024/4/15 5:25:53
  17. CMake 入门实战

    文章目录原文地址什么是 CMake入门案例:单个源文件编写 CMakeLists.txt编译项目多个源文件同一目录,多个源文件多个目录,多个源文件自定义编译选项修改 CMakeLists 文件修改 main.cc 文件编写 config.h.in 文件编译项目安装和测试定制安装规则为工程添加测试支持 gdb添加环境…...

    2024/4/15 5:25:52
  18. Object-C Cocoapods

    已安装Cocoapods 为项目自动更新配置第三方SDK 在终端中操作如下 1.一般cd到.xcodeproj文件所在目录(cd+空格+路径回车) 2.创建Podfile文件(pod init) 3.打开Podfile文件并输入 target 项目名称 dopod SDK名称 end 4.自动下载SDK(pod install) 问题一: Analyzing dependencies…...

    2024/4/15 5:25:51
  19. 注解:@Documented @Retention @Target

    项目中发现自定义了一个注解:自己定义了一个注解。这个新定义的注解有三个注解: @Target 用于设定注解使用范围/作用目标。ElementType是一个枚举类。@Retention 注解的保留位置RetentionPolicy.SOURCE:这种类型的Annotations只在源代码级别保留,编译时就会被忽略,在class字节…...

    2024/4/21 22:58:56
  20. Unity中OnValidate的使用

    OnValidate可以用来验证一些数据,脚本加载或Inspector中的任何值被修改时会调用。 详细介绍可以看下面的链接参考。 相关链接 我目前使用到的用法是拖拽赋值时获取目标值,效果如下图。当我往Games拖拽物体时,会给GamePath自动赋值。代码示例:const string GameFolderPath =…...

    2024/4/24 10:54:54

最新文章

  1. 【注解和反射】类加载器

    继上一篇博客【注解和反射】什么时候类会和不会被初始化&#xff1f;-CSDN博客 目录 六、类加载器 测试&#xff1a;获得类加载器 &#xff08;1&#xff09;如何获取Java中的类加载器及其父类加载器 &#xff08;2&#xff09;测试当前类是哪个类加载器 &#xff08;3&am…...

    2024/4/25 12:23:55
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 在 Visual Studio Code (VSCode) 中隐藏以 . 开头的文件

    打开VSCode。 按下Ctrl ,快捷键打开设置。您也可以点击屏幕左下角的齿轮图标&#xff0c;然后选择“Settings”。 在设置搜索框中&#xff0c;键入files.exclude。 在找到的Files: Exclude项中&#xff0c;点击Add Pattern按钮来添加一个新的模式&#xff0c;或者直接在搜索…...

    2024/4/22 21:08:05
  4. 离散数学【详解】-自学考试湖北,争取做到识字都能看懂。

    回顾8年前&#xff0c;我记得我大学高数没复习&#xff0c;考了23分。 今天公司代码写完了&#xff0c;明天清明节&#xff0c;写篇文章磨磨时间。 我的文章&#xff0c;没有一篇不是磨时间能好好写出来的。 ----我 先列标题&#xff0c;比如h1,h2,这些内容。然后往里面填字&a…...

    2024/4/23 1:51:43
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/25 11:51:20
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/23 13:30:22
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/23 13:28:06
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/24 18:16:28
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/23 13:27:44
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/19 11:57:53
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/23 13:29:53
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/23 13:27:22
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/23 13:28:42
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/23 22:01:21
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/23 13:29:23
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/25 0:00:17
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/25 4:19:21
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/19 11:59:23
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/19 11:59:44
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/24 16:38:05
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/23 13:28:14
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/23 13:27:51
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/23 13:27:19
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57