首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

编译型语言、解释型语言、静态类型语言、动态类型语言、强类型语言、弱类型语言概念与区别

net在编译成IL代码后,保存在dll,首次运行时由JIT在编译成机器码缓存在内存,下次直接执行(博友回复指出)。个人认为抛开一切偏见C#是这个星球上最好编程语言。...动态语言和静态语言 1、动态语言 是一在运行时可以改变结构语言:例如新函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构变化。...通俗点说就是在运行时代码可以根据某些条件改变自身结构。 主要动态语言:Object-C、C#、JavaScript、PHP、Python、Erlang。...Java是解释型语言但是不是动态语言,Java不能在运时候改变自己结构。反之成立?动态语言都是解释型语言。也是错!Object-C是编译型语言,但是他是动态语言。...动态类型语言和动态语言是完全不同两个概念。动态类型语言是指在运行期间才去做数据类型检查语言,说是数据类型,动态语言说是运行是改变结构,说是代码结构

3.1K110
您找到你想要的搜索结果了吗?
是的
没有找到

程序设计语言概述_c语言程序设计基本概念

这与我们需求差很远(例如一个教务管理系统。) 3. 为什么类型申明C语言中要与控制流隔离开来? 4. 现在主流语言最基本元素是? 5. 有没有语言它类型结构在运行时可以改变? 动态性?...编译后确定了什么信息,之后不再改变。 2. 运行时可以改变、添加什么。 3. 运行时是否保存着类型信息。 程序信息分为几类? 1....以上,在过程式范型,与ADT范型中都是成立。 3. 但是,面向对象范型,渴望做到: a) 需要维系着同一个继承体系成员结构一致性,只有这样,才能保证运行时多态性。...因为在编译时,具体类型信息,要转化成地址偏移,然后替换控制流类型变量。 现在主流语言最基本元素是? 控制流 与 类型系统。 有没有语言它类型结构在运行时可以改变?...Javascript只有对象没有,使用prototype方式继承,运行时给某个对象添加新数据成员。没有类型体系。 许多后来语言在运行时都保存着类型信息,例如Python,JAVA。

1.4K40

谁告诉你们Python是强类型语言!站出来,保证不打你!

