前言
计算机通过网络接收到二进制数据,程序将二进制数据进行解码加载到内存,通过变量临时存储数据,通过运算符对数据进行运算,将运算结果编码成二进制数据,再通过网络输出。任何程序的大致运行流程都如上所述,而编程核心思想就是:程序员通过自己的想法,对内存中变量进行运算,得出我们想要信息结果。
一、Java语言背景
1.计算机语言
语言是我们平时交流的方式,其本质是信息传递的载体,我们想要表达的思想都要通过语言进行传递。
计算机语言就是人与计算机进行沟通的语言。
计算机可以识别的语言有很多种,例如C、Java、Python、Golang等等。
每一种计算机语言所擅长的事情不同,有的比较全能,有的专注于性能,有的专注于简单便捷。
Java语言就是计算机语言的一种,Java性能比Python强,比C开发便捷,所以Java是兼具性能和便捷的计算机语言。
2.Java语言
Java语言最初是美国Sun公司在1990年1个内部项目中逐渐演化出来的,起初叫Oak(橡树),发明之初的目的是为了控制家用电器。
由于90年代初智能家用电器并不普及,理念过于超前,这个项目被废除掉了,但是Oak这门语言却得以保留并发展壮大。
由于命名问题,Oak已经被注册,后来开发者之一马克.奥伯曼在喝产自爪哇岛(Java Island)的咖啡时,突发奇想,就由之前的Oak语言正式更名为Java语言,
Java发展至今已有32年的历史了。
3.Java语言发展史
A.Java语言在1996年1月发布了第1个版本,版本代号为1.0。
B.Java语言在1999年对Java的不同的应用领域进行了划分,分成了 :
Java ME(Java Micro Edition)微型版:嵌入式Java,为小型设备、独立设备、互联网移动设备、嵌入式设备程序开发而设计。
Java SE(Java Standard Edition) 标准版/个人版:定位在个人计算机上的应用
Java EE(Java Enterprise Edition)企业版:主要应用于开发服务器端程序和企业软件的。
C.Java语言在2004年发布了Java1.5版本,这个版本相较于之前的低版本进行了重大的内容更新,性能大幅提升,是1个里程碑版本,也叫Java 5.0版本。
自Java 5.0之后Java的使用量急剧攀升,一跃成为最受欢迎的Top 3语言。
D.Java语言在2014年发布了8.0版本,此版本更新到2030年停止服务,因此Java 8.0是现在市面上比较稳定和主流的版本。
4.Java长期支持版本
Java目前会保持每半年发布1个新版本的节奏,目前最新版本为2022年3月发布的Java 18版本。
但是每次新版本可能只是发布几个新功能,并不是LTS(Long Term Suport)版本,Java核心内容也不变。
目前Java长期支持版本为(8/11/17。
5.Java语言的特点
1.Java的JVM基于C++语言,Java语言本身在抛弃了C++的弊端之外,扩大了C++语言面向对象的特点。
2.Java可应用在移动端、PC端、服务器端,但无法直接操作硬件,无法像C / C++ /Python语言那样直接向CPU发出指令集。
3.Java程序是跨平台的可以运行在Windows、MacOs、Linux操作系统平台上,由于JVM,Java程序可以做到1次编写到处运行(Write Onece, Run Everywhere)。
注意:Java程序是夸平台的,而运行Java程序的JVM(Java 虚拟机)不是,我们需要根据不同的操作系统下载相应的JVM。
二、下载JDK1.8
以上我们了解到想要运行Java程序依赖与当前操作系统相对应的Java虚拟机(JVM)。
而通常情况下,我们安装Java的时候,下载的往往是JDK,那么JVM、JRE、JDK 三者的关系是什么呢?
1.JVM是什么?
负责运行Java程序的虚拟机。
2.JRE是什么?
JRE是Java最小的下载介质,JRE=JVM+Java运行是所需要的核心类库。(运行)
3.JDK是什么?
JDK=JRE+开发工具,使用JRE只能运行Java程序,如果既想运行也想开发需要下载JDK。(开发+运行)
作为Java开发者就需要在当前操作系统中安装JDK。
三、Java开发环境搭建
下载完JDK1.8之后,只需要配置好系统环境变量就可以开发Java程序了。
1.环境变量是什么?
Widows/Linux操作系统中保存了一组文件夹路径,当我们输入了某1个Dos/Shell命令之后,如果在当前文件夹/目录没有找到,会去环境变量中配置的路径中依次寻找一遍,如果找到了当前命令就可以运行成功。
2.Java开发流程
A.Java源码编写
public class HiJava{ public static void main(String[] args){ System.out.print("姓名:"); System.out.print("\t丽丽"); System.out.print("职业:"); System.out.print("\t学生\n"); System.out.println("11111111111111111111"); System.out.println("1111\t22222"); System.out.println("11111111\t22222"); /* 在Python中1个制表符 \t代表4位 在Java中1个制表符补充前面的内容为8为; */ } }
B.Javac编译.java源文件得到.class字节码文件
D:\java_code>javac HelloWorld.java
C.Java命令调用JVM去执行字节码文件(注意不要加.class文件后缀)
D:\java_code>java HelloWorld
Hi 这是一段Java程序。
3.Java IDE集成开发环境
使用记事本编写代码,不但没有提示且代码排版混乱。
使用Dos命令手动去编译Java源码非常费力、耗时。
IDE就是集成开发环境,体现为提供程序开发的应用程序,一般包括代码编辑器、编译器、调速器和图形用户界面工具。
IDEA就是一款Java IED软件,集成了代码编写、分析功能、调试功能等一体化的开发服务软件。
简单而言使用IDE编写代码,只需要安装一个软件,一切代码开发和编译全部搞定。
4..IDEA中Java代码组织结构
项目 Project:项目是最大的包含范围,1个项目中可分为多个模块进行管理,如果是新项目,可以创建1个Empty项目。(公司官网开发项目)
模块 Module:Project Structure,模块是具体业务的管理范围。(咨询业务/论坛业务/结算业务)
包 Pakage:公司域名倒写,模块中某个业务的具体细分,例如咨询业务包含注册功能/登录功能/咨询功能。(某1功能)
类 Class:1个包中可以包含多个类,1个.java文件对于1个类,public class的类名必须和文件名保持一致。(功能具体实现)
四、Java基础知识
1.注释
//1.单行注释 /* 2.多行 注释 */ /* * 3.文档注释 * */
2.关键字
关键字就是编程语言本身预设的带有特定含义的单词,编程语言读取到这些单词之后就可以执行对应的操作。
Java的关键字有如下:
3.常量
在程序运行过程中,如果变量的值从始至终从未发生改变称为常量;
常量分为:
- 字面值常量
- 自定义常量(被final关键字修饰的变量)
byte number1 = 20; //字面值常量
final int age = 199; //被final修饰的自定义常量
以上代码中"您好"就是1个字符串类型的字面值常量,20是1个byte类型的字面值常量。
在Java中字面值常量具有优化机制:
在Java中当给当前byte/short赋值的时候,如果赋的值是常量,那么在赋值的时候会自动进行判断赋的常量值当前类型是否可以表示?
如果赋的常量值,当前类型(byte/short)可以表示则不需要强转。
如果赋的常量值,当前类型(byte/short)不可以表示则需要强转。
package com.itheima.operator; public class OperatorDemo9 { public static void main(String[] args) { /*在Java中常量的优化机制:当给当前byte/short赋值的时候,如果赋的值是常量; 那么在赋值的时候会自动进行判断,赋的常量值,当前类型是否可以表示。 */ //1.如果可以表示不需要强转 byte number1 = 20; //2.如果不可以表示,则报错需要强转 // byte number2 = 128; byte number3 = (byte) 128; //3.常量优化机制只针对常量,此时number4是1个变量 int number4 = 28; // byte number5 = number4; byte mumber6 = (byte) (number4); //4.如果之后要创建整数变量,默认使用int类型就可以了,因为即便使用了byte/short类型,运算的时候也会自动提升为int //5.byte和short之所以目前存在原因,是因为想兼容之前的老项目。 } }
4.变量
例如现在有60亿用户访问服务器,需要对用户身份进行验证,我们无法将60亿用户信息一并保存在内存中。
所以需要开辟1小块存储区域(内存)存放当前用户信息,当前用户信息验证完毕之后,该存储区域(内存)中数据更换为下个用户的信息。
变量是内存中的1块存储区域,用于临时存放程序执行所需要的数据,该存储区域有自己的唯一的名称称为变量名,该存储区域开辟之初声明了所能存储的数据类型称之为数据类型。
Java中每1个变量必须先声明,后使用, 该存储区域中的数据可以在同一类型数据范围内不断变化,固称为变量。
5.Java变量定义格式
数据类型 变量名称 = 数据值;
数据类型:为存储区域中数据,加入类型限制限制了内存空间大小。
变量名称:通过变量名称可以锁定数据。
数据值:存储空间中存储的具体数值。
五、Java运算符
1.标识符
标识符就是名字,用于标识出Java中的类名、变量、方法的名称。
我们不能随便给类名、变量、方法命名,需要遵循一定的命名规范,且见名知意。
强制遵守内容:Java的标识符只能由英文字母、整数数字、下划线、美元符号组成。
建议遵守内容:给类命名使用大驼峰命名法,给方法/变量命名使用小驼峰命名法。
2.运算符合和表达式
运算符:对常量或者变量进行操作的符号。
3.算数运算符
Java的算数运算符有 +(加)、-(减)、*(乘)、/(除)、%(取余)
4.赋值运算符
+= 加后赋值 a+=b,将a+b的值给a a = a + b
-= 减后赋值 a-=b,将a-b的值给a a = a - b
*= 乘后赋值 a*=b,将a×b的值给a a = a * b
/= 除后赋值 a/=b,将a÷b的商给a a = a / b
%= 取余后赋值 a%=b,将a÷b的余数给a a = a % b
注意:
1.=: 表示的是赋值运算
2.==: 表示的是判断是否相同
A.等号(=):
等号(=)的作用是完成变量的赋值,注意,Java中等号(=)和之前学习数学中的等号(=)阅读习惯不一样,之前学习数学是从左往右看,1+1=2。
而Java中的等号(=)阅读要从右往左看,将等号(=)右边的值赋值给int类型的变量a,在之后的开发过程一切等号(=)都是从右往左看。
等号(=)左右两边的值的数据类型应该相互匹配,左边是数值类型右边也应该是数值类型,左边是布尔类型,右边也应该是布尔类型。
B.赋值运算符赋值包含了隐式的强制类型转换
在Java中为了避免赋值运算符运算之后的结果表示范围变大当前数据类型无法表示,Java的赋值运算都包含了隐式的类型转换。
显示(能看到的,也确实发生了的)
隐式(看不到的,也确实发生了的)
package com.itheima.operator; public class OperatorDemo8 { public static void main(String[] args) { /*运算符赋值包含了隐式的强制类型转换 隐式(看不到的,也确实发生了的)/显示(能看到的,也确实发生了的) */ //显式的强制类型转换(直接明确强制转换的类型) byte a = 10, b = 20; a = (byte) (a + b); System.out.println("a显式强转赋值的结果是:" + a); //隐式的强制类型转换 byte c = 10; c += 300; //这里由于加的300是int类型,所以变量c也隐式转换成int类型。 System.out.println("c隐式强转赋值的结果是" + c); } }
5.逻辑运算符和短路逻辑运算符
逻辑运算符的短路效果
1.基本使用
(1)短路逻辑与(&&): 左侧为false,右侧不进行计算
(2)短路逻辑或(||): 左侧为true,右侧不进行计算
2.使用区别):
(1)&&和&: 最终的结果是相同的,但是&&具有短路的效果,效率高
(2)||和|: 最终的结果是相同的,但是||具有短路的效果,效率高
3.注意:
以后实际学习/开发过程中,需要连接多个条件时,强烈建议使用&& 或者 ||
6.自增(++)和自减(--)运算符
自增(++)自减(--)运算符
1.作用: 就是让变量的值增加1(++)或者减少1(--)
2.使用格式:
(1)可以写在变量的前面: ++a,--a
(2)可以写在变量的后面: a++,a--
3.使用注意事项:
(1)单独使用:++或者--自己独占一行,没有其它多余的操作
此时:
前++和后++效果一样,都是让变量的值增加1
前--和后--效果一样,都是让变量的值减少1
(2)混合使用: ++或者-- 和其它操作(赋值/打印)一起进行运算
将产生重大区别:
package com.itheima.operator; public class OperatorDemo12 { public static void main(String[] args) { //1.++或者--在后:先使用当前变量值参与操作,操作完成之后再进行自增或自减 int b = 0; int c = b++; System.out.println(c); //0 System.out.println(b);//1 //2.++或者--在前:先对变量进行自增或自减,再使用自增或者自减之后的结果参与其他操作 int d = 0; int e = ++d; System.out.println(d); //1 System.out.println(e); //1 //3.三元运算符 int a = 1 > 2 ? 1 : 2; System.out.println(a); } }
7.三元运算符
数据类型 变量名称 = 布尔表达式1 ? 表达式2 : 表达式3;