强类型与弱类型、静态类型与动态类型概念

网上关于类型的概念貌似十分得模糊,众说纷纭。也有大神说类型是没有定义的,静态和动态类型的概念本身就是不存在。下面只是整理一些网上主流的概念和些许自己的理解。

首先介绍一些概念

1、Program Errors

trapped errors。 可以被程序捕获的错误,程序捕获会终止运行。如除0操作,Java中数组越界等。

untrapped errors。出错后,程序无法知晓,会继续运行,直到程序运行异常。如指针访问错误内存地址等。

2、Forbidden Behavious

Forbidden Behavious是一个集合,包括所有的untrapped errors和部分的trapped errors。

3、Well behaved, ill behaved

well behaved。 如果程序执行是不会出现forbideend behavious,则为 wall behaved。

否则为ill behaved。

强类型与弱类型

强类型strongly typed: 如果一种语言的所有程序都是well behaved——即不可能出现forbidden behaviors,则该语言为strongly typed。例如java限制了用户对指针的使用,从而限制对内存地址的直接操控。

弱类型weakly typed:如果一个语言的程序会出现forbidden behavious,则该语言为弱类型。例如c/c++的非法指针操作,只有程序去访问该地址时才会发现不对头。

网上还有一种说法是依据是否容忍隐式类型转换来区别强弱类型。其实2者的意思其实差不多。因为隐式类型的转换会带来forbidden behavious的风险。所以像容忍隐式类型转换的c/c++更容易发生untrapped errors,所以他们是弱类型语言。

动态类型和静态类型

动态和静态类型存在许多定义的争议。我更倾向于按照在编译阶段还是运行阶段进行代码检查来对他们进行区分。

静态类型(静态检查 statically checked)在编译期进行代码和数据类型检查。比如c/c++,java。

动态类型(非静态检查 not statically checked)在运行时进行代码和数据类型检查。比如python。

最后,关于语言的类型并没有太明确的定义。大家并没有必要深究把他们分类,而是应该去理解每个语言的自身特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值