Java程序设计基础
cmd的使用方法
环境变量的配置

第一章 Java基础
1.1Java语言开发环境开发及搭建
1、JRE:是Java程序的运行环境,包含JVM和运行时所需的核心类库
2、JDK:是Java程序开发工具包,包含JRE和开发人员使用的工具
1.2 Java注释
1、单行注释和多行注释
2、Java语言中每一行代表的意思:
1.3 关键字
1、关键字的特点:
1)完全小写的字母;
2)在增强版的记事本当中有特殊颜色。
1.4 标识符
1、定义
是指在程序中,我们自己定义的内容。比如类的名称、方法的名字和变量的名字等等,都是标识符。
2、命名规则
1)标识符可以包含英文字母(区分大小写)、数字、$(美元符号)、_(下划线)
2)标识符不能以数字开头
3)标识符不能是关键字
3、命名规范
1)类名规范:首字母大写,后面每个单词首字母大写(大驼峰式)。
2)变量名规范:首字母小写,后面每个单词首字母大写(小驼峰式)。例如:helloWorld
3)方法名规则:同变量名。
## 1.5常量1、定义:
在程序运行期间,固定不变的量。
2、常量的分类:
1)字符串常量:凡是用双引号 引起来的部分,叫做字符串常量。
2)整数常量:直接写上的数字,没有小数点。
3)浮点数常量:直接写上的数字,有小数点。
4)字符常量:凡是用单引号引起来的单个字符,叫做字符常量。
5)布尔常量:只有两中取值。true、false
6)空常量:null。代表没有任何数字。

1.6 基本数据类型
1、整形
1)byte
2)short
3)int
4)long
2、字符型
char
3、浮点型
1)float
2)double
4、布尔型
boolean

注:Java默认类型为:整数类型int和浮点数类型double

1.7 数据类型的转换


1.8强制数据类型转换

数据溢出:


精度损失:



1.9 ASCII码

1.10 运算符
1、四则运算符


2、四则运算中 ’+‘的用法有三种:


3、自增自减运算符
单独使用:

混合使用:



注:只有变量才可以有自增、自减操作,常量不可能发生改变,所以不可用。
4、赋值运算符

注:1)只有变量才能使用赋值运算符,常量不能进行2赋值;
2)复合运算符其中隐含一个强制类型转换;例如:

5、比较运算符

注:1)比较运算符的结果一定是一个boolean类型,成立为true,不成立为false;
2) 比较运算符如果进行多次比较,不能连着写。

6、逻辑运算符·
逻辑运算符:
逻辑与 & 两个操作数均为true时,结果才为true
逻辑或 | 两个操作数均为false时,结果为false
逻辑非 ! 将操作数取反
简洁与 && 两个操作数均为true时,结果才为true
简洁或 || 两个操作数均为false时,结果为false
异或 ^ 两个操作数同为真或同为假时,结果才为true


注:
7、三元运算符

格式:

注:

8、优先级
从高到低依次为:一元运算符、算术运算符、关系运算符和逻辑运算符、赋值运算符
第二章 方法入门
2.1 定义一个方法的格式
1、格式:
public static void 方法名称() { }

方法名称的命名规则和变量一样,使用小驼峰式。
方法体:也就是大括号当中可以包含任意条语句。
2、注意事项
1)方法定义的先后顺序无所谓
2)方法的定义不能产生嵌套包含关系
3)方法调用好了之后,不会执行的。如果要想执行,一定要进行方法的【调用】。
3、如何调用方法,格式:
方法名称();

例如:

2.2 编译器的两点优化
注意事项1:

注意事项2:

注:布尔类型不能进行数据转换
第三章 Java语言概述
3.1 Java的特点:
1、简单易学:Java去掉了C/C++所使用的数据类型:指针(pointer)、联合体(unions)和结构体(structs)
2、面向对象:面向对象的语言都支持封装、继承和多态三个概念
3、平台无关性:
平台无关性有两种:源代码级和目标代码级。Java语言是靠Java虚拟机(JVM)在目标代码级实现平台无关性的。
4、分布式:
分布式包括数据分布和操作分布。Java语言支持这两种分布性。
5、可靠性:
6、安全性:
7、支持多线程:
Java在两方面支持多线程:一方面,Java环境本身就是多线程的,若干系统线程运行,负责必要的无用单元回收、系统维护等系统级操作;另一方面,Java语言内置多线程机制,可以大大简化多线程应用程序开发。
8、支持网络编程:
Java语言通过它所提供的类库可以处理tcp/ip,用户可以通过URL地址在网络上很方便地访问其他对象。
9、编程与解释并存:
Java语言的编译器并不是把源文件(.Java)编译成二进制码,而是将其编译成一种独立于机器平台的字节码文件(.class文件)。字节码文件可以被Java解释器执行,有解释器将字节码文件再翻译成二进制码,是程序得以运行。
3.2 Java语言规范
Java语言为开发Java程序而定义了类和接口,称为应用程序接口(API)。
Java技术包括三个方面:https://wenda.so.com/q/1507788655213951
1)Java SE(Java Platform Standard Edition):Java平台的标准版,可以用于开发客户端应用程序。应用程序可以独立运行或作为Applet在Web上运行。
2)Java ME (Java Platform Micro Edition):Java平台的精简版,用于开发移动设备的应用程序。不论是无线通信还是手机、PDA等小型电子装置,均可采用Java ME作为开发工具及应用平台。’;l
3)Java EE(Java Platform EnterPrise Edition):Java平台的企业版本,用于开发服务器端的应用程序,为企业提供了e-Business架构及其Web服务。其优越的跨平台能力与开放的标准。深受广大企业用户的喜爱。
3.3 Java虚拟机
1、Java虚拟机的定义:
Java虚拟机(Java Virtual Machine 简称JVM)是运行所有Java程序的抽象计算机,是Java语言的运行环境,它是Java 最具吸引力的特性之一。JVM其实就是一个字节码解释器。
2、Java程序的执行过程:先编译,后解释

字节码是Java虚拟机的指令组,和CPU上的微指令码很像,。Java程序编译成字节码文件尺寸较小,便于网络传输。
字节码最大的好处是可跨平台运行,即Java的字节码可以编写一次,到处运行。
3.4 Java程序的种类和结构
使用Java语言可以编写两种类型的程序:Application(应用程序)和Applet(小程序)。开发原理相同,但运行环境和计算结构不同。
一个复杂的程序可以由一个或多个Java源文件构成,每个文件中可以有多个类定义。
一般的Java源程序文件由三部分组成:1) package语句(0个或1个);
2)import语句(0个或多个);
3)类定义(1个或多个类定义)。
注: 1)package语句表示该程序所属的包。他只能有一个或没有。如果有,必须放在最前面;如果没有,表示本程序属于默认值。
2)import语句表示引入其他类库中的类,以便使用。import语句可以有0个或多个,它必须放在类定义的墙面。
3)类定义是Java源程序的主要部分,每个文件中可以定义若干类。
Java程序中定义类使用关键字class,每个类的定义由类头定义和类体定义两部分组成。
注:Java是严格区分字母大小写的语言。书写时,大小写不能混析
字节码最大的好处是可跨平台执行,,可让程序“编一次,到处运行”的梦想成真。
第四章 Java运行流程
4.1 流程控制
4.1.1 顺序结构
流程图:

4.1.2 判断语句
《一》判断语句1----if
1、格式:

2、流程:

《二》判断语句2----if......else
1、格式:

2、流程图

例如:

《三》判断语句3----if...else if...else
1、格式

注:
2、流程图:

4.1.3 选择结构
《一》选择语句1--switch
1、格式:

2、执行流程:
1)首先计算出表达式的值;
2)其次,和case一次比较,一旦有对应的语句,在执行的过程中,遇到break就会结束。
3)最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

3、例如:

4、switch语句使用的注意事项:
1)多个case后面的数值不可以重复。
2)switch后面的小括号当中只能是下列数据类型:
基本数据类型:byte/short/char/int
引用数据类型:String字符串、enum枚举
3)switch语句格式可以灵活:前后顺序可以颠倒,而且break语句还可以省略。
“匹配哪一个case就从哪一个位置向下执行,直到遇到了break或者整体结束为止。”
4.1.4 循环语句
循环结构的基本组成部分,一般可以分成四部分:
1)初始化语句:再循环开始最初执行,而且只做唯一一次。
2)条件判断:如果成立,则循环继续;如果不成立,则循环退出。
3)循环体:重复要做的事情内容,若干行语句。
4)步进语句:每次循环之后都要进行的扫尾工作,每次循环结束之后都要执行一次。
《一》循环语句1--for
1、格式:

①初始化表达式:
②布尔表达式:
③循环体:
④步进表达式:
2、流程图

《二》循环语句2--while
while循环有一个标准格式,还有一个扩展格式。
1、标准格式:
while (条件判断){循环体}
流程图:

2、扩展格式:

3、for循环和while的区别:可以相互转化

《三》循环语句3-- do-while
1、标准格式:

2、扩展结构

3、流程图

4.1.5 三种循环的区别:
1)如果条件判断从来没有满足过,那么for循环和while循环将执行0次,do-while将会执行一次。
2)for循环的变量在小括号内当中定义,只有循环内部才可以使用,while和do-while循环初始化语句本来就在外边,所以出来循环之后还可以继续使用。
4.1.6 条件控制语句:
1、break关键字的用法有常见的两种:
1)可以用在switch语句当中,一旦执行,整个switch语句立刻结束。
2)还可以用在循环语句当中,一旦执行,整个循环语句立刻结束。打断循环。
2、另一种循环控制语句是continue关键字。
一旦执行,立刻跳过当前次·循环剩余内容,马上可以下一次循环
4.1.7 死循环
永远停不下来的循环,叫做死循环。
死循环的标准格式:
while(true){ 循环体}
4.2 快捷键

第五章 方法
5.1 方法的定义:
方法其实就是若干语句的功能集合。
5.2 定义方法的完整格式:
修饰符 返回值类型 方法名称(参数类型 参数名称,...)
{
方法体;
return 返回值;
}
其中:
修饰符:现阶段的固定写法,public static
返回值类型:也就是方法最终产生的数据结果是什么类型
方法名称:方法的名字,规则和变量一样,小驼峰式。
参数类型:进入方法的数据是什么类型
参数名称:进入方法的数据对应的数据名称
备注:参数如果有多个,使用逗号进行分隔
方法体:方法需要做的事情,若干行代码
return:两个作用,第一停止当前方法,第二将后面的返回值还给调用处
返回值:也就是方法执行后最终产生的数据结果
注意:return后面的“返回值”,必须和方法名称后面的“返回值类型”保持对应
例如:
定义一个两个int数字相加的方法,三要素:
1)返回值类型:int
2)方法名称:sum
3)参数列表:int a,int b
5.3 方法的三种调用格式:
1、单独调用:方法名称(参数);
2、打印调用:System.out.println(方法名称(参数));
3、赋值调用:数据类型 变量名称 = 方法名称(参数);
注意:返回值类型固定写为void,这种方法只能够单独调用,不能进行打印调用或者赋值调用。


赋值调用的方法:

5.4 方法参数
·1、方法有参数:小括号当中有内容,当一个方法需要一些数据条件,才能完成任务的时候,就是有参数。
例如:两个数字相加,必须知道两个数字各是多少,才能相加。

2、方法有参数:小括号当中留空。一个方法不需要任何数据条件,自己就能独立完成任务,就是无参数。
例如:定义一个方法,打印固定10次HelloWorld。


注意事项:
对于有返回值的方法,可以使用单独调用、打印调用或者赋值调用
但是对于无法使你会值得方法,只能使用单独调用,不能使用打印调用或者赋值调用。

练习题
1、判断两个数据是否相同

## 5.5 方法的注意事项
1、方法应该定义在类当中,但是不能再方法当中再定义方法。不能嵌套。
2、方法定义的先后顺序无所谓。
3、方法定义之后不会执行,如果希望执行,一定要调用:单独调用、打印调用、赋值调用。
4、如果方法有返回值,那么必须写上“return 返回值;”不能没有。
5、return后面的返回值数据,必须和方法的返回值类型对应起来。

