目录
一、Java基础
1、概述
-
计算机语言发展
类型 说明 机器语言 0、1 低级语言 汇编语言 高级语言 C/C++、Java、Python、Go…… -
常用的Dos(Disk Operation System)命令:
-
切换到其它盘符:
d:
-
切换到其它路径:
cd javawrok
-
返回到上一级目录:
cd ..
-
显示当前目录的内容:
dir 文件夹
-
-
Java的优点
-
简单容易,使用者多
-
后台开发,大数据,android
-
完全面向对象(oop)
-
跨平台
-
-
三个版本
版本 名称 适用范围 说明 JavaSE Java标准版本 桌面应用 JavaEE Java企业版本 企业应用 JavaME Java微型版本 嵌入式设备 已淘汰
1.1 搭建环境
-
基本介绍:
开发环境相关说明:
JDK(Java Development Environment) Java开发环境 使用Java语言进行开发时使用,包含JRE;
JRE(Java Runtime Environment) Java运行环境 运行Java程序时使用,包含JVM;
JVM Java虚拟机 解释class字节文件并执行相应指令 Java实现跨平台的核心
JDK>JRE>JVM
-
安装JDK的步骤
-
下载jdk包,安装到操作系统中,注意路径不能包含中文及空格;
-
配置环境变量(Path:路径[path中指定的路径可以在任何目标下使用])
-
新建一个环境变量“Java_Home”,变量值为JDK安装路径,如“D:\Development\Java\jdk-10.0.1”
-
新建一个环境变量“CLASSPATH”,变量值为固定的“%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; ”
-
在环境变量“PATH”下加入值,“%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;”
-
-
检测是否安装成功的步骤:
-
“Win+R”下敲入“cmd”
-
运行“java -version”、"java"、"javac"
-
-
-
JDK的目录结构
目录 说明 /bin 运行文件,包含javac.exe和java.exe /lib jdk提供的类库 src.zip 源代码(Java是开源的) /jre 运行环境Jre(运行java程序)
1.2 开发步骤
-
开发一个java程序的步骤:
-
编写:编写一个扩展名是.java的程序源代码
-
编译:(javac)将.java的文件编译成字节码 (.class)
-
运行:(java)在jre中运行.class文件
-
1.3 开发工具
-
Editplus
-
说明:文本编辑器,简单的编辑推荐使用Editplus,熟悉写法(便于应对笔试)
-
-
Eclipse
-
说明:过去的主流IDE
-
安装:绿化版,解压即可使用,建议路径中不要出现中文和空格
-
使用:
-
创建一个工程文件:Project —> Java Project
-
在src中创建多个类文件(Class),如果包含主函数,则可直接运行
-
-
-
IDEA
-
说明:取代Eclipse,成为新的主流IDE
-
安装和破解
-
使用
-
1.4 开发案例
第一个程序:Hello World
// Hello是类名,与保存的文件名一致
public class Hello{
// 程序的入口,从这里开始执行
public static void main(String[] args){
// 输出不换行,()内可以是数字,变量,"字符串 "
System.out.print("hello world");
System.out.print(" ok");
// 输出并换行,()内若不写参数则只换行
System.out.println();
// 循环输出十次
for(int i=0;i<10;i++){
System.out.println("你太棒了,我要说十遍.");
}
}
}
1.5 三种注释
// 这是单行注释
/*
多行注释
*/
/**
* 文档注释,使用javadoc命令可以生成帮助文档
*/
2、基础
2.1 关键字
在java中有特殊用途的字符串就是关键字,都是小写的,不需要立刻记住所有关键字,学到的时侯再记就可以。
2.2 标识符
-
说明:标识某些东西的符号
-
规范
-
不能使用关键字
-
标识符可以包含的类型:数字、字母、_ 、$、中文(不推荐)
-
标识符可以开头的类型:字母、_ 、$、中文(不推荐)
-
标识符尽量有含义,如:age、name、stuid
-
类名首字母大写;变量名、方法名首字母小写
-
2.3 变量
-
说明
-
内存中的一个命名的区域
-
每个变量都可以指定存储的数据类型
-
变量中存储的值是可以改变的
-
-
语法
-
先定义再使用,语法:
数据类型 变量名=初值;
-
使用之前要先赋值
// 定义并赋初值 int n = 10;
// 定义 int n; // 赋初值 n = 10;
-
值是可以改变的
int n = 10; // 更改值 n = 20;
-
2.4 数据类型
Java的数据类型可以分为基本类型和引用类型。
-
8种基本类型
分类 名称 占用空间/字节 取值范围 整型 byte 1 (-2^7 ~ 2^7-1 :-128~127) short 2 (-2^15 ~ 2^15-1:-32768~32767) int 4 默认的整数类型 long 8 浮点型 float 4 需要在后面用F标识,否则小数类型默认是double类型 double 8 默认的浮点类型 字符型 char 用' '包含,只能表达单个字符或一个中文,可以和int相互转换 布尔型 boolean 只有两个取值,分别是true,false; // × -> 编译报错:不兼容的类型: 从int转换到byte可能会有损失 byte b1 = -129; // √ byte b2 = -128; // √ byte b3 = 127; // × -> 编译报错:不兼容的类型: 从int转换到byte可能会有损失 byte b4 = 128; // √ short s1 = 128; // × -> 编译报错:不兼容的类型: 从int转换到byte可能会有损失 short s2 = 32768; // √ int i = 32768; // √ long l = 32768; // √ 从int转为float,涉及到下方的向上转型 float f1 = 2; // × -> 编译报错:不兼容的类型: 从double转换到float可能会有损失 float f2 = 2.0; // √ 用F标识类型 float f3 = 2.0F; // √ double d1 = 2; // √ double d2 = 2.0; // √ char c1 = '陈'; // × -> 编译报错:Too many characters in character literal char只支持单字符 char c2 = 'CYZ'; // √ boolean b1 = true; // √ boolean b2 = false;
-
引用类型
-
类
-
接口
-
数组
-
-
转换方式
-
向上转换:直接转换
byte —> short —> int —> long —> float —> double
byte a = 1; int b = a;
-
向下转换:强制转换,可能会丢失精度
int a = 1; byte b = (byte)a;
-
两整数相操作,结果为数据类型中较大的,最小为int
long a = 1; int b = 2; // a+b的类型是long
-
-
内存模型:java将内存分成多个区域,常用的有堆和栈
-
栈:存储基本数据类型和引用名
-
堆:存储引用类型
-
2.5 运算符
-
算术运算符:+、- 、*、/、%、++(自增,加1后结果重新赋给自己)、--(自减)
-
赋值运算符:=、+= 、-= 、*=、/=
-
逻辑运算符:
逻辑与代表且,所有的条件都是true时,值才为true,任意一个条件为false,结果为false;
逻辑或代表或,任一条件为true则运算值为true,所有条件都为false时,结果为false;
逻辑非代表取反,当前条件为false时,值为true,条件为true时值为false。
字符 说明 && 短路与:有一个不满足条件,不继续进行【一般推荐使用】 & 与:判断所有条件,前面的不满足也会执行后面的判断 || 短路或:有一个满足条件,不继续进行【一般推荐使用】 | 或:判断所有条件 ! 非: 注:操作数都为boolean类型
-
比较运算符:> 、<、==、<=、>=、!= 位运行符:&、|、<<、>>
// 右移2,相当于除以2的1次方 size >> 1;
注:转成二进制后,按位进行运算;5&8;0101—>1000
-
三元运算法: (布尔值)?结果1:结果2; 布尔值为true则为结果1,否则为2
int a = 3; int b = 5; // a>b则c=a,否则c=b int c = a > b ? a : b;
2.6 键盘输入
-
String:Java中最常用的类(类型),它可以表示一个字符串,用
" "
包含 -
Scanner:可以通过控制台来接收用户的输入信息,需要引包
注:这两个方法都是阻塞方法,即必须等待用户输入数据后,才能继续运行
3、流程控制
流程控制有三种结构:顺序结构、分支结构、循环结构
3.1 分支结构
分支结构有两种类型:if、switch
3.1.1 if
-
语法
// 如果满足条件 if (布尔表达式) { 语句一; } // 不满足上述条件且满足下列条件 else if (布尔表达式) { 语句二; } // 上述条件都不满足 else { 语句三; }
if:必须有且只有一个
else if:可以没有,可以有不止一个
else可以不写,最多一个
-
if 语句可以嵌套
String grade; if (a <= 100 && a >= 80) { if (a == 100) { grade = "满分" } else { grade = "优秀" } } else if(a >= 60){ grade = "良好" } else if(a >= 0) { grade = "不及格" } else{ System.print.out("您输入的成绩有误"); } if (grade != null) { System.print.out("您的成绩为:" + grade); }
3.1.2 switch
-
语法
switch(变量) { case: 语句一; break; case: 语句二; break; …… defaullt: 语句n; break; }
switch语句只能做等值比较
可以使用switch的数据类型有:byte,short,int,char,enum,String(JDK1.7以后可以使用)
switch语句必须使用break跳出,否则会穿透执行,有时可以利用这一点。
3.1 循环结构
循环结构有三种类型:while、do while、for,都可以进行嵌套。
3.1.1 while
-
语法
// 一层循环 while (布尔表达式) { 循环体1; // 二层嵌套循环 while () { 循环体2; } }
判断表达的值,true进入循环体,false结束循环,每次执行完循环体的代码后,再继续判断
如果循环体只有一条语句,则{}可以省略,但不建议
while(a < 100) a+=1;
条件如果一直为true,则当前循环是一个死循环
3.1.2 do while
-
语法
do { 循环体; } while (布尔表达式);
进入循环体,true进入下一次循环,false结束循环
true为死循环
3.1.3 for
for循环适合已知执行次数的循环
-
语法
for (表达式1; 表达式2; 表达式3) { 循环体; }
表达式1和表达式3都可以省略;
for ( ; 表达式2; ) { 循环体; }
表达式1:只运行一次,一般初使化循环体中使用的变量
表达式2:布尔表达式,进行循环体的条件 ;每次进入循环体前先判断这个表达式的结果;
表达式3:循环体的最后一行语句
3.3 结束循环
-
结束循环的几种条件
-
不满足循环的条件
-
return:返回值
-
break:跳出整个循环
-
continue:跳出当前循环
-
-
在嵌套循环中可以使用continue或break来跳出某一层循环,使用标记的方式来解决即可
a: for(int i=0;i<10;i++){ b: for(int j=0;j<10;j++){ if(j==8){ break a; //continue a; } } }
3.4 常用算法
使用循环常用的算法
-
正推:已知条件求结果
-
反推:已知结果求条件
-
穷举:列举出所有的可能
4、数组
数组是一种引用数据类型,可以存储多个相同类型的数据;数据中存储的数据称为元素,长度一经定义不可改变。
-
语法
// 推荐方式,更符合对象的思想 int[] a = new int[长度]; // 也可以但不推荐 int b[] = new int[长度];
-
初始化:指初次给数组赋值,分为两种
-
动态初始化
// 定义一个数组a,长度为5 int[] a = new int[5]; // 下标为0的元素赋值为1 a[0] = 1; a[1] = 2;
-
静态初始化
// 定义一个数组a,长度为后面元素的个数 int[] a = new int[]{4, 6, 78, 8, 90};
简便写法
// new int[]可以省略 int[] a = {5, 6, 8, 9, 0, 98}; String[] s = {"张飞","李逵","王二麻子"};
-
-
获取元素
通过数组的下标(索引)来访问数组元素,数组的下标从0开始,最大下标值是长度-1
int[] a = new int[5]; a[0] = 78; a[1] = 77; int i = a[0];
-
遍历方法
-
按照长度循环
int[] a = {1, 2, 0, 0, 3, 5}; int i = 0; // 当i小于数组a的长度 while (i < a.length) { System.out.println(a[i]); i += 1; }
int[] a = {1, 2, 0, 0, 3, 5}; for (int i = 0; i < a.length; i++) { System.out.println(a[i]); }
-
增强的for循环
-
语法
for (数据类型 变量名 : 数组名) { 循环体; }
-
代码
String[] a = {"1", "2", "0", "0", "3", "5"}; for (String i : a) { System.out.println(i); }
-
说明:增强的for循环只能用于遍历集合;是JDK1.5版本之后的新特性;
-
-
-
二维数组
-
说明:
本质上来说,java并没有二维数组,所谓的二维数组其实就是一个数组,数组中的元素类型还是一个数组。
-
初始化
-
动态初始化
// 三行五列 int[][] a = new int[3][5]; // 只有三行,每行几个元素不确定 int[][] a = new int[3][];
-
静态初始化
int[][] a = {{3, 4, 6}, {6, 7, 8, 9}, {6, 7, 8, 9, 0}}; System.out.println(a.length); // 3 System.out.println(a[0].length); // 3 System.out.println(a[1].length); // 4 System.out.println(a[0][0]); // 3
-
-
5、排序
排序的算法有:冒泡,选择,插入,堆,快,希尔,归并,基本原则是比较和交换
-
冒泡排序的操作原则
-
相临的两个元素比较;并进行交换
-
每回合比较多对元素(内部循环)
-
重复以上步骤,对所有元素进行排序(外部循环)
-
-
选择排序的操作原则
-
每次从余下的元素中选出一个最大(小)的元素(通过下标)
-
对指定位置的元素进行交换(通过定义第三个中转值)
-