龙空技术网

Java初学,学习笔记(一)

小白程序员11 132

前言:

今天姐妹们对“javac就业”大约比较关注,同学们都想要分析一些“javac就业”的相关文章。那么小编同时在网上网罗了一些有关“javac就业””的相关文章,希望同学们能喜欢,咱们一起来了解一下吧!

1.初识Java 第一章初识java,从计算机语言的发展历史开始讲解,是如何从第一代机器语言变成了第二代汇编语言,最终到第三代高级语言,所有的发展都是朝着人类越来越好的方向来发展的。试图帮助读者了解java语言的简史和整体介绍,总结这个语言就是“Java老好了,但不同的语言,平分秋色”!同时进行Java开发的环境搭建,编写第一个“HelloWorld”,感受Java的魅力所在。 2.数据类型 第二章数据类型,这部分就开始了基础语法的讲解,主要就是围绕数据类型展开,Java是一门“强类型”的语言,这也是区分于其他语言之处。这章是基础中的基础。 3.运算符 第三章运算符,介绍的是java支持的运算符有哪些,运算符的优先级别及注意事项,还有运算符的作用,本章的习题还是比较有趣的。 4.流程控制 第四章流程控制,介绍java语言中流程控制分成三类:顺序结构,选择(分支)结构,循环结构。包括一些关键字的使用,本章会进行讲解。循环结构对于很多初学者是比较难的一个技能点,也是Java的入门技能点,经常有人说学会了循环你才是跨进了Java学习的门槛。 5.方法的定义/调用/重载 方法的定义、调用、重载是很重要的技能点,所以我单独提取为一章,可见重要性。看名字就知道了这章主要是讲方法是如何定义、如何调用、如何重载的,并且本章讲解了内存分析和相关面试题,很基础很重要的一章。 6.数组 第六章数组,当然也是重点章节,首先呢我们要了解数组是用来做什么的,基础语法有什么,如何对数组进行增删改查,这部分对新手来说有趣并且具备挑战性。 7.面向对象 第七章面向对象,这章是重中之重,学好面向对象,掌握语言精髓,会伴随着整个职业生涯。 本书所有技能点都配合视频讲解,所以建议大家参照视频配合使用,把这本书当做一个“笔记”,把此书当做一个“口袋书”,随时随地可看。本书不同于其他Java书籍之处是本书使用口语化的文字进行编写,目的方便大家快速理解抽象概念。期待大家读完后,有收获!也希望收到各位的意见和建议,我会多多改进与完善。 第一章 初识Java 1.1 计算机语言的发展历史 比如说我们平常说的Java、Python、C、C++、PHP 等,都是计算机编程语言。计算机编程语言的发展,是随着计算机硬件本身发展而发展的。硬件速度越快、体积越小、成本越低,那么应用人类社会的场景就会越多,所需要的算法就会越复杂,也就要求我们使用的计算机编程语言越高级。越容易使用的语言,就有越多人使用;越多人使用,就有越多协作;越多协作,就可以创造越复杂的物体; 计算机语言经历了三代:第一代是机器语言,第二代是汇编语言,第三代是高级语言。如下图所示:

【1】第一代:机器语言(相当于人类的原始阶段) 机器语言是机器指令的集合,那机器指令是什么呢?就是一台机器可以正确执行的命令。电子计算机的机器指令是一列二进制数字(由0、1组成)。计算机将之转变为一列高低电平,以使计算机的电子器件受到驱动,从而进行运算。上面所说的计算机,指的是可以执行机器指令并进行运算的机器。这是早期计算机的概念。早期的程序设计均使用机器语言。程序员们将用 0、1 数字编程的程序代码打在纸袋或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,从而进行运算。 那时候计算机也可以称之为打孔机。 我们可以举个例子看一下有多麻烦,应用CPU完成某个加减运算,运算到计算机底层其实都是通过机器码进行的,机器码如下:

假如将程序错写成以下的错误,请你找出错误:

书写和阅读机器码程序都不是一件简单的工作,要记住所有抽象的二进制码。上面只是一个非常简单的加减运算小程序,就暴露出机器码的晦涩难懂和不易查错。写如此小的一个程序尚且如此,那么实际上一个有用的程序至少要有几十行的机器码。那么,情况将会怎么样呢? 例如在显示器输出“welcome to masm”,机器码如下:

看到这样的程序,你有什么感想?如果程序里有一个“1”被误写成为“0”,又如何去查找错误呢? 很可怕的一件事 【2】第二代:汇编语言(相当于人类的手工业阶段) 为了编程的方便,以及解决更加复杂的问题。程序员开始改进机器语言,使用英文缩写的助记符来表示基本的计算机操作。这些助记符构成了汇编语言的基础。如下是一些常见的汇编语言助记符(单词)比如:mov,add,sub之类,这样人更容易使用了。识别几百、几千个单词,感觉要比几百几千个数字,美妙多了。汇编语言相当于人类的手工业社会,需要技术极其娴熟的工匠,但是开发效率也非常低。 汇编语言虽然能编写高效率的程序,但是学习和使用都不是易事,并且很难调试。另一个复杂的问题,汇编语言以及早期的计算机语言(Basic、Fortran等)没有考虑结构化设计原则,而是使用goto语句来作为程序流程控制的主要方法。这样做的后果是:一大堆混乱的调转语句使得程序几乎不可能被读懂。对于那个时代的程序员,能读懂上个月自己写的代码都成为一种挑战。 汇编语言仍然应用于工业电子编程领域、软件的加密解密、计算机病毒分析等。 下面以Masm软件为例,编写一个简单的“hello world!”程序。

【3】第三代:高级语言(相当于人类的工业阶段) 对于简单的任务,汇编语言可以胜任。但是随着计算机的发展,渗透到了工作生活的更多的方面,一些复杂的任务出现了,汇编语言就显得力不从心(应该说是程序员使用汇编语言解决复杂问题出现了瓶颈)。于是,出现了高级语言。像我们熟知的C、C++、Java等等都是高级语言。 高级语言允许程序员使用接近日常英语的指令来编写程序。例如下图所示:

1.2 JAVA简史【1】SUN公司

美国SUN(Stanford University Network)公司

在中国大陆的正式中文名为“太阳计算机系统(中国)有限公司”

在台湾中文名为“升阳电脑公司”。

【2】Java的发明人

James Gosling

【3】Java为什么被发明

源于Green项目,打算用于像电视盒这样的消费类电子产品,最开始项目组打算用C++去写,但是越写越麻烦 后来这个James Gosling 决定自己去发明一个语言 因为他的语言功底非常深,当时也是一个小组2、3个人,“James Gosling”属于领头人,所以被历史记住了。

【4】阶段经历

整个这个经历是从1991年开始的,SUN公司的Green项目,最开始发明这个语言的时候,给这个语言起名为“Oak”,翻译过来就是“橡树”,起这个名字可能是想像树一样健康啊,年轻啊。我觉得是这个意思,后来注册这个语言的时候重名了,这个名字就不能再用了。野史中说是开会的时候服务员上了一杯咖啡,这个咖啡就是产自印度尼西亚的一个爪哇岛(Java)上的一个咖啡豆磨的,后来把这个语言起名字叫“Java”,可能是想像这个咖啡一样被很多人喜欢,才会命名为这个。所以一般Java的图标前有一个咖啡杯的图标:

Java的出现,就伴随着Java的软件(JDK)的版本的迭代。推出的版本是一点一点迭代的,好比软件的一个更新。像微信一样之前的微信只能聊聊天不能发红包,后来增加了发红包的功能,版本迭代更新。Java的发展如下:

其实没有什么神奇的,就是软件的迭代过程而已。就是你要用Java,比如安装一个软件,这个软件一直在进行版本迭代。

从2018年开始,每半年就会推出新的版本,所以后面Oracle的战略就是:小步迭代,快速奔跑。有没有发现最开始说的是sun公司后面是Oracle,因为SUN公司已经被oracle公司收购。现在我们使用的java就是属于甲骨(Oracle)。

