java强类型和弱类型_弱类型语言有哪些_和强类型、动态、静态类型的区别在哪里...

编程语言类型

(一)编译型和解释型

计算机不能直接理解高级语言,仅仅能直接理解机器语言,所以必需要把高级语言翻译成机器语言,计算机才干运行高级语言编写的程序。翻译的方式有两种,一个是编译,一个是解释。

编译型语言写的程序执行之前,已经把程序编译好了,比方exe文件,以后要执行的话就不用又一次翻译了。直接使用编译的结果即可了(exe文件),由于翻译仅仅做了一次,执行时不须要翻译,所以编译型语言的程序执行效率高。

解释性语言的程序在执行程序的时候才翻译,边执行边翻译。

这样解释性语言每执行一次就要翻译一次。效率比較低。

用一个样例类比下,比方一个人读一本外语书。他能够选择直接读别人翻译好的(编译型),或者让别人一句句读给他听(解释型)。翻译好的译文随时能够再读,请别人读每一个章节都须要又一次读一次。

(二)动态语言和静态语言

动态类型语言:在执行期间检查数据的类型的语言。

用这类语言编程,不会给变量指定类型,而是在附值时得到数据类型。

静态类型语言:相反静态类型语言是在执行前编译时检查类型。在写代码时。没声明一个变量必须指定类型。

动态类型语言如JS

funcTIon add(a,b){

return a+b;

}

add(1,2);

add(‘1’,2);

静态类型语言如C、C++、Java、C#等

public int add(int a,int b){

return a+b;

}

(三)强类型定义语言和弱类型定义语言

强类型定义语言:强制数据类型定义的语言。

也就是说,一旦一个变量被指定了某个数据类型,假设不经过强制转换。那么它就永远是这个数据类型了。举个样例:假设你定义了一个整型变量a,那么程序根本不可能将a当作字符串类型处理。

强类型定义语言是类型安全的语言,如Java。

弱类型定义语言:数据类型能够被忽略的语言。它与强类型定义语言相反, 一个变量能够赋不同数据类型的值。如JS。

d3bc9117114dbfcd988766c1d52498a3.png

弱类型、强类型、动态类型、静态类型语言的区别

类型系统的一些概念,众说纷纭,使用上也比较乱。有些东西,甚至不好严格定义。以下算学术界的一种相对“严格”的说法。

1. 先定义一些基础概念

Program Errors

trapped errors。导致程序终止执行,如除0,Java中数组越界访问

untrapped errors。 出错后继续执行,但可能出现任意行为。如C里的缓冲区溢出、Jump到错误地址

Forbidden Behaviours

语言设计时,可以定义一组forbidden behaviors. 它必须包括所有untrapped errors, 但可能包含trapped errors.

Well behaved、ill behaved

well behaved: 如果程序执行不可能出现forbidden behaviors, 则为well behaved。

ill behaved: 否则为ill behaved.。。

2. 有了上面的概念,再讨论强、弱类型,静态、动态类型

强、弱类型

强类型strongly typed: 如果一种语言的所有程序都是well behaved——即不可能出现forbidden behaviors,则该语言为strongly typed。

弱类型weakly typed: 否则为weakly typed。比如C语言的缓冲区溢出,属于trapped errors,即属于forbidden behaviors.。故C是弱类型

前面的人也说了,弱类型语言,类型检查更不严格,如偏向于容忍隐式类型转换。譬如说C语言的int可以变成double。 这样的结果是:容易产生forbidden behaviours,所以是弱类型的

动态、静态类型

静态类型 staTIcally: 如果在编译时拒绝ill behaved程序,则是staTIcally typed;

动态类型dynamiclly: 如果在运行时拒绝ill behaviors, 则是dynamiclly typed。

3. 误区

大家觉得C语言要写int a, int b之类的,Python不用写(可以直接写a, b),所以C是静态,Python是动态。这么理解是不够准确的。譬如Ocaml是静态类型的,但是也可以不用明确地写出来。。

Ocaml是静态隐式类型

静态类型可以分为两种:

如果类型是语言语法的一部分,在是explicitly typed显式类型;

如果类型通过编译时推导,是implicity typed隐式类型, 比如ML和Haskell

4.下面是些例子

无类型: 汇编

弱类型、静态类型 : C/C++

弱类型、动态类型检查: Perl/PHP

强类型、静态类型检查 :Java/C#

强类型、动态类型检查 :Python, Scheme

静态显式类型 :Java/C

静态隐式类型 :Ocaml, Haskell

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值