说明
这是一个完善了但又不完善的笔记,或许以后会更新
可以参考但请务必超越
源文件
Tools
Java
注意:本篇文章非常硬核,基本上就是写给“聪明人”看的,内容也大致都是文字,没什么图片视频好康的东西。如果你看不懂或者引起你的不良反应。还是有别的写的好的文章可以看的。
接下来要攻克的内容:JavaSE 数据结构 数据库(一点一点来嘛)
- JavaSE语法
- 集合及其背后的数据结构【面试的重点】 Java的数据结构和C的数据结构是一样的。因为数据结构是一门单独的学科。
- 数据库 就是MySQL
更多东西之后再说吧
EE初阶->前端部分+网络+多线程+maven+servlet+...
EE进阶->spring springMVC mybatis SpringBoot...
SE 基础 标准版
EE 框架 企业版
1.Java语言概述
1.1 Java是什么
这应该没什么好说的。直接百度都行!
首先,第一点,Java的创始人之一詹姆斯·高斯林。一般公认他为Java之父。java的祖师爷就是高斯林。
这个地方可以直接百度百科。别最后用着Java不知道是谁开发的。
高斯林就属于对国家有贡献的人。截止到今日本篇文章产出,他还活着反正¿
这里简单讲一下起源吧。(发展史什么的,百度就多了去了)
一开始的时候有一个项目叫oak,做的是智能家居这样的项目。这东西九几年啊,思想有点超前,所以就最终变革为了Java,做一些终端,网页什么的。
为什么叫Java?
爪哇岛 盛产咖啡
所以这个logo图标就是这样了
1.2.为什么选择Java
Write once, Run anywhere
一次编译 到处运行
(Java喊出的口号,属于Java很强的特性优点)
开源社区
Java生态非常的完整。这个就太多了。
举个当下最新的例子,安卓和IOS,做手机软件肯定是要适配这2个环境吧。那么华为开发的鸿蒙,现在还不完善,就需要更多的开发者来完善这样一个生态环境,充实源社区。这样以后适配鸿蒙系统的软件肯定就会很方便。
这里提一嘴,Java有很美好且完善的社区环境,比如现在阿里巴巴使用Java就最多,我们可以获得很多的资源等。
Java还有很多的特性等等。我的学习方式习惯直接干代码,然后一点一点带上学习。这样直接动手思考,感觉要比看着文档先思考再动手效果要好。不过每个人都不一样,我觉得现在大多数人应该也是这样的吧。
“最好的语言”
这里注意。有一个老且广知的梗
XX是世界上”最好的语言“
最好的语言有双引号。意思是,在各行各领域,都有最好的语言。并不是所有环境情况都有这么一种语言是更好的。
在每个领域都有更合适的编程语言
有这么一个网站:世界编程语言排行榜
并不依靠这个排行分高下,只是一个统计。
那么如果有人问,xx是不是世界上最好的语言:
前提:分情况
如果是处理数据:Python
如果是处理操作系统底层相关:C/C++
如果是编写应用方面和WEB方面:Java
现在后台开发就是Java和C++是目前最多的
这里有一个JavaScript。他不是Java的,不属于Java,属于“蹭热度”
在前端,有前段三剑客
HTML + CSS + JavaScript
HTML就相当于素颜,现在的网页基本也都是HTML5。CSS就是添加一些好看的特效等等,属于化妆。
这里的js是给诸如网页和后台的接口做事情的。属于行为。
还有一个点。当下热门语言中有一门python,一定要注意!python在测试开发,脚本,人工智能(AI),爬虫等方面可能属于“最好的语言”。但是,python不是很能作为程序猿的主语言。尤其是在后端开发中,python肯定是不行的呀。真正在实际应用中其实很少。
python他是雷声大,雨点小。作用在于大多数情况下,只是对数据的处理(分析呀,总结什么的)。你开发个游戏,那最主要的就是后端,肯定不能用。
而且,python语法过于简单,现在少儿都可以进行入门学习。
你先学C/C++/Java,看python就很简单。
反过来你先学python,再学C/C++/Java你就会觉得这他妈是什么鸡巴怎么这么难。
属于内行看门道,外行看热闹。
1.3Java开发环境安装
首先,先讲明白喽。目前大多数公司,都在使用JDK1.8。属于【目前公司的长期开发版本】
Java当然一直也在更新,现在应该已经JDK17了。那总不能他更新一次我们就更新一次代码去适配吧。
安装的话,当然在3个平台下都有安装教程,可以搜到很多。
注意一点,给系统配置环境变量一定要仔细认真!
1. JDK
JDK:Java开发者工具。
首先第一点,安装的时候全部默认文件夹,不建议整花里胡哨的文件目录。
一般来讲都会在系统盘里安装,这样大家都不会出岔子。使用的时候也不用再去找。
然后就是环境变量
注意,所有执行命令出现“非内部命令”字眼的,都是环境变量有问题。
正常情况下你应该有CLASSPATH,JAVA_HOME,以及配置好的Path。注意前后都不要有空格。win7及以下版本可能不是很一样,win10是列表可以直接添加,win7可能就一行。但是都大同小异。
我们可以使用终端来查看一下Java版本
java -version
注意后面的小版本号,不影响,只要是1.8就可以。
2.IDEA
全称IntelliJ IDEA。
和VS2019一样,也是集成开发环境的编译器。
注意,这里有一点很重要!
VS2019,Eclipse,MyEclipse等都可以写Java,但是,不建议也不要去用。
为什么呢?
idea就是当下最好的Java编译器了。和C语言一样,现在已经可以用VS2019了,那么肯定就不用旧的VC6.0了呀。而且,C语言用VS2019写可能比较好,Java用idea写比较好,这都是大家使用体验过来的经验。啊你就非要和别人不一样,那你这代码写出来出问题别人也帮不了你,岂不是写了个寂寞。
当然还有VScode,他只是一个大号的记事本,不建议初学者。
记住,一般进入公司的第一天,你肯定就得要用软件以及配置环境吧。你的leader只会告诉你我们用什么。你得自己搞定才行。别人帮不了你。
idea的安装配置我也就不多说了,网上教程也很多。每个人都有每个人的习惯嘛。
这里我就说一下语言的问题。
首先默认就是英语,我们也不要去改。
当然,idea是有中文汉语的插件的。但是,还是那句话,不建议也不要去用。
为什么?
别的编译器或者默认英文的软件能改中文就改了,但是有一些软件,他对其他语言的支持不够好。idea虽然用个中文汉语的插件能让人更容易理解,看得懂看的明白,但是,会有一些奇奇怪怪的神奇问题出现。就比如你改中文后,可能他有些个按钮接口出问题,就点了没反应。这TM,改语言吃的屎踩的坑,谁用谁知道。
如果你正在使用其他语言的插件,我建议你把他的勾勾点掉。大多数程序猿们也都是用默认英语。
工作中如果要操作个什么什么,人家告诉你英文,你都是中文,你怎么知道点什么玩意操作。
3.初识Java简单语句和语法
这里有一个支持插件的笔记本Sublime Text,我们可以使用这个来简单写一下代码。
那问题又来了,VScode和notepad++呢?也都是笔记本呀。
VScode,emm,随你。notepad++?确实好用,但是WDNMD辱华。notepad2还行。能代替notepad++的笔记本多得是,电脑自带的文本文档都行。
注意打开电脑的文件扩展名
Hello World
写下第一行代码
public class HelloWorld{
public static void main(String[] args){
System.out.println("HelloWorld");
}
}
符号解释 打印方式
public:访问修饰限定符。
class:关键字,用来定义一个类。他的类型有点抽象。Java中一个类就对应一个字节码,这样的好处是用到那个类就加载那个类,不用一股脑都加载。
第一行的HelloWorld:类的名称。注意要和文件名一样,否则会报错(异常)。
public static void main(String[] args){}:Java当中main函数的固定写法就是这样。
String[] args:形式参数。数组。在C语言中是int arr[],在Java中是int[] arr。函数也称为方法。
System.out.println():打印函数。相当于C语言的printf()函数。Java中有3中打印方式。print打印不换行。println打印换行。printf就和C语言一样。一般都使用print和加了ln的2个,因为方便嘛。
"helloworld":双引号引出来的,也就是字符串。
看图认识下比较好
再多的内容就先不去多讲了。我们先运行!
注意了,我们写出来的文件,需要先编译一下。
这个.java的文件,他存在我们的磁盘上
我们怎么编译呢?
终端 移动目录
Java文件使用终端编译运行,也就是cmd命令提示符。或者powershell。再或者最新的windows terminal。
我们要运行文件,需要移动目录到文件所在的位置
打开终端的方法就不用多说了吧,这里就说一下移动目录的方法
第一种方法
我们默认应该是在系统盘下的
如果是别的盘,首先移动一下到别的盘
我这里是e盘,当然大写小写都可以
然后再cd一下到你的文件目录
第二种方法
直接在文件所在目录shift+右键。使用windows terminal的直接右键即可。
编译
从编译开始,首先需要明白一点,Java是非常安全且完善的语言。在Java中有一个术语叫异常,也就是出现了错误。只要有异常,一般都会直接停止并报出异常信息。
那么可以先编译看看
使用命令+文件名,注意一定要全名,加上后缀
javac HelloWorld.java
这里注意了,如果你写上了汉字,会提示编码错误
编码错误
javac在编译的时候是GBK格式去编译代码的
代码本身是UTF-8格式的
解决方法很简单,加上一个改变格式的选项
-encoding utf-8
javac -encoding utf-8 HelloWorld.java
然后就可以正常编译了。
看到产生了这个.class,就是编译成功了。
.class:字节码文件->二进制文件。包含了当前类中的信息。
使用记事本打开,很裂开,二进制看不懂。
可以使用Sublime Text打开看看
cafe babe
可以看到第一行cafe babe - 咖啡宝贝
用来区分其他类型文件,并且判断文件有没有受损
文件受损,文件开头受损的可能性最大
我草?不应该是baby吗?
啊哈!十六进制没特么y,只有ABCDEF,所以只能babe了。
运行
我们先直接运行
java HelloWorld
注意这里使用java命令,而且不能输入.class后缀
到此运行就结束了,可以看到打印在了终端的屏幕上。
但是还有一些问题存在。
唉我草?这.class是应该在哪里运行呀?现在只有终端,终端也就只能输入命令操作呀。
JVM:Java虚拟机。跑Java程序的。实际上是一个软件,用C/C++写的。虚拟机嘛,用软件实现了一个电脑。
JVM是把对应的字节码拉过去然后执行。
这里又有疑问了:这,我好像没安装JVM呀?
还记得我们下载配置的JDK吗,JDK这个开发者工具里,就包含了JVM。
JDK前面讲了,是开发者工具嘛。那么,其中其实还有JRE。
JRE:Java运行环境
他们的关系是这样的:
很好理解吧,开发者工具里有开发环境,开发环境具备了那就再装一个虚拟机。
一次编译 到处运行
前面讲到的Java发出的口号
Write once, Run anywhere
我们现在看.class文件,他不是在JVM中运行吗,那是不是说,只要安装好了JDK,.class在任何地方就都能运行。因为里面有JVM嘛。
核心就是.class,无论走到哪里,都能运行。
小结:
- 程序是怎么编译的
- 程序是怎么运行的
- 程序是跑到哪里的
- 程序跑的原理是啥
这4个点相比答案就很明显了。
agrs
刚才还有一个String[] args,在main函数中作为形式参数,他是一个数组,那么args是什么东西?
打印看看
public class HelloWorld{
public static void main(String[] args){
for(int i = 0;i < args.length;i++){
System.out.println(args[0]);
System.out.println(args[1]);
System.out.println(args[2]);
System.out.println(args[3]);
}
}
}
在Java中数组名.length就是他的长度,那么用for循环打印他的0123下标看看。
什么都没有?是因为没有赋值。
我们换一种方式运行
java Helloworld kirito is cool
可以看到,他打印了3个之后,提示异常停了下来,说下标3没有东西。那么我们再添加一个吧。(我英语不是很好,我就这么理解了,大概也差不多。for循环要打印4组,第一组就少一个,数组越界,直接就停下来了。)
java Helloworld kirito is very cool
嗯,很好的打印了出来,为什么打印了4次?
在命令行输入的内容,会全部填入args的下标中。然后for循环打印4次嘛
想要只打印一次,可以这样写
System.out.println(args[i]);
public class HelloWorld{
public static void main(String[] args){
for(int i = 0;i < args.length;i++){
System.out.println(args[i]);
}
}
}
就相当于这个样子
注释
Java中有3中注释方式
/**
* 文档注释:一般在类或者方法的前面
*/
// 行注释,很熟悉
/*
块注释,也很熟悉,就一块一块的
*/
注意,在这里如果编译的话,注释中的中文也是UTF-8的格式,也会出现编码错误的情况,具体可以看上面编译时的情况。
IEDA的快捷简写
到这里基本上对Java的认识就讲完了,不过肯定还有其他的问题。
这里就解决一个小问题吧
可以看到我们写Java代码,main函数打印函数什么的好像很长很麻烦,每次都输入或者复制贴贴其实很麻烦,idea就提供了一些简单的指令
psvm - public static void main
sout - System.out.println
等等
简单视频总结
小头图版权:《明日方舟头像8》by QuAn_ 2021年10月11日晚上11点45分 pid:93388262