前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >python运行机制,java 运行机制,throw new RuntimeException(Stub!) 是什么

python运行机制,java 运行机制,throw new RuntimeException(Stub!) 是什么

作者头像
zhangjiqun
发布2024-12-16 18:32:47
发布2024-12-16 18:32:47
430
举报
文章被收录于专栏:计算机工具

python:解释性语言

java:混合型语言;

不明白:解释型(虚拟机)语言(js,python),编译型语言(c++),混合型语言(java)

参考:https://blog.csdn.net/qq_38998213/article/details/105473259

编译型语言和解释型语言

计算机不能直接的理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言的编写的程序。翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。 编译型语言:

需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。

一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个模块的机器码和依赖库串连起来生成可执行文件。编译和执行是分开的,但是不能跨平台。

优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。可以脱离语言环境独立运行。 缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。 代表语言:C、C++、Object-C、swift等。 解释型语言

解释性语言的程序不需要编译,相比编译型语言省了道工序,解释性语言在运行程序的时候才逐行翻译。每一个语句都是执行的时候才能翻译。这样解释性语言每执行一次要翻译一次,效率表较低。 优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。 缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。 代表语言:JavaScript、Python、PHP 混合型语言

混合型语言也叫半编译型语言。比如java、C#,C#在编译的时候不是直接编译成机器码而是中间码,.NET平台提供了中间语言运行库运行中间码,中间语言运行库类似于Java虚拟机。.net在编译成IL代码后,保存在dll中,首次运行时由JIT在编译成机器码缓存在内存中,下次直接执行。 java解释器采用生成与系统无关的字节代码指令技术。也就是说,在任何不同的操作系统上,只要正确安装了java运行系统,就有了编写调试java程序的平台,在分布式应用中,java的这个特点使同一个java程序能在不同的系统上运行,从而提高了软件生产效率。可移植性是跨平台特性的一个延伸,即具有了跨平台性,就保证了可移植性。java程序、java类库、java编译器、java系统都具有可移植性。 另外有一个特殊的情况,正常情况下JavaScript属于解释性语言,V8引擎是被设计用来提高网页浏览器内部JavaScript执行的性能,为了提高性能,v8会把js代码转换为高效的机器码,而不在是依赖于解释器去执行。v8引入了JIT在运行时把js代码进行转换为机器码。这里的主要区别在于V8不生成字节码或任何中间代码。这里的特殊之处在于JIT做代码优化(同时生成编译版本);解释型语言无法做到这些。

python运行机制
在这里插入图片描述
在这里插入图片描述
java 运行机制:

java通过IDE(集成开发环境(IDE,Integrated Development Environment eclipse)

进行编译,之后通过java虚拟机(jvm)进行解释成系统本地语言能识别的

系统本身带有系统编程语言解释器,系统将其转化成机器语言,在cpu,内存,缓存中进行执行

举例:

  • 在window系统中eclipse写java(进行编译)
  • 通过java虚拟机进行解释成c和c++
  • Windows平台是c、c++编写的自带c/c++语言解释器。将其转化为机器语言,在cpu,内存中进行IO;
throw new RuntimeException("Stub!") 是什么

这谢方方法以在我们的工程中直接调用(为了能通过编译),然后运行的时候,自动转换为rom里面的类来执行。

RuntimeException(“Stub!”)”表示实际运行时的逻辑会由Android ROM里面相同的类代替执行。

知乎:https://zhuanlan.zhihu.com/p/20564614?columnSlug=kaede 此外,在IDE里看源码的时候,有时候一些方法或者类会出现报红(找不到)的情况, 这是因为这些方法或者类是被Android SDK隐藏的,出于安全或者某些原因,这些API不能暴露给应用层的开发者,所以编译完成的android.jar包里会把这些API隐藏掉,而我们的Android项目是依赖android.jar的,查看源码的时候,IDE会自动去android.jar找对应的API,自然会找不到。当然,这些API在ROM中是实际存在的,有些开发者发现了一些可以修改系统行为的隐藏API,在应用层通过反射的方式强行调用这些API执行系统功能,这种手段也是一种HACK。 Stub顾名思义,就是桩的意思。表示这个方法先写上,但是没有实际的功能。这个函数也不会返回,因为会引发异常。 我们有两种实现软件的方法,一个是先进行顶层设计,然后再具体实现。另一个是先设计细节,然后把它们组合在一起成为整体。桩代码在软件设计的时候很常见,它就是第一种设计方式的体现,函数调用先写出来,同时编写一个桩,这个桩只是为了让编译通过。 丢出异常的目的是当实际要调用它的时候,防止设计者遗忘,丢出异常很明显提醒调用者,这个代码没有实现。

提示调用者该功能尚未实现,Stub只是留了个接口,并未真正实现功能。 RuntimeException属于运行异常,抛出来所以调用它的函数就不需要处理异常了。 抛异常后下面就不执行了,所以不用写返回值

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 编译型语言和解释型语言
  • python运行机制
  • java 运行机制:
  • throw new RuntimeException("Stub!") 是什么
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档