文章目录
基础知识
Java三大版本:
- JavaSE:标准版(桌面程序,控制台开发)
- JavaME:嵌入式开发(手机,小家电)
- JavaEE:企业级开发(web开发,服务器开发)
三个概念:
- JDK(java development kit):Java开发者工具
- JRE(java runtime environment):Java运行时环境
- JVM(java virtual machine):Java虚拟机---->可以跨平台
一层包裹着一层,JDK>JRE>JVM。
记事本操作
- 编写java程序,文件以.class结尾
- 进入中端Terminal
- 首先javac 文件名.class,对它进行编译,形成类字节码。
- 然后运行已编译的文件 java 文件名。
注释
单行注释
//这是一个单行注释
多行注释
/*
这是
一个
多行
注释
*/
文档注释
/**
@author 小红
@version 版本号
*/
常用的:
- @author 作者名
- @version 版本号
- @since 指名需要最早的jdk版本号
- @param 参数名
- @return 返回值的情况
- @throws 异常抛出的情况
在终端该java文件目录下,输入以下命令,形成Java Doc文档
javadoc -encoding UTF-8 -charset UTF-8 文件名.java
点击目录下的index文件,即可看到生成的Java Doc文档(类似于Java API 界面)
基本数据类型
整数
整数类型的数据是一种数值型数据,是指那些没有小数部分的数值,可以为负数。
Java 语言定义了四种整数 类型:byte、short、int、long。
整数类型 | 所占字节数 | 数的范围 |
---|---|---|
byte | 1 | -2⁷~2⁷-1 |
short | 2 | -2¹⁵~2¹⁵-1 |
int | 4 | -2³¹~2³¹-1 |
long | 8 | -2⁶³~2⁶³-1 |
- int 类型是最常用的整数类型,Java 语言默认的整数类型就是 int 类型。
- long 类型只有在 int 类型的长度无法满足需要的时候才使用,在使用 long 类型 时,数值后一般要加符号L。
- byte 类型一般用来定义数组,可以看作一块存储区,可以用来存储数据。
进制:
- 八进制整数用0开头
- 十六进制整数用0X开头
浮点数
浮点类型的数据也是一种数值型数据,是指那些有小数部分的实数数值,可以采用科学计数法 表示很大的数。
Java 语言定义了两种浮点类型:float 和 double
类型 | 存储需求 | 取值范围 |
---|---|---|
float | 4 | …(有效位数为6~7) |
double | 8 | …(有效位数为15位) |
- Java 语言默认的浮点类型就是 double 类型
- float 类型只在特殊需要时才使用,一般不用,数值后一般要加符号 F或f。
三个特殊的浮点数:
- 正无穷(Double.POSITIVE_INFINITY)
- 负无穷(Double.NEGATIVE_INFINITY)
- NaN(Double.NaN)(不是一个数字,0/0或负数开根号的答案)
字符
Java中字符采用UTF-16,用两个字节来表示基本字符,4个字节来表示其他字符(如中文字符等等)
char和Unicode
码点:是指与一个编码表中的某个字符对应的代码值
码点采用十六进制书写,并加上U+
Unicode码点可以分为17个代码平面
第一个平面称为基本多语言平面,包括码点U+0000到U+FFFF的经典Unicode代码。
其他16个平面从U+10000到U+1FFFF,包括辅助字符。用一对连续的代码单元来表示(第一代码单元U+D800~U+DBFF,第二代码单元U+DC00~U+DFFF,这些代码单元基本多语言没有占用)。
boolean类型
boolean 型只有两个值true和false,true表示逻辑真,false表示逻辑假。
布尔型不能与数值型运算。
类型转换
整数型、浮点型、字符型数据可以混合运算。
运算时,不同类型的数据先转换为同一种数据类型,然后再进行运算。
自动类型转换也叫隐式转换,是指数据类型由低级向高级的转换,这种转换是 Java 运行机制自动实现的,不需要程序干涉。
标识符
标识符是程序中各种要素的名称,作用是为了在一定的范围内唯一标识程序中的要素。
规则
5个规则:
- 标识符由 4 种符号组成(字母、数字、_、$)
- 数字不能开头
- 大小写敏感
- 没有长度限制
- 不能是关键字和保留字
习惯
五个习惯:
- 包名全小写
- 类名、接口名:每个单词首字母大写
- 变量名、方法名:第一个单词全小写,后面每个单词首字母大写
- 常量名全大写
- 名字要有意义
变量与常量
变量
变量是程序的基本元素,它的作用是表示一个数据实体,它的本质是内存中的一块区域,该内存区中的数据可以改变,它的表现形式是一个合法的标识符,这个标识符就是变量的名称,可以通过该标识符或者说该名称来使用它所对应的内存区中的数据。
声明
变量类型 变量;
初始化
- 变量类型 变量=初始值;
- 变量类型 变量;变量=初始值;
第二中有时候用来提高变量的作用域。
常量
普通常量:就是一些常数。
符号常量:
- 使用关键字final来指示常量。
- 只能被赋值一次。
运算符
算数运算符
算术运算符是进行算术运算的操作符。
一元运算符:自增,自减(++,–)
- i++,先运算再自增
- ++i,先自增再运算
- –同理
二元运算符:加减乘除(±*/%)
- / 符号两边均是整数时,商是整数,直接去尾。
- % (符号两边只能是整数)取余
关系运算符
关系运算符也称比较运算符,用来比较两个操作数。
- ==,!=,>,<,>=,<=
- instanceof 运算符 instanceof 是验证对象是否是某个类的实例
a instanceof A;//对象 a instanceof 类 A
逻辑运算符
- &&,|| 短路逻辑 前面的条件false或者true,直接可以得出答案,后面的条件将不会进行运算。
- &,| 非短路逻辑
- ^ 逻辑异或 不相同为true,不相同为false。
- ! 逻辑非
位运算符
将两个数写成2进制形式,进行运算。
- & 按位与
- | 按位或
- ^ 按位异或
- ~ 按位取反
移位运算符
- >> 符号右移
- >> > 无符号右移 最高位0填齐。负数无符号右移为正数。
- << 左移
注意事项:
- Java 中没有<<<运算符
- 参与移位运算的操作数类型有 byte、short、char、int、long,且对低于 int 型的操作数将 先自动转换为 int 型再移位。
赋值运算符
- =
- +=,-=,*=,/=
条件运算符
三元运算符
表达式 1 ? 表达式 2 : 表达式 3
- 表达式 1是关系表达式或逻辑表达式
- true计算表达式2
- false计算表达式3
运算优先级
输入输出(简易)
读取输入
Scanner类(定义在java.util包中)
- 获取输入:
Scanner in=new Scanner(System.in);
方法:
-
String next() 下一个单词
-
String nextLine() 下一行数据
-
int/double nextInt() nextDouble() 下一个int/Double型数据
-
boolean hasNext() 是否还有其他单词
-
boolean hasInt hasDoble …
格式化输出
- 普通输出:
System.out.println();//带换行符
System.out.print();//不带换行符
- 格式化输出
System.out.printf("%index$ flag width [.precision+conversion character|t+conversion character]");
- index 索引 用于指出后面参数的索引,以$结尾。
- ❗❗从1开始
System.out.printf("%1$s %2$tB %2$te %2$tY","due date:",new Date());
-
flag 标志
-
width 宽度 :表示整体的长度
-
precision 精度:表示小数点的位数
-
conversion character :转化的字符,转换符
-
时间的格式化选择 以t开头,+上相应的转换符
简易的文件输入与输出
- 这里使用的是绝对路径。
- 后面IO流将会详细说明。
读取文件
Scanner scanner=new Scanner(Path.of("D:\\testFile\\1.txt"), StandardCharsets.UTF_8);
写入文件
PrintWriter printWriter = new PrintWriter("D:\\testFile\\1.txt", StandardCharsets.UTF_8);
printWriter.write("1234");
printWriter.close();
流程控制
Java 程序是按照一定的顺序执行的,程序执行的顺序就是流程,对程序执行的顺序进行控制就 是流程控制。
Java 程序中的流程控制有三种类型:顺序结构、分支结构,循环结构。
顺序结构
顺序结构是指程序在运行过程中按照从上到下、从左到右的顺序依次执行每条语句,不会发生跳转,也不会重复执行某些语句。
分支结构
分支结构也称为选择结构,是指程序在执行过程中会根据条件选择执行不同的分支程序。
分支结构分为两种:双分支结构和多分支结构。
双分支结构
if(condition){
语句块;
}
[else{
语句块;
}]
多分支结构
第一种:
if(condition){
语句块;
}else if(condition){
语句块;
}else if(condition){
语句块;
}
......
else{
语句块;
}
第二种:
switch(表达式){
case 值1:
语句1;
break;
case 值2:
语句2;
break;
......
case 值n:
语句n;
break;
[default: 语句;]
}
- switch 后面小括号内的表达式的值的类型只能是 byte、short、char、int的常量表达式,枚举常量和字符串字面量。
- case 后面紧跟的值的必须是基本常量,且所有 case 子句中的值应该 是不同的。
- 当所有的 case 分支中的值都没有和表达式中的值匹配时,default 分支将被执行。
- ❗❗break 是 switch 分支的关键语句,作用是当某个 case 分支执行完成后,跳出 switch 分支结构。如果没有 break 语句,一旦某个 case 分支的值和表达式的值匹配,其后的所有 case 分 支都会被执行,直到碰到一个 break 语句才结束。
- case 分支中可以写多条语句,不需要大括号。
循环结构
for循环
for(判定变量的初始值;判断是否符合条件;迭代部分){
循环体;
}
增强型for循环
专门用来遍历数组和集合的。内部相当于一个迭代器
for(元素数据类型 变量名:Collection/数组)
循环体;
}
while循环
while(判断部分){
循环部分;
迭代部分;
}
do-while循环
do{
循环部分;
迭代部分;
}while(判断部分);
- do-while 循环至少会执行一次。
- while(判断部分)后面一定要加上";"。
流程跳转
break语句
break 语句一般应用于 switch 结构和循环结构,作用是跳出这层循环。
continue语句
continue 语句一般应用于循环结构,continue 语句的作用是继续下一次循环。
标签
- 针对于嵌套很深的循环(for,while)
- 对于有多层循环,想要跳出所有循环则需要多个break,java提供了标签(标号)功能,可以直接跳出多层循环。
loop:for(...){
for(...){
for(...){
...
break loop;
}
}
}
三种简易算法
穷举
穷举算法也叫“枚举算法”,基本思想是将所有可能的解都列举出来。
递推(迭代)
递推算法就是按照一定的规律,递推或迭代一定的次数,从而得到结果的一种算法。
💥递归
(重点)
递归就是把方法不断地自我调用,直到满足一定的条件后,再逐层返回的算法。
例题:计算 N!
public class DiGui{
public static void main(String arg[]){
Scanner in=new Scanner(System.in);
int n=in.nextInt();
System.out.println(n+"的阶乘为:"+JieCheng(n));
}
public static int JieCheng(int n){
if(n==1) return 1;
else return n*JieCheng(n-1);
}
}