如果一门语言可以在运行时改变变量类型,那我们称之为动态类型语言; 静态类型:与动态类型相反,如果一门语言不可以在运行时改变变量类型,则称之为静态类型语言; 其实这些概念就涉及到编程语言两个特性:隐式类型转换和类型固化...如'abc' * 10,这在Python可是合法哦,因为这个表达式会将'abc'复制10份。为何不用大乘号来举例,难道瞧不起大乘号?这是运算符歧视?...可惜目前Python还不支持内建类型(如int、str)运算符重载,但不能保证以后不支持,如果以后Python要是支持内建类型运算符重载,那就意味着可以重载str__add__方法了,目前str定义...有人说可以用是否实时(在运行时改变变量类型判别是静态语言还是动态语言,没错,变量类型实时改变确实是动态语言特征之一,但并不是全部。...这些特性静态语言(如Java、C++)是无法做到静态语言中,一个一旦定义完,就不能再为动态添加任何成员和移除任何成员,除非修改源代码。

1K50

反射测试结果居然与别人不一样

反射是一种编程技术,它允许在运行时获取和操作一个程序元数据(例如、字段、方法、构造函数等),以及在运行时动态地创建对象、调用方法和访问成员。 反射是Java独有的特性?...通过使用System.Reflection命名空间,开发人员可以获取和操作程序集、类型、成员等信息。 Ruby:Ruby是一种动态语言,具有开放结构,允许开发人员在运行时修改和对象行为。...PHP:PHP是一种常用于Web开发脚本语言,它提供了Reflection扩展来支持反射功能,可以在运行时检查和操作、方法、属性等信息。...Kotlin:Kotlin是一种Java虚拟机上运行现代编程语言,它也支持类似于Java反射功能。通过使用KClass和KFunction等类型,开发人员可以在运行时获取和调用信息。...使用反射时,需要满足以下前提条件: 编程语言支持反射: 首先,目标编程语言必须具有反射机制或提供相应库和API,以便在运行时操作程序结构和元数据。

14210

JAVA反射机制

JAVA反射机制是在运行状态,对于任意一个,都能够知道这个所有属性和方法;对于任意一个对象,都能够调用它任意方法和属性;这种动态获取信息以及动态调用对象方法功能称为java语言反射机制。...JAVA反射(放射)机制:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。从这个观点看,Perl,Python,Ruby是动态语言,C++,Java,C#不是动态语言。...在运行时判断任意一个对象所属; 2. 在运行时构造任意一个对象; 3. 在运行时判断任意一个所具有的成员变量和方法; 4. 在运行时调用任意一个对象方法; 5. 生成动态代理。...一般而言,开发者社群说到动态语言,大致认同一个定义是:“程序运行时,允许改变程序结构或变量类型,这种语言称为动态语言”。...这个字意思是“反射、映象、倒影”,用在Java身上指的是我们可以于运行时加载、探知、使用编译期间完全未知classes。

60910

动态语言-Python1.动态语言定义

它是一在运行时可以改变结构语言:例如新函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构变化。动态语言目前非常具有活力。...----来自维基百科 1.运行过程给对象绑定(添加)属性 ? 运行结果: ? 这里想给要在运行过程里给对象绑定属性 ? 运行结果: ? 这里实际上就是动态给实例绑定属性!...2.运行过程绑定(添加)属性 ? 运行结果: ? 3.运行过程绑定(添加)方法 ? 运行结果: ?...__slots__ 动态语言与静态语言不同 动态语言:可以在运过程,修改代码 静态语言:编译时已经确定好代码,运行过程不能修改 如果我们想要限制实例属性怎么办?...只能限定实例对象添加属性和方法 为了达到限制目的,Python允许定义class时候,定义一个特殊__slots__变量,来限制该class实例能添加属性: ? 运行结果: ?

73020

为什么 Python 这么慢?

Python 当中也有一个类似的 asyncio 事件循环。 是因为 Python 是解释型语言经常会听到这个说法,但是这过于粗陋地简化了 Python 所实际做工作了。...如果你对这一系列过程感兴趣,也可以阅读一下之前文章: 6 分钟内修改 Python 语言[10] 。 .pyc 文件创建是这个过程重点。...JIT 本身不会使执行速度加快,因为它执行仍然是同样字节码序列。但是 JIT 会允许在运行时进行优化。...是因为 Python 是一种动态类型语言 C、C++、Java、C#、Go 这些静态类型语言中,必须在声明变量时指定变量类型。...不用必须声明类型并不是为了使 Python 运行慢,Python 设计是让用户可以让各种东西变得动态:可以在运行时更改对象上方法,也可以在运行时动态添加底层系统调用到值声明上,几乎可以做到任何事。

1.5K20

Java帝国对Python渗透能成功

.)) ; // 编译错误 “外乡人,我们 Python 变量是不需要声明类型,不会做编译期类型检查,只有在运行时才会检查这个变量到底是什么类型,能否调用它方法, 你说,我们要泛型有什么用...吉森想起来了一个大杀器:动态代理,这可是 Java 一个非常基础技术,可以在运行时实现和方法增强,比如在调用业务方法前后加上事务管理,日志管理等功能,没有动态代理,AOP 就别想了。...但是 Python 是个动态语言,在运行时可以修改啊,比如我可以动态地给 User 增加一个新属性,这一点你 Java 做不到吧?”...老头儿又接着说:“你看看这个 User ,和 Proxy ,每次调用 login 方法时候,可以动态地创建一个新方法出来,在这个新方法,就可以做各种手脚了。”...吉森现在是真心佩服动态语言了,Java必须得在运行时通过操纵字节码来增强,字节码啊,那可不是一般人能玩。这Python居然源码级别就把功能给增强了!

49020

大数据必学Java基础(八十八):通过案例和概念体会反射好处

在编译后产生字节码文件时候,加载器子系统通过二进制字节流,负责从文件系统加载class文件。执行程序(java.exe)时候,将字节码文件读入JVM这个过程叫做加载。...所以我们可以通过这个对象看到结构,这个对象就好像是一面镜子,透过镜子看到各种信息,我们形象称之为反射。...扩展知识:动态语言vs静态语言1、动态语言是一在运行时可以改变结构语言:例如新函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构变化。...通俗点说就是在运行时代码可以根据某些条件改变自身结构。...主要动态语言:Object-C、 C#、JavaScript、 PHP、 Python、 Erlang 等2、静态语言与动态语言相对应,运行时结构不可变语言就是静态语言。

35981

编程范型:工具选择

