提示:java学习是一个漫长的过程,但当你真正了解其原理和机制,会发现其实它并不枯燥乏味,跟着我坚持学下去,会让你收获满满的!!!
前言
没有前言,我的宗旨就是话不多说直接干,别考虑太多,从小白到后面的架构和现在很火的人工智能模型微调,我们慢慢来,这些我们后面都会去讲,希望大家多做少想,要么就别开始,要么就直接干!!下面跟着我的脚步来开冲!
一、Java学习的阶段大纲(后续会不断调整和添加新的主流知识)
每个阶段我都会给大家一些考核测试,测试包含每个阶段所学的知识,让大家能更深刻的记住和理解学过的知识
阶段1:JavaSE基础阶段
这个阶段我们主要是学习java的一些基础语法和对面向对象的一个大概认知
- java基础语法
- 面向对象基础认知
- java常用API
- 总结及练习
阶段2:JavaSE Pro进阶
这个阶段我们是打地基阶段,深刻理解JavaSE主流的基础框架体系
- 面向对象高级部分
- java常用API及方法pro版
- JDK新特性
- 异常处理
- 集合框架
- IO流体系
- 特殊文件、日志框架
- 多线程
- 网络编程
- javaSE高级技术(单元测试、反射、注解、动态代理)
- 总结及练习
阶段3:web开发以及SSM
这个阶段我们学习一些前端知识以及前后端框架
- HTML、CSS
- JavaScript、Vue
- Vue、ElementUI
- Maven
- SpringBootWeb开发基础阶段
- MySQL基础
- MySQl数据库多表设计、操作
- MyBatis
- SpringBootWeb练习
- 登录认证
- AOP
- SpringBoot原理篇
- Maven高级篇
- 总结及练习
阶段4:项目阶段
这个阶段我会带着大家手把手的来做一个项目,让大家能够理解上面学的知识如何运用到企业项目当中
- 项目版本控制管理——Git
- 项目从0到1的开发
阶段5:目前主流的AIGC应用及智能体的开发
这个阶段我们直接从应用层入手,先了解是什么怎么用,在逐渐深入其内部分析算法与原理
阶段6:微服务项目+AI
这个阶段其实已经接近尾声,我会带着大家从0到1开发一个微服务项目+AI功能,学到这里找工作已经没问题了
阶段7:面试突击
这个阶段主要用来突击面试,汇总学过的知识,快速找到工作岗位
java学习阶段大纲先这么多,我会带着大家一步一步的走下来,大家跟着我的步骤,不论你是否有过java的经验和基础,都希望能按照我的节奏过一遍,或多或少都会有些帮助,等大家找到工作后,我会再出工作提升篇,包括大家转向不同岗位所需要的一些技术分析,例如java开发——>架构师、java开发——>ai应用工程师/ai算法工程师——>ai产品经理等等。。。。
二、java基础介绍和开发环境
在开始我们的java学习前,我们先要理解java是什么以及我们所需要安装的一些软件。
1.java语言的背景介绍(java是什么?)
java语言其实很好理解,我们人与人之间的对话不就是语言么,只不过java语言是用来我们人和计算机来进行对话的众多计算机语言其中的一种(其它计算机语言比如还有C语言、C++语言、python语言、go语言等等…)
Java语言是由美国Sun公司在1995年推出的计算机语言
研发他的是一个叫詹姆斯.高斯林的老爷爷(不是余胜军昂)
了解了java是什么之后,我们要说一下java有3个版本
- javaSE:它是javaEE和ME的基础,主要用来做桌面应用,比如我们电脑的计算器
- javaEE:主要用来做我们企业所需要的web网站开发,也是我们用的最多的
- javaME:以前是用来做嵌入式的,不过现在被安卓和苹果取代了
注:这里需要注意网站和网页的区别,网页只是把一些数据展示出来,它跟我们后台是没有交互的,而网站是可以和后台交互的,并把真实的数据通过网页来展示出来,简单来说网站 = 网页 + 后台服务器
2.Java语言的跨平台原理
什么叫平台呢,其实就是我们电脑的操作系统,比如window、mac、linux操作系统
那跨平台指的就是,一个写好的java程序在不用进行修改的情况下就可以在各个操作系统下进行运行,那他是怎么做到的?
有这么三个人:中国人、法国人、德国人,中国人讲了个笑话,想让另外2个人听懂,是不是找一个翻译就可以了,那我们的java程序,就是通过一个充当翻译的软件来做到跨平台的,他叫做JVM虚拟机
我们只需要在不同的操作系统中安装与之对应的JVM虚拟机(即德国人找一个中德翻译官,法国人找一个中法翻译官)即可运行java程序
那么中德翻译官跑去给法国人当翻译,他肯定是听不懂的,所以JVM虚拟机是不可以跨平台的,即window下的JVM不能在mac中使用,允许跨平台的只是我们的java程序
3.JDK和JRE介绍
当我们写好一段java程序时,我们的计算机其实是不认识这段代码的,因为计算机底层是由无数个0和1组成的,所以我们就需要借助一个工具,将我们的代码变成计算机能够看得懂的语言,他就是JDK
而我们编写代码时,比如一段打印字符串的代码:
public class A{
public static void main(String[] args){
System.out.println("Hello world");
}
}
现在不用理解这段代码的含义,它的作用就是在端口中打印Hello world,那这个含义是由谁来制定的呢,他就是我们的JRE,依旧是用上面三个人来举例子,当中国人说出“你好,朋友”,我们的翻译官一开始是不知道这句话的含义,那么他只能通过查中文字典来进行了解并记在大脑里,但我们的程序是没有大脑的,只能通过不断地查字典来进行了解,那么中文字典就是我们的JRE,里面的代码规则已经由java开发人员开发好的,那么这套规则在java中叫做核心类库,而了解后翻译官要将这句话进行翻译,这个翻译工具就是JDK提供的,我们叫做编译,编译将java文件翻译为计算机能看懂的.class结尾的字节码文件,最后我们的告诉JVM你可以给计算机这句话了,JVM就会将这句话交给计算机,计算机在做出反应,这个过程叫做运行
简单理解,我们通过JRE中的代码规则来写一个java程序,在通过JDK中的编译工具来翻译成JVM能理解的话来交给计算机,当我们运行时,通过JDK中的运行工具,JVM就会将代码给到计算机并让他做出反应,代码是运行在JVM虚拟机中的
JDK中包含JRE和开发工具包(编译工具和运行工具),JRE中包含了JVM和核心类库,所以我们安装相关环境时,只需要安装一个JDK即可
4.JDK的下载和安装
由于时间关系,JDK下载安装及path环境变量配置直接点击
5.我们开发的第一个java程序
当我们开发一个java程序时,需要三个步骤:
- 编写代码
- 编译代码
- 运行代码
编写完是一个.java结尾的源代码文件,利用编译工具编译成计算机可以看懂的字节码文件,在用运行工具来运行我们写的程序
第一个程序推荐使用记事本,建议代码文件名全英文,首字母大写,满足驼峰命名规范,源代码文件后缀是.java结尾
我们新建一个文件夹,专门用来放我们的代码。我这里就叫code
进入code文件夹,新建一个txt文件
改名叫HelloWorld,并把.txt后缀名改为.java
这里注意,有的人这里不显示后缀名,说明隐藏了后缀名,此时我们打开我的电脑,上方列表中我们点击查看,勾选上隐藏的扩展名,我们的后缀就出来了
我们选择用记事本的方式打开
接下来我们输入
其中public class HelloWorld{}是我们的程序名,程序名要和文件名保持一致,下面的public static void main(String[] args){}是我们的主函数,也叫main方法,我们想运行程序就必须有这行代码
最后System.out.println(“Hello World”);表示将双引号中的Hello World输出到控制台,注意最后的分号哦,要是英文状态下的分号!
最后我们按键盘上的ctrl+s进行保存并退出。
写完程序我们就要开始第二步,编译,在我们的当前程序所在的文件夹中,输入cmd并按回车
会弹出一个下面的黑框
黑框中我们输入javac HelloWorld.java并回车
会发现在我们当前文件夹中出现了一个HelloWorld.class结尾的文件,这个就是我们编译后的字节码文件了
这个时候我们在打开cmd,并输入java HelloWorld并按回车,这个时候程序就运行了,并在控制台中打印HelloWorld
此时我们的程序就完整的跑完啦!怎么样是不是很简单
6.idea开发工具的介绍
上面我们用记事本写完一个程序,利用javac来进行编译,java来运行,我们会发现,这些步骤非常的繁琐,并且当我们的代码出现问题时,它并不会给我们进行提示和提醒,这样下来我们的效率会非常得低,那么此时市面上就有了集成开发环境的软件,他会把代码的编写、编译、运行、提示等多种功能综合到一起,大大提高我们的工作效率
现在市面上的集成开发环境软件有很多:
- Eclipse
- MyEclipse
- intellij IDEA
- Jbuilder
- …
现在主流的也是我们后面进企业用的最多的就是intellij IDEA(简称IDEA)来学习
对于IDEA的下载和安装请点击这里
7.利用IDEA来开发我们第一个程序
首先我们要知道IDEA来管理java程序一般分为四个部分
- project(项目、工程)
- module(模块)
- package(包)
- class(类)
我们的project就相当于是一个小区,那么module相当于小区里面的每栋楼,而package相当于每栋楼中的每一层,class就是每层中的每一户,这样的划分使我们更加方便清晰的管理每一个项目
首先我们打开IDEA,并选择new project新建一个项目
随后我们要看project SDK有没有自动集成我们的java,没有的话点击下箭头,选择添加我们下载的java
这里添加我们下载的java文件
点击OK后接下来我们选择新建一个新工程并点击next
接下来填写我们项目的名称和要保存的路径就好了,写完点击Finish
点击create
创建完后会弹出一个界面,我们点击file
选择new 在选择Module,新建一个模块
我们选择java模块,点击next
为我们的模块取一个名字,这里我就叫helloworld.app,点击Finish
我们在生成的src下新建一个包(package),鼠标放在src上右键选择New,点击package
为我们的包取一个名字,这个名字一般是公司域名倒过来
例如百度的域名是www.baidu.com,那么包的名字可以为com.baidu
我这里就用duojiao.com为例,倒过来加上你的要做的技术名称,我们叫day01
此时我们就可以开始创建我们第一个类了,也就是我们写代码的地方
选中创建的包右键选择New,在选择Java Class
取名叫HelloWorld,点击回车
这个时候就生成了我们类的页面
我们将我们第一个代码写进去
package com.duojiao.day01;
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
之前我们要编译和运行的时候需要借助javac和java来进行编译和运行,但是我们用了IDEA后,我们可以直接右键选择run,它的底层就会自动帮我们进行编译和运行,并把结果在控制台中显示出来
好了我们第一个程序就这样写完了,坚持到这里你已经打败了90%的人了,下面就正式开始进入我们的第一阶段:
java基础语法
!!
三、javaSE基础阶段
第一章Java基础语法
1.1基础语法和类型转换
因为文章长度的关系,后续我会每章节每部分单独发文章,并把链接贴进来,大家按照我的思路一步步跟下来就可以!
这里点击我新发布的基础语法和类型转换
1.2运算符和键盘录入API
这里点击我新发布的运算符和键盘录入API
1.3分支结构、循环控制、随机数生成
这里点击我新发布的分支结构、循环控制、随机数生成
1.4数组
这里点击我新发布的数组
1.5方法
这里点击我新发布的方法
第一章总结练习
学到这里我们第一章算是学完了,接下来给到大家几个案例,大家可以试着做一下,把前面学到的知识巩固巩固:
- 案例一:订酒店案例,当我们出去旅游在App上订酒店时,酒店原价会按照淡季、旺季,总统房还是标准房的情况来进行相应的优惠,优惠方案如下:5-10月为旺季,总统房9折,标准房8.5折;11月到来年的4月为淡季,总统房7折,标准房6.5折,请开发程序计算出用户当前酒店的优惠价格。
Scanner sc = new Scanner(System.in);
System.out.println("输入当前的月份");
int month = sc.nextInt();
while (month<1||month>12){
System.out.println("输入的月份有误,请重新输入!");
System.out.println("输入当前的月份");
month = sc.nextInt();
}
System.out.println("请选择房型:1-标准房,2-总统房");
int jd = sc.nextInt();
while (jd!=1&&jd!=2){
System.out.println("您选择的房型有误,请重新选择");
System.out.println("请选择房型:1-标准房,2-总统房");
jd = sc.nextInt();
}
System.out.println("请输入酒店的原价:");
double price = sc.nextDouble();
price = dJD(price, month, jd);
System.out.println("您的酒店价格为:"+ price);
}
public static double dJD(double price,int month,int jd){
if(month>=5 && month<=10){
switch (jd){
case 1:
price *= 0.85;
break;
case 2:
price *= 0.9;
break;
}
}else {
switch (jd){
case 1:
price *= 0.65;
break;
case 2:
price *= 0.7;
break;
}
}
return price;
}
- 案例二:开发一个程序,可以生成指定位数的验证码,每位可以是数字、大小写字母。
public class Test4 {
public static void main(String[] args) {
String code = createCode(10);
System.out.println(code);
}
public static String createCode(int num){
Random r = new Random();
String code = "";
for (int i = 0; i < num; i++) {
int nextInt = r.nextInt(3);
switch (nextInt){
case 0:
code += r.nextInt(10);
break;
case 1:
char a = (char) (r.nextInt(26)+65);
code += a;
break;
case 2:
char a2 = (char) (r.nextInt(26)+97);
code += a2;
break;
}
}
return code;
}
}
- 案例三:开发一个能够指定人数的打分系统,分数为【0-100】的整数,选手的最后得分为总分去掉最高分去掉最低分后的平均分数
public class Test4 {
public static void main(String[] args) {
double score = score(5);
System.out.println(score);
}
public static double score(int num){
Scanner sc = new Scanner(System.in);
int max = 0;
int min = 100;
int sum = 0;
for (int i = 0; i < num; i++) {
System.out.println("请输入评委"+(i+1)+"打的评分:");
int score = sc.nextInt();
//三元运算,max小于当前值时就将当前值赋值给max否则不变
max = max < score ? score : max;
//三元运算,min大于当前值时就将当前值赋值给min否则不变
min = min > score ? score : min;
sum += score;
}
return 1.0*(sum-max-min)/(num-2);
}
}
- 案例四:开发一个加密系统,加密规则:将四位数密码的每位数加5,在对10求余,最后将得到的数进行反转
public class Test4 {
public static void main(String[] args) {
//调用加密方法
String encryption = encryption(1983);
System.out.println(encryption);
}
//加密方法
public static String encryption(int encryption){
String encryptionValue = "";
//调用取出每位数的方法
int[] split = split(encryption);
//对每位数进行加密
for (int i = 0; i < split.length; i++) {
split[i] = (split[i] + 5) % 10;
}
//调用反转方法
rollBack(split);
for (int i = 0; i < split.length; i++) {
encryptionValue += split[i];
}
return encryptionValue;
}
//取出每位数放到数组的方法
public static int[] split(int number){
int[] encryptions = new int[4];
//取出千位数
encryptions[0] = number / 1000;
//取出百位数
encryptions[1] = number % 1000 /100;
//取出十位数
encryptions[2] = number % 100/ 10;
//取出个位数
encryptions[3] = number % 10;
return encryptions;
}
//反转方法
public static void rollBack(int[] encryption){
for (int i = 0,j = encryption.length-1; i < j; i++,j--) {
int value = encryption[i];
encryption[i] = encryption[j];
encryption[j] = value;
}
}
}
总结
未完待续。。。
大家有相关问题和建议可以放在评论区或者私聊我