C语言和Java区别

结构体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 平台推出

1: C语言知识分享:面向对象和面向过程到底是怎么回事?

2:和 Kimi 的对话

相关推荐
柯南46689 小时前
【AI开发之Rust】第 13 课:async/await 与 tokio 异步运行时
rust·编程语言
柯南46681 天前
【AI开发之Rust】第 12 课:并发模型与同步原语
rust·编程语言
名字还没想好☜2 天前
Python sqlite3 实战:事务提交、参数化防注入、WAL 并发与 row_factory 取字典
后端·python·编程语言
柯南46684 天前
【AI开发之Rust】第 10 课:Cargo 工程化 —— 模块、依赖与测试(基础篇收尾)
rust·编程语言
QUOR4 天前
ZorvAI APK 插件框架 · 技术架构与功能介绍
github·apk·编程语言
柯南46685 天前
【AI开发之Rust】第 8 课:泛型、trait 与 trait 对象
rust·编程语言
蛋先生DX5 天前
Java和Go都拍胸脯说"内存我包了",可它们到底是怎么下手的?
java·go·编程语言