Lisp 是动态语言鼻祖,动态语言是运行时改变程序结构或变量类型语言,它两大特点包括: 运行时改变自身结构甚至是函数定义; 程序和数据形式等价。 稍微解释一下。...第一条,指的是在运行时,而非编译期,对象自身结构可以更改,比如说 user 对象,里面有 name 和 age 两个属性,但是在运行期间,要增加一个从未有过属性 “personality”,这在静态语言里是不可能发生...第二条,我们都知道传统地说,程序和数据是不同在运行时,程序是可以反复执行,但是却是无法修改;而数据是可以反复修改,却是不用来执行——但是动态语言把这二者区别彻底打破了,结果就是程序也可以在运行时被修改...理解它,也可以帮助理解动态语言: 静态语言中,你需要定义一个 “嘎嘎叫” 接口,让鸭子类实现自这个接口,然后逻辑引用实现自这个接口对象并且调用这个嘎嘎叫方法,虽说程序在运行时实现了多态,在编译期间编译器并不知道这个实现自嘎嘎叫接口对象到底是什么类型... Groovy 当中可以通过操纵 “metaClass” 属性来给这个所有对象增添方法; JavaScript 当中,则是利用 “prototype” 这个特殊属性(就不举例子了,不清楚的话你可以阅读以下

29710

Java 反射:框架设计灵魂

解释型语言和编译型语言 解释型语言:不需要编译,在运时候逐行翻译解释;修改代码时可以直接修改,可以快速部署,不过性能上会比编译型语言稍差;比如 JavaScript、Python ; 编译型语言:需要通过编译器将源代码编译成机器码才能执行...动态语言和静态语言 动态语言:是指程序在运行时可以改变自身结构在运行时确定数据类型,一个对象是否能执行某操作,只取决于它有没有对应方法,而不在乎它是否是某种类型对象;比如 JavaScript、Python...反射作用 讲到这里,有些同学可能会有疑问:“反射有什么用?明明都已经知道了要使用是 ArrayList ,不能直接 new 一个对象然后执行里面的方法么?” 当然可以!...不过很多场景代码运行之前并不知道需要使用哪个,或者说在运时候才决定使用哪个; 比如有这么一个功能:“调用阿里云的人脸识别 API ”;这还不简单,参考对方 API 文档,很快就能实现。...反射优缺点 优点:在运行时动态获取和对象内容,极大地提高系统灵活性和扩展性;夸张一些说,反射是框架设计灵魂。 缺点:会有一定性能损耗,JVM 无法对这些代码进行优化;破坏封装性。

75720

Django 一个模型不同Table操作

, 模型定义是开发一个项目前面需要做事情, 后面通过导入方式 View 操作。...这样流程是 Django 默认流程, 但流程是一成不变?...但今天要讲是一种比较干燥方式 假设有一个需求是一个日志表(log),需要动态根据每天生成结果表(log_20181211, log_20181212)。...动态创建表 动态创建模型其实就是在运行时生成 Model , 这个可以通过函数实现, 通过传参(今天日期, 如: 20181211),然后生成新模型, Meta db_table 为log...注意LogMetaclass和__metaclass__ , 元可以在运行时改变模型名字,table 名称我们可以通过db_table定义, 名称可以通过覆盖元方法定义。

1.9K40

Java注解介绍和反射使用

Java 语言中、方法、变量、参数和包等都可以被标注,对这些代码段进行解释,编译时生成class时,标注也可以被编译。在运行时,java可以通过反射获取到注解内容,进行一些骚操作,进而简化开发。...,一切注解开始 @Retention:使用范围,是只代码,还是编入class文件,或者是在运行时可以通过反射访问 @Documented:标记这些注解是否包含在用户文档 @Target...@Target: ElementType.Type是说,该注解可以、接口(包含注解)、枚举上使用 @Retention:此注解将编译至class文件在运行时,会被虚拟机读取使用 和定义接口不同是...动态语言:是指一在运行时,也可以改变程序结构语言,加入新函数,对象,甚至是代码都可以被引入,可以根据某些条件改变自身结构 主要语言有:C#、JavaScript、PHP、Python 静态语言...:相对于动态语言,在运行时结构不可改变语言就是静态语言 主要语言有:Java、C、C++ java有了反射之后,java就可以称为准动态语言,反射使得java有了一定动态性,我们可以通过这种机制

30220

为什么有时候 PyCharm 没有智能提示?

其实导致没有智能提示原因有很多,有些太复杂了就不讲了! 运行时改变一个行时改变一个?还有这种操作? Python ,还真有这种操作。不信可以看一下下面这段代码。...可以发现并没有报错,而是在运行时添加一个属性 b 并用 'b' 初始化。 这就有人会问了,这和今天问题有什么关系?其实是有关系,不信看图。 ?...构造方法 __init__ ,属性 b 通过调用 exec 函数来初始化,在下面想用 A 实例 a 召唤属性 b 却发现智能提示还是没有 b,至于为什么?...构造函数通过调用 setattr 来设置 A 实例属性 b,但是在下面想通过 A 实例 a 召唤属性 b,依旧没有召唤出来,为什么?因为 setattr 是运行时才会执行!...其实没有智能提示原因还有很多,比如使用元可以行时修改一个)……在这里就不一一讲解了,最重要就是记住 3 个字:运行时

4.8K20

2023 年 30 个 OOP 面试问题和答案