看上面的图片可以看出,JDK版本有很多,我们应该用哪个呢?jdk8.0/jdk11等是Oracle支持的长期维护的版本,其余中间的一些半年就不维护了,你出现问题也不会管,现在很多人追求新,但是有没有考虑过兼容性呢?你用的软件能不能兼容最新的jdk呢,再一个问题就是从jdk8.0开始,jdk目录结构也变了:

(下图看一看就行,知道有变化即可)

虽然不知道里面是干什么的但是肉眼可见对比来说jdk9比jdk8少了一部分。所以建议:我们学的时候要学习一个经典的jdk,并且假如学内容多的,那以后看内容少的也能看懂,但是学内容少的 再去看多的内容多的 会看不懂的,并且企业中用jdk7.0,jdk8.0是最多的,所有咱们不用最新的也是可以的。

对于初学者来说,应该以企业主流应用版本为核心进行学习,没有必须在此处追求最新版本。

【5】为什么出现这么多版本

不同版本有功能上的更新,有对上一个版本的改进/优化。

如果出了一个新的版本的话,肯定要更新东西啊,不然出新版本干嘛,具体后续再说,现在有一个印象就好,因为在说版本更新的时候,一定是你有一定的基础的时候了不要着急,现在学习这个就要按部就班的走就可以了。

1.3 JAVA结构体系

JavaSE(Java Standard Edition):标准版,定位在个人计算机上的应用

JavaEE(Java Enterprise Edition):企业版,定位在服务器端的应用

JavaME(Java Micro Edition):微型版,定位在消费性电子产品的应用上

看这些文字就明显知道了整个体系分为三部分:第一部分是JAVASE,第二部分是JAVAEE,第三部分是JAVAME。先把这些名字记住就可以了。它们三部分应用场景是不同的,大致解释一下,比如JavaSE做什么呢,就是java最最最基础的体系结构,能做一些桌面那种小游戏,比如说“坦克大战”,“贪吃蛇”,“飞机大战”,“愤怒的小鸟”等,学完SE就可以了。

但是如果你有更高要求比如说想做一个网站之类的,那这个时候你就得学javaEE部分了,包括你还需要学习一些框架等。

ME是什么呢,比如说小时候爸妈手机上的小游戏可能就是利用ME编写的,那时候运行游戏刚进去的时候有个咖啡标,可能太年轻的小伙伴没有这个经历,我小时候总偷偷玩我妈的手机,但是那个游戏不好玩的。

三部分之所以应用场合不一样是因为包含的东西是不一样的,看这张图

可以看出 JavaSE是最最最基本的东西,在SE的上边又扩展了一堆内容就形成了JavaEE,其实我们要学习的是SE和EE的所有知识,而 ME呢你说淘汰也是可以的,因为现在已经没有人用ME了,但ME和SE有一点点交际,比如分支结构,循环结构,我们本书就是JAVASE的核心内容。

1.4 JAVA的特性与优势

本节我们要说的是Java的特性与优势,说白了就是要夸一夸java的好处。我们来看一下:(下面是官方说法)

跨平台/可移植性

q 安全性

q 面向对象

q 简单性

q 高性能

q 分布式

q 多线程

q 健壮性

听着很高大上啊,就是不懂啥意思,哈哈。只要记住一句就行:java很好! 但是,不要跟别人去争辩说java是不是世界上最好的语言之,只能说在它的领域是最好的,但并不是说学习了java,以后所有的东西都要用java开发了,某些领域其他语言有更出色的表现,比如Objective C和后来的Swift在iOS设备上就有着无可取代的地位。浏览器中的处理几乎完全由JavaScript掌控。Windows程序通常都用C++或C#编写。所以,Java只是在服务器端编程和跨平台客户端应用领域则很有优势。 只能说,不同的语言之间,平分秋色! 但是你要知道:java在语言排行榜中它是第一位的,稳居榜首。Java就业需求量是非常大的。就业也是非常可观的,很多人学习Java就是因为入门简单,薪资高。(当然,你也要学好,Java现在也不是一个你学一点点就能找到工作的学科)

1.5 核心机制

接下来我们就说一下Java两个最核心的机制,也是两个最明显的优点:

【1】垃圾回收机制

