最近看《深入理解 Java 虚拟机》,看到这么一句

Java 不是在编译时就会检查类型吗?这个静态语言和动态语言的定义分别是啥?
最近看《深入理解 Java 虚拟机》,看到这么一句

Java 不是在编译时就会检查类型吗?这个静态语言和动态语言的定义分别是啥?
|
kop1989Apr 11, 2020
1
“动态”的“类型安全语言”。
|
|
majiaxin110Apr 11, 2020
2
我怀疑这个动态指的并不是动态类型,我只知道 JVM 对动态类型语言有一些支持,坐等 JVM 大佬来解答
|
|
keepeyeApr 11, 2020
3
只知道强类型弱类型,不懂啥叫动态类型
|
|
mxalbert1996Apr 11, 2020 via Android
6
所以这段话从第一句后半开始不是都在解释为什么说它是动态的吗
|
|
liangduApr 12, 2020 via Android
7
静态语言,编译器时就可以确定类型。
我们从 jvm 的字节码可以通过 fieldInfo 表中的 classInfo 索引确定 java 类成员的具体类型,所以很肯定的说 java 是一门静态语言。 “动态”的类型安全语言,是对虚拟机的实现的要求。类型安全是指,语义安全(这个我不懂)和安全访问非堆内存(不越界之类的)。动态的类型安全语言区别于静态的类型安全,在于要求 jvm 的运行时不停的做这个“类型安全监测”。 明白这一点,我们就知道 jvm 实现要求真高(如果减少安全检测 jvm 应该可以提速),这是“动态的类型安全语言”的性质之一。 其实是“动态的类型安全语言”,对内存访问是有做安全检测的,所以,可以看得出 java 是一门严谨的语言。 |
|
araaaaApr 12, 2020 via iPhone
8
更像是对解释型语言描述,javac 编译出的 class 本质是中间代码
|
|
rogwanApr 12, 2020 via iPhone
9
Java 是动态的类型安全语言
难道不是作者搞错了?按作者这样理解,那还有什么语言算静态,不全是动态吗? |
|
CbdyApr 12, 2020 via Android
10
2020 年了,那个语言没点静态检查能力?没点动态内省能力?
|
|
11
@liangdu “动态类型“和“动态的类型安全”实际上是两个概念?静态类型在编译后并不能完全确保变量的调用过程是安全的,在运行时还要再做检查?这个意思吗?
|
|
mxalbert1996Apr 12, 2020 via Android
12
@rogwan 比如 C/C++ 就是静态的,你在 C/C++ 里越界访问数组或者访问空指针的时候直接就 segfault 了,也就是系统会直接杀掉你的程序,你对此没有任何办法。但在 Java 里 JVM 会先检查你访问的地址合不合法,如果不合法的话会抛出异常,你可以 catch 这个异常然后继续运行程序。
|
|
13
|
|
rogwanApr 12, 2020 via iPhone
14
@mxalbert1996 这样的动态抛出异常,其他的真动态语言也会呀。作者这样是拗概念,混淆常识。
|
|
mxalbert1996Apr 12, 2020 via Android
15
@rogwan 作者想表达的就是 Java 会在运行时动态地做检查,这跟真动态语言有什么关系?不要因为你知识少或者阅读能力差就诽谤别人。
|
|
rogwanApr 12, 2020
16
@mxalbert1996 我回复是你 @我的内容,你连这点理解力都没有吗?你的学识有多高?智商几何?不秀一下也好意思人身攻击?你这素质脑内充屎呀
|
|
mxalbert1996Apr 12, 2020 via Android
17
@rogwan 我的学识嘛,其他不敢说,至少比一个认为所有语言都是动态的人要高吧。
|
|
rogwanApr 12, 2020
18
@mxalbert1996 哈哈,你这个理解力还好意思人身攻击?贬低别人知识少?敢问你哪个学校毕业的呀? ACM 拿过几块牌呀?你这跑出来是秀智商还是秀脑残呀?
|
|
penguinWWYApr 13, 2020
19
动态是用来描述类型安全的,
意思是执行时提供类型信息,进行类型检查,同样的概念映射到 C++就是 RTTI,Run-Time Type Identification |