2019.3.4 21:04 二刷结束留念
作为一个文娱生活很丰富的技术小白的计算机研二硕士在读研究生,未来的程序媛,已经慢慢感受到了一年后的求职压力。笨鸟要先飞,何况已经不早了o(╥﹏╥)o从今天起,立志在未来不到一年的时间内实现从技术小白到能够掌握基本技术的逆袭!
这周从周一就各种开始做功课,看了很多面经,也咨询了很厉害的学长,经过好几天的犹豫和纠结,最终决定学习JAVA。因为实验室是做C++的,中间有犹豫过要不要学C++,但考虑到自己对以后的求职还是更倾向于JAVA岗一点,而且以前也对JAVA基础有过了解,对这门语言比较有好感。实验室的项目都是有针对性的,对相应的项目所需要的知识缺什么补什么即可,但校招不同,要求对知识有系统全面的掌握,精力有限,只能够精学一门语言,权衡之下还是学习针对校招的JAVA。
具体的学习计划还在和有经验的学长沟通中,希望能够吸取他的经验,小白入门先从基础视频教程看起,视频对于小白来说更好上手一些,有一个初步的认识之后再系统的看书~
写这个笔记的初衷,一方面是便于自己总结和记录所学的知识点,另一方面是激励自己能够坚持下去。
我看的是毕向东JAVA基础视频,接下来是跟着视频学习做的笔记:
01-基本常识
软件开发
什么是软件?
软件:一系列按照特定顺序组织的计算机数据和指令的集合。
我们之所以制作软件,就是为了处理现实生活中的数据,处理的时候就需要有一些指令来帮我们操作。所以软件其实就是数据和指令的融合体。
常见的软件:
系统软件:windows,Linux,DOS(微软靠它发的家)等。
有了操作系统就可以了吗?并不是,需要做一些自己喜欢玩的东西,这时就涉及到应用软件了。
应用软件:扫雷,迅雷,QQ等。
什么是开发?
开发就是制作软件,做一些软件给其他人使用。
人机交互
软件的出现实现了人与计算机之间的更好的交互。人对计算机进行操作,计算机可以反应出人想要的内容。
交互方式:
有两种:
图形化界面:这种方式简单直观,容易上手,使用者易于接受。
命令行方式(DOS):需要有一个控制台,输入特定的指令,让计算机完成一些操作。这个操作必须记住很多命令,才能让计算机做一些事情。
命令行方式
dos命令行,不是我们重点要学的,因为这些指令很多人已经不去记忆了,都通过图形化界面来完成。这门基础课的初期会涉及一些dos命令的操作,下面是课程中常见的命令:
dir:列出当前目录下的文件以及文件夹。
md:创建目录。
rd:删除目录。
cd:进入指定目录。
cd..:退回到上一级目录。
cd\:退回到根目录。
del:删除文件。
exit:退出dos命令行。
示例:
开始-运行->输入:cmd 打开一个dos窗口。
在这里面就可以做一些操作啦。首先输入:cd\ ,切换到C盘。 输入:dir,列出当前目录下的文件以及文件夹,在dos下看到C盘中的目录。
对文件夹的操作:
输入:md kkk,在C盘中创建了一个名为kkk的文件夹,其实和图形化界面操作一样的道理,只是操作方式不同了。输入:rd kkk,删除该文件夹。输入:cd data,md op,进入data文件夹,并在里面创建一个名为op的文件夹。输入:cd..,返回上一级目录。cd..就是在一层一层的往回退。输入:cd\,直接退到根目录。输入:del op,op是一个目录,会提示是否确认(Y/N)?会删除op这个文件夹中的所有文件,但是op这个文件夹还在。
在dos命令中删除文件夹,必须要保证文件夹是空的,否则无法删除,要进入文件夹中,把里面的文件都删掉,再退出去用rd命令,或者用del+文件夹名一次性删除文件夹里的所有文件,最后才能删除这个文件夹。
对文件的操作:
输入:cd data\op,进入该目录,输入:echo haha>1.txt,创建了一个名称为1的txt文档,里面的内容为haha。甚至还可以用edit命令来编辑文档,这里不做重点掌握。输入:del 1.txt,删除该文件。在dos命令行中删文件,是不走回收站的。 输入:del *.txt,这个目录中只要是txt扩展名的文件就全部被删掉了。
想退出dos命令行,可以直接关闭对话框,或者用更有技术含量的方法(emmm),输入:exit。
这些操作命令其实不用特意背,多操作几遍就熟啦。
我们通过dos命令行方式也能完成图形化界面的操作,其实操作图形化界面底层用的也是这些命令,它只不过为了让用户操作更简单,不用去记录这些命令,而是通过在图形化界面中的鼠标点击的形式来完成。
计算机语言
我们想要自己制作一个软件,实现让别人拿着这个软件和计算机交互,这个交互的过程,其实就是人和计算机进行交流。在dos命令行中,如果命令写错了,计算机就不帮你执行,你必须写一些计算机能够识别的东西,它才会帮你执行。这就是计算机语言。
你想和韩国人说话要学韩语,想和日本人说话要学日语,想和计算机说话就要学计算机语言。
计算机语言有很多种,如:C,C++,Java等。
我们要学的就是Java语言。
我们只要按照Java语言的语法规则写东西,计算机就能识别。
和人说的语言相比,计算机语言好学很多,因为计算机说的语言是固定的,非常严谨,只要按规则说就好,人类的语言就很多变了~
因此先从语言的规则开始学起。
02-Java的跨平台性
Java语言概述
是SUN(Stanford University Network,斯坦福大学网络公司)1995年推出的一门高级编程语言。
是一种面向Internet的编程语言。网络兴起的时候,它推出来,对网络的贡献非常的大。
随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。
是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。这里的平台指的是操作系统。
Java语言的三种技术架构
它比较具有广泛性,涉猎的方向非常的多,所以很多地方都在用。
J2EE(Java 2 Platform Enterprise Edition)企业版
JAVAEE是为开发企业环境下的应用程序提供的一套解决方案。
该技术体系中包含的技术如Servlet Jsp等,主要针对于Web应用程序开发。
Java5.0版本后,已经更名为JAVAEE啦。我们以后工作了就是JAVAEE程序员~
J2SE(Java2 Platform Standard Edition)标准版
是为开发普通桌面和商务应用程序提供的解决方案。
该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发。比如Java版的扫雷。
Java5.0版本后,更名为JAVASE。这个是基础版本,我们现在学的就是这个版本。
J2ME(Java 2 Platform Micro Edition)小型版
是为开发电子消费产品和嵌入式设备提供的解决方案。
该技术体系主要应用于小型电子消费类产品,如手机中的应用程序等。
Java5.0版本后,更名为JAVAME。
Java语言的特点:跨平台性
什么是跨平台性?
通过Java语言编写的应用程序在不同的系统平台上都可以运行。
所谓的平台是指操作系统,我们做出来的软件会在操作系统上运行,做软件有很多种方式,有很多种语言都能完成。Java的最大特点在于,用这种语言做的软件,在Windows系统上可以执行,在Linux系统上也可以执行,这就是跨平台性。C++做的软件,只能在Windows上执行,在Linux上就执行不了。
原理是什么?
只要在需要运行java程序的操作系统上,先安装一个Java虚拟机(JVM Java Virtual Machine)即可。由JVM来负责Java程序在该系统中的运行。
它之所以可以跨平台运行,就是有一个独立的可以解析Java程序的解析器。
那么问题来了,虚拟机跨平台吗?虚拟机依赖于平台吗?虚拟机依赖于平台。Windows系统的内核和Linux不一样,虚拟机有可能调用到系统底层的东西,它需要针对不同的系统来编写一个虚拟机,所以虚拟机是分版本的,Windows版和Linux版的虚拟机是不一样的。但是Java程序是不用变的。
在欧美用户的电脑中,装的不只是Windows系统,在编写软件时,大家的首选语言就是Java,因为它做的软件各个系统都能用。
C++是微软的语言,C++的软件放在Windows中可以执行,是因为Windows中有一个可以解析C++程序的虚拟机,所以Windows对C++的支持是非常好的。Windows本身也是用C和C++写的。
03-Java环境搭建(安装)
Java语言的环境搭建
明确什么是JRE,JDK
JRE(Java Runtime Environment Java运行环境):
其中包括Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库等,如果想要运行一个开发好的Java程序,计算机中只需要安装JRE即可。
JDK(Java Development Kit Java开发工具包):
JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。所以安装了JDK,就不用再单独安装JRE了。
其中的开发工具:编译工具(javac.exe)、打包工具(jar.exe)等。
简单而言,使用JDK开发完成的java程序,交给JRE去运行。
JDK包含JRE,JRE包含虚拟机,这就是它们三个之间的关系。图中蓝色部分为Java开发用到的工具。
下载JDK
官方网址:
www.oracle.com
java.sun.com
我们进入第一个网站。
点Java SE可以,点Java SE6 Update 22也可以。
我们点击Java SE。
继续点击Download JDK。
6u21。其中6指版本,u指update,21指更细节版本。
继续点击Download,进入下载页面。
在Platform(平台)这一项选择:Windows。
点击:Continue。
点击这个文件下载即可。
视频录制比较早,网页是当时的,现在登入网页和视频中不一样了,我自己操作如下,下载了Java SE 11:
但是发现这个版本和我用的系统不兼容。
这个版本是64位,我的版本是32位,重新下!
安装JDK
安装过程直接点下一步就好,不建议安装在C盘,我安装在了D盘。
后面又会跳出一个窗口要安装jre。
但是在安装jdk的过程中已经安装了jre。
再说回安装jdk的问题,其实可以直接复制这个目录,粘贴到自己用的那台电脑磁盘里就OK,因为它本来就是绿色的。但是如果是自己安装下来的,它会写进注册表里,官网上有更新的时候联网会自动更新。如果没有安装直接复制了目录,就不会自动更新,但并不影响它的使用。
配置环境变量
验证是否成功
04-Java环境搭建(环境变量配置)
安装完毕后,jdk文件夹中有很多目录。
先看bin目录,开发工具都在这个目录下,全称叫binary,二进制的意思。
打开之后都是exe文件,一般我们看到这种文件都会下意识的双击执行,双击后发现一闪而过没有什么界面,这些文件都不是图形化界面文件,它要和我们实现人机交互,就要用命令行方式。这些exe文件本身也是由java编写的,执行这些文件就需要虚拟机的支持,jdk中内含一个jre环境,即jre那个目录。
打开dos命令行。
进入bin所在目录,并列出所有文件及文件夹。
运行javac.exe,显示的是这个应用程序所具备的一些参数信息。javac后面跟着一些参数信息,以扩展其命令的功能。
但如果不在javac所在目录下输入javac命令,会发现无法执行。
如果每次使用javac命令都需要到它所在的目录下,未免太麻烦了。
这时就需要环境变量配置,把这个命令所在的目录告诉系统,由windows帮我们去找我们要执行的命令。所谓环境,是系统的环境,在系统中提供一个变量,我们只要把javac命令所在的目录告诉它就行了。
右键我的电脑/计算机---->属性---->高级系统设置---->高级---->环境变量---->系统变量,找到Path变量,双击打开,复制javac所在目录,粘贴在变量值的最前面,再加一个分号和后面的值分隔开。环境变量配置完毕。再新开一个dos命令行,发现在任意目录下都可以执行javac啦。
总结一下,java环境的搭建包括四步:1.下载,2.安装,3.配置环境变量(目的:为了更方便的应用java开发工具),4.新开一个dos命令行验证是否配置成功。
05-Java环境搭建(环境变量配置技巧)
将目录粘贴在变量值最前面和最后面的问题,意味着系统先找这个目录还是最后再找这个目录。
一个技巧:当javac所在的目录发生变化时,一般来说,目录容易发生变化的部分是jdk这个文件夹被移动到其他目录中,所以这部分在我这里为:D:\JAVA\jdk1.8.0_181,注意没有bin,因为jdk文件夹中的目录都是确定的。目录发生变化后,每次还要在Path变量中找到javac的目录那一部分进行修改,有点麻烦。这个时候只需要新建一个系统变量,这里取名为JAVA_HOME,变量值为目录中容易变化的部分,再将Path变量中javac所在目录中这一部分替换为%JAVA_HOME%,以后目录发生变化时,只需要修改JAVA_HOME变量的值即可,会方便一些。
06-Java环境搭建(环境变量临时配置方式)
刚刚所述的配置方式是一劳永逸的配置方式,你只要配置一次,以后都不用配置了,比较简单。
但有的时候只需要临时配置一下,比如说拿着硬盘去别人机子上调试,人家当然不希望你修改他们电脑的配置啦。
怎么临时配置环境变量呢,只需要用一个dos命令,这个dos命令就是set,set可以查看或者设置环境变量的值。
输入:set,列出了一些本机上已经配置好的环境变量。
如果只需要查看其中一个环境变量,只需要在set后面跟上这个环境变量名,如:set Path。(发现师兄师姐之前配置了好多环境变量)
如果想要改变Path环境变量的值,输入:set Path=haha,即可改变。再重新打开一个dos命令行(输入:start),会发现还是以前的配置,并没有改变,所以dos命令行的配置方式只在当前窗口有效。
现在将Path配置为javac所在目录,但是Path中就只有这一个值了。
所以需要这样配置,输入:set Path=haha;%Path%,后面动态获取到Path的原有值,会把新的值添加在原有值的最前面。
07-Hello World
环境配置好了,要开始写代码啦!
我们需要一个文字编辑器,可以是最基本的记事本,也可以是高级的Eclipse,用Eclipse写代码的效率是非常高的,可以免去很多不必要的麻烦,但不建议初学者使用,因为它都会自动生成,就没有编程手感啦。初学者还是先按部就班的一行一行来写~
下面编辑一个记事本~
打开dos命令行。我们现在要把刚刚编写的java文件(称为源文件),编译为计算机(更具体的说,虚拟机)能识别的文件(执行文件)。
输入:javac 文件名,编译指定java文件。
编译后产生了一个Demo.class文件,这个文件是JAVA运行文件,但是很遗憾,它不能双击执行,也称为中间码文件或字节码文件。但是只要电脑上有虚拟机,这个文件就可以运行。
运行java文件要调用虚拟机。java命令启用后,会自动去找jre中的虚拟机。这里运行出了一些问题,因为我们编写的时候没有写主函数,不具备独立运行的能力。
修改一下java文件:
再次编译运行就没有问题啦。
但是并没有显示什么结果,现在我们想要计算机和我们做一个互动,继续修改java文件~
两个常见问题:
这两个问题都是可能因为:1.目录错了,2.文件名错了。
我们这个例子中,java文件名123.java和类名Demo不一致,我们也可以保存java文件为Demo.java,这样比较方便记忆。Demo类定义的时候为class Demo,如果给前面添上public,变成public class Demo,java文件名就必须和类名一致!具体到后面会讲~
Hello World:代表学习计算机语言的第一个入门小程序。现在泛指接触新事物的第一步。
class:是java中的关键字,用于定义类,java语言的程序代码都需要定义在类中。
关键字:被java语言赋予了特殊含义的单词。
Demo:为了方便使用这个类,给类自定义的类名。
08-classpath配置
刚才有个问题,换了一个目录之后就无法执行java程序,如果我们想在任意目录下都可以执行,该怎么做呢?这个时候需要把Demo.class文件所在目录告诉系统,和环境变量配置的思想是一样的。
接下来讲两种配置方式。
临时配置方式
定义一个新的环境变量专门提供给类文件使用,将Demo所在目录赋值给它,就发现在其他目录下也可以执行啦。
但这样会存在一个问题,如果不同目录有相同名称的类呢?它的执行顺序是这样的:
如果classpath有定义,且定义为:set classpath=目录
则只在classpath中找,找不到也不会在当前目录中找。
如果classpath有定义,且定义为:set classpath=目录;
则先在classpath中找,找不到再在当前目录中找。
若classpath定义为:set classpath=目录1;目录2
则先在目录1找,再在目录2找。
若classpath定义为:set classpath=.;目录1;目录2
则先在当前目录找(一个点代表当前目录),再在目录1找,最后在目录2找。
如果classpath没有定义,则在当前目录找。
而之前讲的环境变量path,定义后,是先在当前目录找,没找到,再去path中找。
一般来说,classpath定义后面都不会加;,因为配置classpath的初衷就是运行这个目录中的文件,如果还在当前目录中找,即使找到也不是我们想要运行的那一个,只是名字一样。
PS:对环境变量进行清空,输入:set 环境变量名=
永久配置方式
同之前讲的path的配置方式。
不过我们目前还不用配置classpath,等到后期讲到包的时候再配置~
path与classpath的区别:如果是普通的可执行文件,配置用path;如果是java执行文件,配置用classpath。
09-Hello World的组成部分
class:java中的一个关键字,专门用于定义类。
Demo:类名。建议起一些有意义的名字。单词首字母大写,如XxxYyyZzz。
主函数写法是固定的:public static void main(String[] args)。虚拟机其实就在调用指定类中的主函数,它在执行这个主函数中的每一句代码。
一个java文件中可以有多个类,有多少个类,编译之后会产生多少个class文件。类中是否要写主函数并不是必须的,你需要运行这个类才需要写主函数,不需要运行的话就不用写~按需求而定~可以每个类都有主函数,那每个类都可以运行,在运行的时候,输入:java *.class,*为指定的需要运行的类名,想运行哪个运行哪个~但同一个类不可以有多个主函数。
10-注释
java编译器是不会解析注释的~
注释的作用
注解、说明、解释我们写的程序。
用于调试程序。
注释的分类
单行注释://
多行注释:/* */
文档注释:/** */ 可以通过javadoc.exe将程序中的文档注释都提取出来形成一个网页,这个网页就是程序的说明书。
单行注释中可以有单行注释,但多行注释中不可以嵌套多行注释,文档注释同理。
要养成一边写注释,一边写代码的习惯。
一般情况下,类前面加的都是文档注释,函数前面加的都是文档注释,代码当中的某几句比较难理解,一般会加上单行注释,但是不能每一行都加,会有大量的中英文混合,阅读性会很差。
写代码要先写注释。
PS:JAVA严格区分大小写。