先以生活案例做一个讲解,比如说,去饭店吃饭、点菜, 吃过之后剩余的一部分东西,对与我们来说就是垃圾了,在饭店会有服务员来帮你清理这些垃圾就可以了,在学校食堂,你自己吃会有一个垃圾回收处,自己要把垃圾丢掉,那这两种区别是啥呢?一个自己动手,一个是别人帮你。服务员收拾的时候是不是需要等什么时候手头没工作了,再去清理,这是我们吃饭的时候垃圾是怎么清理的。

现在我们程序中也需要清理垃圾,不仅是Java程序运行起来有垃圾,任何程序运行起来都有垃圾,因为程序运行起来都会在内存中开辟空间,比如说变量啊或者对象啊。。只要这东西不用了,再好的东西也是垃圾,那这些东西我就要在内存中给你清掉,相当于是一个释放内存的过程,因为垃圾一直堆着,那内存不就溢出了吗,为了防止这个问题出现就要解决这个问题。比如C++中清垃圾这种事就需要程序员自己完成,要考虑太多因素了,清理多了清理少了清理错了,都是事!但在我们Java中就有这么一个优点 ,这个优点是我们Java底层有一个垃圾收集器,就好比饭店的服务员,什么时候有时间就会给你清理,程序什么时候写完就不需要管了,当然程序员是无法干预的,无法精准计算它清垃圾的时间。

总结一下就是:垃圾收集的目的是清除不再使用的对象,当对象建立的时候,这个垃圾收集器就开始监控对象的动态情况,监测到有无用垃圾就开始清理,程序员无法精准干预。

1.不再使用的内存空间应回收---》这个过程叫垃圾收集;

2.Java消除了程序员回收无用内存空间的职责;提供一种系统级线程跟踪存储空间的分配情况。在JVM的空闲时,检查并释放可被释放的存储器空间;相比c++,开发人员负责要自己收回无用内存。

3.垃圾收集在Java程序运行过程中自动进行,程序员无法精确控制和干预;

4.GC的自动回收,提高了内存空间的利用效率,也提高了编程人员的效率,很大程度上减少了因为没有释放空间而导致的内存泄露。

后续更高级的内容:

1.垃圾收集器有几种

2.垃圾收集器底层原理剖析

3.垃圾收集器算法,优化

这个更高级的事先不说,因为我们还没开始写代码呢,搞复杂肯定是不会的,后续会学到的。

【2】java的跨平台原理

通过下面这张图来看,任何一种语言写代码的时候都会产生一种文件,这个文件也会分什么语言写出来的,比如说我们这个语言用java写的,名字叫做HelloWorld.java,我们通常把这个.java结尾的叫源文件就可以了,在这个源文件中肯定有自己的逻辑,比如说实现了一个自己的案例:进行自我介绍,比如说我当前的这个平台是 Windows系统的,这个程序/代码肯定不能直接运行啊,所以中间经历了怎么的过程呢?

首先这个.java文件要经历一个过程,会将这个.java文件变成一个.class后缀的一个文件,那这个文件我们把它叫做字节码文件,这个过程我们管他叫做编译,拿着这个字节码文件到Windows系统运行出来,我们称之为执行/翻译,那是谁起到了翻译的作用呢?真正起作用的是这个虚拟机(JVM), 虚拟机的作用就是充当了一个“翻译官”,将字节码文件翻译成为当前平台认识的可执行文件的格式。

反过来我们说一下翻译和执行的过程,其实也是靠虚拟机程序支撑起来的。比如说,你现在想要聊天启动qq这个功能,本质上这个qq就是一个程序 ,然后具备了聊天的功能,现在你要是想完成这个编译,或者是想完成执行,底层也是靠代码,代码就形成了程序。我们编译将.java文件生成一个.class文件,靠的程序是(javac.exe),实际上是通过javac.exe这个命令来帮你完成的,这个执行是通过java.exe来完成的,在执行的时候表面调用的是java.exe实际上在调用java.exe的时候,会动态调用JVM,实际真正起执行作用的是JVM,JVM起到一个“翻译官”的作用,是JVM将字节码文件一行一行的解释成为当前操作系统认识的可执行文件的格式,所以我们说java是一个“解释型”的语言(面试可能会问Java是否是一个解释性的语言)。