B) 运行时多态性 也称为动态多样化或晚期绑定,运行时 多样化 是一种在运行时间 或执行过程确定函数实际实现 多 样 化 。 方法覆盖 是这种方法 一个 示例 。...在这种情况下,您可以使用名直接调用那些静态方法。 23. C++结构体和之间有什么区别? C++结构体和之间有什么区别?...结构体和之间主要区别在于,结构,成员默认为公共访问级别,而在,默认为私有访问级别。 另一个区别是, C++ ,我们使用 struct 来声明结构,而使用 class 来声明。...我们可以使用finalize()方法作为Java析构函数替代方法,但自Java 9起该方法也已被弃用。 27. 我们可以一个重载构造函数? 我们可以重载构造函数。...事实上,默认构造函数、带参数构造函数和拷贝构造函数都是构造函数重载形式。 28. 我们可以一个重载析构函数? 不。一个不能重载析构函数。一个只能有一个析构函数存在。 29.

25230

今年面试太难了?2023 年 30 个 OOP 面试问题和答案也许可以帮到你

B) 运行时多态性 也称为动态多样化或晚期绑定,运行时 多样化 是一种在运行时间 或执行过程确定函数实际实现 多 样 化 。 方法覆盖 是这种方法 一个 示例 。...在这种情况下,您可以使用名直接调用那些静态方法。 23. C++结构体和之间有什么区别? C++结构体和之间有什么区别?...结构体和之间主要区别在于,结构,成员默认为公共访问级别,而在,默认为私有访问级别。 另一个区别是, C++ ,我们使用 struct 来声明结构,而使用 class 来声明。...我们可以使用finalize()方法作为Java析构函数替代方法,但自Java 9起该方法也已被弃用。 27. 我们可以一个重载构造函数? 我们可以重载构造函数。...事实上,默认构造函数、带参数构造函数和拷贝构造函数都是构造函数重载形式。 28. 我们可以一个重载析构函数? 不。一个不能重载析构函数。一个只能有一个析构函数存在。 29.

29141

浅谈python,c,java,优劣,语言高低与效率相反不变规律

通常来说,追捧python用户,常常挂在嘴上一点是:python并不慢,因为python行时调用了大量c库,而c是很快。反过来想想,这不是正反映了其胶水语言事实?...Java,这些带点名称是由编译器来查找,运行时候并不会去考虑一共有多少。而在Python,查找过程是在运行时进行,所以要包括每个点。...(Python,要记住一点,"平铺结构比嵌套要好",尽管相对于从性能方面来说,可能它更多涉及是"可读性"和"简单要比复杂好"。) 2、要使用switch语句?...Java,你必须使用getter和setter,因为公共字段不允许你以后改变想法时,再去使用getter和setter。...而在Python,这样做是很傻,因为你完全能够以一个普通特性开始,并可以在任何时候改变想法,而不用影响到这个任何客户。所以Python,尽量不要去使用Getter和setter。

3.2K90

Java反射是什么?看这篇绝对会了!

可以项目运行时,通过动态传入参数决定使用哪一个数据结构。...代码运行之前,我们不确定将来会使用哪一种数据结构,只有程序运行时才决定使用哪一个数据,而反射可以程序运行过程动态获取信息和调用方法。通过反射构造实例,代码会演变成下面这样。...如果需求发生变更,需要构造另一个对象,则需要修改源码,非常不优雅,所以我们通过使用开关,程序运行时判断需要构造哪一个对象,在运行时可以变更开关来实例化不同数据结构。...第一章总结: 反射思想:程序运行过程确定和解析数据类型。 反射作用:对于在编译期无法确定使用哪个数据场景,通过反射可以程序运行时构造出不同数据实例。...例如,在运行时才确定使用哪一种 Map 结构,我们可以利用反射传入某个具体 Map 全限定名,实例化一个特定子类。

84140

Python代码执行模型

Python3.2之后,python执行代码时候会生成一个名为__pycache__子目录,该目录存放一个名为“文件名+解释器+python版本+.pyc”文件,这个文件就是字节码。...python解释器版本改变: .pyc文件名称中含有python版本,导入机制会检查名称python版本,来确认是否需要重新编译。...这决定了python代码执行速度还是可以python,我们只拥有运行时,因为编译器总是在运行时出现,并且是运行程序系统一部分。因为python不需要预处理,编译,汇编,链接这些处理步骤。...所以python代码在运行时就像真正Java程序一样。 Jython目标是让python能够脚本化Java程序,以及Java程序可以Python当作内嵌语言来运行。...PyPy回避了垃圾回收(GC)机制,这导致它非引用计数方案意味着临时文件不会立即关闭,甚至有时候需要手动释放。 最后 上述Python行时结构,目前看来是不太可能会有大改变

72250
领券