j***a 反射 静态语言,j***a 反射 静态方法

kodinid 11 0

大家好,今天小编关注到一个比较意思的话题,就是关于java 反射 静态语言问题,于是小编就整理了4个相关介绍Java 反射 静态语言的解答,让我们一起看看吧。

  1. java中非静态方法能调用静态方法吗?
  2. C#的dynamic使用中有什么需要注意的地方,以免滥用?
  3. Java反射到底慢在哪里?
  4. JAVA虚拟机中是如何加载JAVA类的?

JAVA中非静态方法调用静态方法吗?

首先直接回答你,在j***a非静态方法可以调用静态方法。

这个结论可以引伸为在非静态方法中能访问静态方法、静态成员变量和非静态成员,而在静态方法中只能访问静态成员,即静态方法和静态成员变量。

java 反射 静态语言,java 反射 静态方法-第1张图片-安济编程网
图片来源网络,侵删)

在j***a的基本概念中,类和对象两个截然不同又相互关联的概念,类相当于模板,是抽象的,对象相当于实例,是具体的,所以两者的联系就是类实例化之后成为对象。静态成员本身是归属于类的,也称类成员,而实例成员归属于对象。在j***a的机制中,当类被加载的时候,实际上加载的是它的模板,就是这个类文件,这个时候只有它的静态成员。而只有通过new关键字或反射方法调用了类的构造方法之后,才会生成类的实例对象,这个时候内存里才有了实例成员。

综上,在内存里总是先有静态成员,然后才有实例成员,所以在实例方法里调用静态方法才有可能,反之上哪调用去?而且,实例方法归属于对象,想在静态方法里调用的话也得先把对象实例化了才能调用呀,直接调用是取无根之水,不行吧。唠叨这么多,希望对你有所帮助,助你知其然且知其所以然!

C#的dynamic使用中有什么需要注意的地方,以免滥用?

主要有两点。dynamic成员在编译时会跳过所有的静态类型检查,这意味着它永远不会被报编译错误,也就是说你得不到编译器的帮助而只能在运行时发现错误。

java 反射 静态语言,java 反射 静态方法-第2张图片-安济编程网
(图片来源网络,侵删)

编码时请做好检查或者添加必要的日志。此外,涉及dynamic成员的代码并不会被编译器优化

我的测试数据表明在.NET4.5下访问dynamic对象的一个成员时需要的时间大约是访问静态类型的静态成员的12倍,但是它依旧比反射访问一个静态类型的静态成员要快约9倍。如果是为了避免复杂的业务逻辑和避开反射可以考虑一用。我个人的标准是,优先强类型,多写一个类或不算什么事儿。不到万不得已不写dynamic,哪怕它可能节省了很多代码。

J***a反射到底慢在哪里?

先陈述一下结论:j***a的反射是慢,但是是相对于直接调用而言,慢也的确慢了一个数量级,不过在有些场景必须使用反射,并且在反射的时候,可以用一些手段进行人工优化

java 反射 静态语言,java 反射 静态方法-第3张图片-安济编程网
(图片来源网络,侵删)

再说一下j***a反射之所以有一点慢的原因

1.j***a和python比起来,j***a是静态语言类型,也就是说在编译期j***a在编译代码的时候就会进行类型的强检验,j***a会在编译期进行代码优化,而反射是在运行时发生的,也就是说那些类型检查,代码优化的事情放在了运行时,这个自然要耗费一点时间

2.编译期在运行时很难做一些关于反射的优化,现在的编译期还不是非常智能,知道你用这段反射代码需要做什么事情

3.再说一下,调用实现过程,在反射调用过程中,执行者叫MethodAccessor,我记得这个对象是懒加载的,也就是说有可能第一次反射调用耗时可能会更长一点,并且在调用的时候method.invoke方法还要对参数数组进行包装,可能涉及到参数类型适配,装包拆包也有消耗,其实说到底,还是不知道具体的参数类型

J***A虚拟机中是如何加载J***A类的?

我们平时都知道通过j***ac命令

.j***a

.class

要想具体搞清楚j***a类是如何加载的J***a虚拟机中,我们需要搞清楚以下几个问题:

一个J***a类什么时候开始被加载?

加载J***a类的过程是怎样的?

一个J***a类从被加载到JVM内存中到这个类被卸载,主要包含以下七个步骤的生命周期

J***a虚拟机并没有规定在什么时候需要加载J***a类,但是对于J***a类的初始化却有明确的规定,有且只有以下5中情况时候便会立即触发类的“初始化”动作:

遇到new、getstatic、putstatic或invokestatic这4条字节指令时,如果类没有初始化,则需要先触发其初始化,代码示例如下:

使用

j***a.lang.reflect

到此,以上就是小编对于j***a 反射 静态语言的问题就介绍到这了,希望介绍关于j***a 反射 静态语言的4点解答对大家有用。

标签: 静态 反射 j***a

上一个定时 c语言,c语言定时程序

下一个ug编程vip破解教程,ug编程软件破解版下载