结构体vs类
C语言没有类,但是有结构体,结构体中不能有函数,只能有属性。
面向过程的思考方式中,数据和操作是严格分离的。1
声明调用顺序?2
C语言,先声明后调用,想要调用一个子流程,势必要在调用之前就定义好。
Java,没有函数定义先后的问题。
C 编译器(传统实现)扫描源文件时是从上往下、一遍过 的。当它遇到函数调用时,必须当场知道这个函数的签名(返回类型、参数类型),因为:
1、要生成正确的机器码:返回值占几个字节、参数怎么压栈,调用的同时就要确定;
2、要做类型检查:你传 int 给接收 char* 的函数,必须在调用点报错。
Java 编译器是多趟扫描 的:
第一趟:从头到尾读完整个 .java 文件,把所有类的成员(字段、方法签名)先登记进符号表;
第二趟:再逐方法检查方法体里的调用是否合法。
分工职责
没必要分成一个专门写变量、一个专门写方法的,用Java类根据要实现的功能实现方法(写方法自设变量)。
语言历程
| 年份 | 语言 | 作者/公司 | 为什么会出现 |
|---|---|---|---|
| 1972 | C | Dennis Ritchie(贝尔实验室) | 重写 Unix 操作系统,需要能直接操作硬件的高级语言 |
| 1983~85 | C++ | Bjarne Stroustrup(贝尔实验室) | 在 C 基础上加面向对象,管理越来越大的软件项目 |
| 1991~95 | Java | James Gosling(Sun 公司) | 对 C++"做减法":去掉指针、加垃圾回收、实现跨平台 |
| 2000 | C# | 微软 | 微软对标 Java 的产物,随 .NET 平台推出 |
2:和 Kimi 的对话