6、对于一个void没有返回值的方法,不能写return后面的返回值,只能写return自己。

7、duiyuvoid方法当中最后一行的return可以省略不写。

8、一个方法当中可以有多个return语句,但是必须保证同时只有一个会被执行,两个return不能连写。

5.6 方法重载的基本使用
对于功能类似的方法来说,因为参数列表不一样,却需要记住那么多不同的方法名称,太麻烦。
方法重载(overload),多个方法的名称一样,但是参数列表不一样。
好处:只需要记住唯一一个方法名称,就可以实现类似的多个功能。

2、方法重载与下列因素相关:
1)参数个数不同
2)参数类型不同

3)参数的多类型顺序不同

3、方法重载与下列因素无关
1)与参数的名称无关

2)与方法的返回值类型无关

第六章 数组
6.1 数组的定义:
数组是一种容器,可以同时存放多个数据值。
6.2 数组的特点:
1、数组是一种引用数据类型
2、数组当中的多个数据,类型必须统一
3、数组的长度在成序运行期间不可改变
6.3 数组的使用
1、创建数组的动作叫数组的初始化:在内存当中创建一个数组,并且向其中赋予一些默认值。
2、常见的两种初始化方式:
1)动态初始化(指定长度):在创建数组时,直接指定数组当中的数组元素个数。
2)静态初始化(指定内容):在创建数组时,不直接指定数据个数多少,而是直接将具体的数据内容进行指定。
3、动态初始化
1)动态初始化数组的格式:
数据类型[ ] 数组名称 = new 数据类型[数组长度];
2)含义解析:
左侧的数据类型:也就是数组当中保存的数据,全都是统一的什么类型
左侧的中括号:代表一个数组
左侧的数组名称:给数组取一个名字
右侧的new:代表创建数组的动作
右侧的数据类型:必须和左侧的数据类型保持一致
右侧中括号当中的长度:也就是数组当中到底可以保存多少数据,是一个int数字
4、静态初始化德
1)基本格式:
数据类型[ ] 数组名称 = new 数据类型[ ] {元素1,元素2,. . .};
2)注意事项:虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以自动推算出长度。
3)省略格式
数据类型[ ] 数组名称 = {元素1,元素2,. . .};
4)注意事项
①静态初始化煤油直接指定长度,但仍然会自动推算得到长度
②静态初始化标准格式可以拆分称为两个步骤
③动态初始化也可以拆分成为两个步骤
④静态初始化一旦使用省略格式就不能拆分成两个步骤了

5)使用建议
如果不确定数组当中的具体内容,用动态初始化;否则,已经确定了具体的内容,用静态初始化。
6.4 数组元素的获取
1、直接打印的数组名称,得到的是数组对应的:内存地址哈希值

2、访问数组元素的格式:数组名称[索引值]
索引值:就是一个int数字,代表数组当中元素的编码
【注意】索引值从0开始,一直到”数组的长度-1“为止

3、使用动态初始化数组时,其中的元素将会自动拥有一个默认值。规则如下:
如果是整数类型,那么默认值为0;
如果时浮点类型,那么默认值为0.0;
如果是字符类型,那么默认值为‘\u0000’;
如果是布尔类型,那么默认值为false;
如果是英语类型,那么默认类型为null。
4、注意事项
静态初始化其实也有默认值得过程,只不过系统自动马上将默认值替换成为了大括号当中的具体数据。
6.5 Java中内存的划分(5个部分)
1、栈(Stack):存放的都是方法中的局部变量。方法的运行一定在站当中运行。
局部变量:方法的参数,或者是方法{ }内部的变量
作用域:一旦超出作用域,立刻从栈内存当中消失。
2、堆(Heap):凡是new出来的东西,都在对当中。
堆内存里的东西都有一个地址值:16进制
堆内存里面的数据,都有默认值。
如果是整数类型,那么默认值为0;
如果时浮点类型,那么默认值为0.0;
如果是字符类型,那么默认值为‘\u0000’;
如果是布尔类型,那么默认值为false;
如果是英语类型,那么默认类型为null。
3、方法区(Method Area):存放.class相关信息,包含方法的信息。
4、本地方法栈(Native Method Stack):与操作系统相关。
5、寄存器(pc Register):与CPU相关。
6.6 一个数组的内存圈

