关于Java是强类型语言的相关解释
2016-04-09 14:49
330 查看
感谢
@healer_kx:强弱是说互相转化的能力,Java的类型几乎不能相互转换,所以很强。
感谢
@yami251139:強類型就是強制你一定要有個類型,還要看他們之間互相轉換的難易度。
弱類型反之。。。
另外摘自知乎的回答:
untrapped errors。 出错后继续执行,但可能出现任意行为。如C里的缓冲区溢出、Jump到错误地址
ill behaved: 否则为ill behaved...
2. 有了上面的概念,再讨论强、弱类型,静态、动态类型
弱类型weakly typed: 否则为weakly typed。比如C语言的缓冲区溢出,属于trapped errors,即属于forbidden behaviors..故C是弱类型
前面的人也说了,弱类型语言,类型检查更不严格,如偏向于容忍隐式类型转换。譬如说C语言的int可以变成double。 这样的结果是:容易产生forbidden behaviours,所以是弱类型的
动态类型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
作者:姚培森
链接:https://www.zhihu.com/question/19918532/answer/21647195
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
@healer_kx:强弱是说互相转化的能力,Java的类型几乎不能相互转换,所以很强。
感谢
@yami251139:強類型就是強制你一定要有個類型,還要看他們之間互相轉換的難易度。
弱類型反之。。。
另外摘自知乎的回答:
类型系统的一些概念,众说纷纭,使用上也比较乱。有些东西,甚至不好严格定义。以下算学术界的一种相对“严格”的说法。
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
作者:姚培森
链接:https://www.zhihu.com/question/19918532/answer/21647195
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
相关文章推荐
- Java基础之——泛型(一)
- Java多线程学习(总结)
- Java作为一门编程语言,最好的学习方法就是写代码
- JAVA入门的文章很多,但是却没有一篇是先宏观介绍JAVA的
- Spring框架 AOP (五)
- 要想成为java高手就需不断努力!
- LeetCode Contains Duplicate JAVA
- Java技术_Java千百问(0024)_finally关键字如何使用
- 【Shiro + Spring MVC整合】教程
- java中Class对象详解和类名.class, class.forName(), getClass()区别
- eclipse从数据库逆向生成Hibernate实体类
- 《JAVA开发环境的熟悉》实验报告——20145337
- java单例类(Singleton)
- 一种Java异常传播的静态结构抽取方法
- 使用Spring Boot来加速Java web项目的开发
- LeetCode Valid Anagram JAVA
- LeetCode Majority Element JAVA
- URLEncoder.encode(oldname,"UTF-8")在firefox中无效
- [疯狂Java]SQL库函数:行函数、组函数、select分组、筛选组
- Java中实现链式操作的简单例子