那现在这个平台除了Windows以外,还可能有其他的平台,这个平台你可以理解成一个电脑或者服务器。比如一个安卓的手机和一个苹果的手机,都安装qq 版本肯定不一样,一个是安卓版本的qq,一个是苹果版本的qq。 但是它俩功能是一样的,都能聊天,都能抢红包,都能视频,类似我们JVM也是一样的,每个平台都有对应的JVM,这些JVM虽然版本不同,但是作用是相同的。这样我们就可以完成一件事,就是一个代码,编译一次,然后拿着这个编译生成的字节码文件,可以到不同的平台去运行,因为每个平台都有对应的JVM。所以实现了一次编译,到处运行(Write Once,Run EveryWhere)。这个原理就是跨平台原理,而这个跨平台原理具体实现就是通过JVM帮我们实现的,所以说java不见得是最好的语言,但是java中的JVM一定是最好的JVM,到这就把跨平台原理讲清楚了,如果你要是想编译,执行,就需要具备Java环境才可以,这个环境就需要你安装一个软件:JDK ---》必须安装这个软件,才具备开发环境。具体安装后续再说。先搞懂JVM的作用,什么是跨平台原理。

在此处,我们顺道比对一下C语言的跨平台原理:

我们这个也是先编写一段程序也叫HelloWord但不是.java后缀了,而是.c后缀的源文件,我也想让它在不同平台上运行。以Windows平台举例,一个代码/程序,它首先会经过一个编译器,这个编译器是Windows的一个专门的编译器,经过这个编译器的时候会产生执行文件,是拿着这个执行文件到你这个平台上运行(编译后产生的可执行文件可以在对应的平台上运行),编译器是和平台相关的,编译器产生的执行文件也是和平台相关的,你拿着Windows平台生成的文件到Linux平台是不能运行的,这是不同于Java的。

C跨平台和JAVA跨平台的区别:

(1)Java的字节码文件是和平台无关的,拿着这个字节码文件到不同的平台去运行

(2)C语言不同的平台有不同的编译器,编译器是与平台相关的,编译后的执行文件也跟平台相关

1.6常用DOS命令

这节说一下DOS命令,说几个常用的DOS命令

【1】DOS操作系统

现在大家所熟悉的操作系统可能就是微软的Windows,但是微软在推出Windows之前就是DOS操作系统,Windows有非常好看可视化界面,而之前的DOS系统看着很难看,以前要是想操作盘符,操作文件都是用命令来完成,那这个命令就叫DOS命令。

DOS是英文"Disk Operating System"的缩写,其中文含意是"磁盘操作系统"。 大致长下面的样子,黑了吧唧的,相比windows确实“难用”,“难看”。

【2】DOS命令

在windows中,我们通过鼠标菜单等来操作系统,而在dos操作系统中,要通过dos命令来操作系统,是一种面向磁盘的操作命令,不区分大小写。

【3】命令学习:

windows给我们保留了类似dos系统的操作界面,可以直接操作磁盘!比如是当windows崩溃的时候,可以通过dos方式解决,它是一种纯命令方式,那么如何在windows状态下进入dos方式呢?

快捷键打开控制命令台 :win + r 然后录入 cmd

进入这个里面就可以操作命令了:

【4】具体dos命令:

(1)切换盘符:

进入c盘: c:

进入d盘: d:

(2)显示详细信息:dir

(3)改变当前目录:cd

(4) cd..的作用

. 代表当前目录

.. 代表上一层目录

(5)清屏:cls

(6)切换历史命令:上下箭头

(7)补全命令: tab按键

(8)创建目录:md

   删除目录:rd

(9)复制文件命令:copy:

(10)删除文件:del

del后面如果接的是文件夹/目录:那么删除的就是这个文件夹下的文件,而不是文件夹

如果文章对你有帮助的话,希望可以给小编点个赞。如果需要学习笔记和Java教学视频的话可以评论,或者私信

标签: #javac就业