今天是2023年1月1日,绝佳的日子。
前几天正好在开始重学java,那就从今天开始写博客记录学习之路。
本科四年,工作三年,再加上去年九月开始读研,接触CS很久了。
希望这次可以从一个比较宏观的角度,扎实地学好java。
目前是先找了一个网课开始学(不想再啃大部头了,学C++那会就是看书,比较折磨)
后期会加上刷题,做项目,准备面试题。
每天学习量不求多,只求坚持。
每天都在认真追求知识上的进步,那么生活自然也就有了秩序感。
目标就是2023年连续365天打卡。
1. java与C对比
JAVA跨平台,C语言可移植性
可移植性:可以使用在任意架构的处理器上,只要那种架构的处理器具有对应的 C 语言编译器和库,然后将源代码编译、连接成目标二进制文件之后即可运行
跨平台性:无需修改即可在任何一个平台上运行
原因:
C涉及到操作系统硬件资源的接口的,比如进程调度,网络通信等 ,这些接口均为每一个操作系统独有的,windows与 Linux 这些接口有差异,一旦C 程序中使用了这些接口,代码放到另外一个平台就无法编译通过了
只要是安装了JAVA虚拟机JVM的操作系统,就可以运行JAVA程序
2.java应用
JAVA2EE 服务器端
Hadoop 大数据
Andriod
3.从java到JVM涉及的工具库和API
4.第一个程序 Hello World!
编译:javac Hello.java
运行:java Hello
class name 要与文件名一致
public class Hello{
public static void main(String[] agrs){
System.out.print("Hello Word!");
}
}
5.编译型 vs 解释型
高级语言分为编译型和解释型两类。
编译型语言指的是将通过编译器一次性全部编译成可执行文件,例如C,C++,Golang,Pascal。
特点:执行效率高(下一次运行,不需要再重复编译源代码)
跨平台性差(不同操作系统支持的函数名,数据类型不同)
闭源(有可执行文件就可以运行)
解释型语言指的是一边解释源代码,一边执行,只会解释用到的源代码,不会生成可执行文件。
例如python, javascript,PHP
特点:执行效率低(每一次运行,都需要再解释)
跨平台性好(不同的OS会有不同的解释器,解释器会生成对应的机器码,解释器屏蔽了平台间的不同)
开源(无法脱离开发环境,每次都需要解释)
OS一般都使用 C/C++ 实现(效率高),只有在应用层面(比如网站开发、批处理、小工具等)才会使用解释型语言。
java混合了这两种类型:
java通过编译器并不生成可执行文件,而是生成了一个class文件(字节码),接着再用解释器解释,在各个不同的平台上运行。这也就解释了之前提到的java的跨平台性是如何实现的。
结语:
写Hello World的时候想起了2015年刚上大一,在机房里,和蔼的陆老师手把手教我们写代码。
我还很执着地问他,为什么for循环一定要从0开始,明明从1开始,我的计数也是正确的。
陆老师直接奔溃了,大声喊道:“这是规矩!计算机的规矩!你不能从1开始!”
2016年大一下学期,java老师第一节课,一直和我们说Hello World!的重要性,说这可是学每一门语言的第一个程序。
可惜他教的实在太烂了,差点掐灭了当时我对计算机的热情。
早知当时,我就该在网上找个网课自己学。
每个年龄有每个年龄的风景,当时没学好java,找工作又误打误撞找了个C++,再写java竟然是七年后的今天了。