0x是16进制的前缀。
6.7 两个数组的内存圈
要运行必须将方法区当中的内容加载到内存当中,并为他开辟一块内存空间。
6.8 两个应用指向同一个数组的内存圈

6.9 常见问题
数组的索引编号从0开始,一直到“数组长度-1”为止。
1、数组索引越界异常

如果访问数组元素的时候,索引编号并不存在,那么将会发生:数组索引越界异常(ArrayIndexOutOfBoundsException)
原因:缩引编号在写错了
解决办法:修改成为存在的真确索引编号。
2、空指针异常

所有的引用类型变量,都可以赋值为一个null值。但是代表其中什么都没有。
数组必须进行new初始化才能使用其中的元素。
如果只是赋值了一个null,没有进行new创建,那么将会发生:
空指针异常:NullPointerException
原因:忘了new
解决办法:补上new
6.10 获取数组的方法
获取数组长度的方法:数组名称.length
将会得到一个int数字,代表数组的长度,
数组一旦创建,程序运行期间,长度不可改变。

6.11 数组的遍历
遍历数组:说的是对数组当中的每一个元素进行逐一、挨个儿处理。默认的处理方式是打印输出
6.12 数组元素的反转
1、数组元素反转,其实就是对称位置的元素交换。
2、通常遍历数组用的是一个索引:
int i=0;
现在表示对称位置需要两个索引:
int min=0;
int max=array.length-1;
3、如何交换两个变量值?
int a=10;
int b=20;
如果是两个水杯,都是满的,如何交换?借助第三个杯子。
int temp=a;
a=b;
b=temp;
用三个变量倒手。

4、什么时候停止
1)min==max;
2)min>max;这两个可以推出min<max时开始交换。
题目:将数组中的元素依次互换位置,使其变为{50,40,300,20,10}。


6.13 基本数据类型和引用数据类型的区别:
1、所有的变量都存储在栈内存
2、变量空间可以存储基本数据类型,也可以存储引用数据类型
3、如果变量空间存储的是基本数据类型,则存储的是值,一个变量的值改变,另一个不会跟着改变
4、如果变量空间存储的是引用数据类型,则存储的是引用(地址),一个变量地址对应的值改变,另一个也跟着改变。
6.14 习题
1、给定两个数组a{1,2,3,4},b{5,6,7,8,),将两个数组内的元素对应位置互换。

加入两个数组的长度互不相同时,可以直接交换变量a和b中数组引用(地址),没有循环,一次就搞定了,不受长度的限制。

当两个数组的长度相同时,可直接用for循环交换数组中对应的元素(循环好多次,受长度的限制)。

·2、给定两个数组a{1,2,3},b{4,5}合并两个数组(方法:创建一个新的数组)
思路一:分别将a和b数组中的元素存入新数组内。 
思路二:想要将新数组填满。

3、给定一个数组a{1,2,3,0,0,4,5,0,6,0,7}去掉数组中的0元素(创建一个新数组,短的,非零元素挑出来。



4、创建一个数组,存储2到100之间的素数(质数)
思路一:空间占用小,执行效率慢
0、通过一个几千次的循环寻找一个---count
1、创建一个数组,长度(刚好,没有一个空间多余)
2、通过一个几千次的循环找寻素质,将素数存入数组内


思路二:执行效率高,空间占用大
0、创建一个足够长的数组
1、通过几千次的循环找素数,将素数存入数组内
2、将存入素数的数组,后面部分0元素去掉


5、数组元素的排序(冒泡 选择)
数组元素的排序本质是交换位置(交换位置的条件)
1》冒泡排序法(升序----数组底端冒出一个泡【最小值】)

执行结果:


6、用户登录认证(用数组当作小数据库 存值 用户验证)
用户登录认证的步骤:

十五、二维数组
1、 二维数组的静态初始化:
方法一:

方法二:

增强for循环:

执行结果:

2、二维数组的动态初始化:

浙公网安备 33010602011771号