一、基础语法
(一)基本操作
1、打开windows+R cmd命令提示符窗口
C:\Users\with5>D: 盘符切换到D盘目录下D:\>
D:\>dir 查看当前路径下的内容
D:\>cd develop 进入单级目录
cd 目录1\目录2\... 进入多级目录
cd.. 回退到上一级目录
cd\ 回退到盘符目录
cls 清屏
exit 退出命令提示符窗口
输入文件名第一个字母按tab键可自动补齐文件名
2、JDK的安装目录
选择对应系统,下载.exe文件,打开程序安装
安装jdk时文件名不能有空格,尽量存放在单独的工作盘避免混乱
bin 存放了JDK的各种工具命令。java和javac都在这个目录
conf 存放了JDK的相关配置文件
include 存放了一些平台特定的头文件
jmods 存放了JDK的各种模块
legal 存放了JDK的各模块的授权文档
lib 存放了JDK工具的一些补充JAR包
3、环境变量配置
此电脑右键打开属性——>高级系统设置——>环境变量——>新建系统变量——>变量名:JAVA_HOME 变量值:JDK的安装目录D:\develop\Java\jdk-18——>确定新建系统变量——>系统变量Path编辑——>新建%JAVA_HOME%bin——>确定编辑环境变量——>确定系统属性设置
(未配置环境变量的情况下,不能直接cmd命令输入javac打开编译器,需输入完整的javac地址)
4、Java程序开发运行流程
编写程序(记事本)——>编译程序(Javac编译器)——>Java字节码文件——>运行程序(Java命令)
HelloWorld案例:
①新建文本文档文件,修改名称为HelloWorld.java
②记事本打开文件编写程序内容并保存(Ctrl+S)
/*
Java程序中最基本的组成单位是类,
类的定义格式:
public class 类名 {
}
*/
public class HelloWorld{ // 定义一个HelloWorld类
public static void main(String[] args) { // main方法是程序的入口,从main开始执行代码
System.out.println("HelloWorld"); // 输出语句“”里内容可修改// 注意是英文状态下的符号,System程序包需大写
}
}
③打开命令提示符窗口进入HelloWorld.java所在目录,输入指令编译和执行
编译:javac 文件名.java
javac HelloWorld.java
执行:java 类名
java HelloWorld
C:\Users\with5>d: // 切换到D盘目录下
D:\>javac HelloWorld.java // 通过javac编译程序,得到class文件
D:\>java HelloWorld // 通过java执行文件得到运行结果
HelloWorld
5、Notepad软件(记事本)
显示行号便于调试错误,建议安装到develop目录下与java同目录
GitHub搜索notepad++下载(官网打不开或收费)
更改安装目录——>下一步直至完成——>打开notepad++——>设置首选项——>新建——>默认语言Java——>编码ANSI——>关闭设置(便于使用方便修改默认语言和编码)
(二)基础知识
1、注释
单行注释://注释信息
多行注释:/*注释信息*/
文档注释:/**注释信息*/
2、关键字
关键字的字母全部小写,在常用的代码编辑器中,关键字有特殊颜色标记,如public、class、static、void,Java中有50个左右的关键字
3、常量
程序运行过程中,值不可以发生改变
字符串常量" "
整数常量
小数常量
字符常量' '
布尔常量true,false
空常量null(不能直接输出)
4、数据类型
计算机存储设备的最小信息单元:位(bit),比特位,b
最小的存储单元:字节(byte),B,由8个连续的位组成
1B=8bit
1KB=1024B
1MB=1024KB
1GB=1024MB
1TB=1024GB
不同数据类型分配不同的内存空间,表示的数据大小也不一样
整数 byte 1 -128~127
short 2 -32768~32767
int 4 -2^31~2^31-1
long 8 -2^63~2^63-1
浮点数float 4
double 8
字符char 2 0~65535
布尔boolean 1 true,false
5、变量
程序运行过程中,值可以发生改变
定义格式:数据类型 变量名 = 变量值;
基本数据类型:byte,short,int,long,float,double,char,boolean
取值格式:变量名
修改值格式:变量名=变量值;
public class VariableDemo01{
public static void main(String[] args) {
int a = 10; // 定义变量
System.out.println(a); // 输出变量10a = 4781; // 修改变量
System.out.println(a); // 输出变量4781
}
}
使用cmd命令提示符窗口运行java文件
C:\Users\with5>d:
D:\>javac VariableDemo01.java
D:\>java VariableDemo01
10
4781
①定义变量名不能重复,且必须需要赋初始值才可使用,赋值需在范围内
②定义long类型时为防止整数过大,需在数值后加L,如:long a = 10000000000L
③定义float类型时为防止不兼容类型,需在数值后加F,如:float f = 3.14F
6、标识符
给类、方法、变量等起名字的符号
定义规则:
①由数字、字母、下划线_、美元符$组成
②不能以数字开头
③不能是关键字
④区分大小写
常见命名约定:
①小驼峰命名法(方法、变量):第一个单词首字母小写,其他单词首字母大写
②大驼峰命名法(类):全部单词首字母大写
7、类型转换
①自动类型转换:表示范围小的数值或变量赋值给另一个表示范围大的变量
数据范围从小到大:
byte——>short——>int——>long——>float——>double
char——>
②强制类型转换:表示范围大的数值或变量赋值给另一个表示范围小的变量(可能存在数据丢失)
格式:目标数据类型 变量名 = (目标数据类型)值或变量;
如:int k = (int)88.88; 输出结果为88
(三)运算符
运算符是对常量或变量进行操作的符号
表达式是用运算符把常量或变量连接起来符合java语法的式子
不同运算符连接的表达式体现不同类型的表达式
1、算数运算符
+ 加 - 减 * 乘 / 除(得到商) % 取余(得到余数)
整数相除只能得到整数,要得到小数必须要有浮点数的参与
字符'A'的值为65,'a'的值为97,'0'的值是48,可以和int类型做+操作
算术表达式中包含多个基本数据类型时,整个算术表达式的类型会自动进行提升
提升规则:
①byte、short、char类型提升到int
②自动提升到表达式中最高等级操作数同样的类型
等级顺序:byte,short,char——>int——>long——>float——>double
字符串的+操作:出现字符串则拼接,从左到右执行,没有字符串就是算术运算
2、赋值运算符
= 赋值(把右赋值给左)
+= 把左边和右边的数据做加法,结果赋值给左边(i += 20,即i = i + 20)
扩展的赋值运算符(+= -= *= /= %=)底层隐含了强制类型转换
3、自增自减运算符
++ 自增 变量的值加1 --自减 变量的值减1
i++与++i单独使用时的结果相同(常见),参与操作时i++先使用i的值参与操作再+1,++i先+1再参与操作
4、关系运算符
== != > >= < <= 判断结果为true或false
5、逻辑运算符
用于连接关系表达式,如:3<x<6在Java中需写成x>3 && x<6
1)基本逻辑运算符
& 逻辑与(有false则false) | 逻辑或(有true则true)
^ 逻辑异或(相同为false不同为true) ! 逻辑非(奇数个!结果相反,偶数个相同)
2)短路逻辑运算符:
&& 短路与(有false则false,如果左边为false则右边不执行,结果与逻辑与相同)
|| 短路或(有true则true,如果左边为true则右边不执行,结果与逻辑或相同)
6、三元运算符
格式:关系表达式?表达式1:表达式2;
如:a > b ? a : b;
首先计算关系表达式的值,如果为true,则表达式1的值为运算结果,如果为false,则结果为表达式2的值
public class OperatorDemo {
public static void main(String[] args) {
int a = 10; // 定义两个变量
int b = 20;
int max = a > b ? a : b; // 获取两个数据中的较大值
System.out.println("max:" + max); // 输出结果
}
}
cmd命令运行该java程序
C:\Users\with5>d:
D:\>javac OperatorDemo.java
D:\>java OperatorDemo
max:20
(四)数据输入
1、Scanner使用
需要运行时键盘录入数据的时候用
①导包:import java.util.Scanner; // 导包必须在类定义上面
②创建对象:Scanner sc = new Scanner(System.in); // sc是变量名可变,其他均不可变
③接收数据:int i = sc.nextInt(); // i是变量名可变,其他均不可变
2、分支语句
1)流程控制
语句分类:顺序结构、分支结构(if、swhich)、循环结构(for、while、do……while)
出现错误: 编码 UTF-8 的不可映射字符 (0xB5)
解决方案:D:\>javac -encoding gbk IfDemo.java
① if判断语句格式
格式一:(一种情况的判断)
if (关系表达式) {
语句体;
}
首先计算关系表达式的值,为true执行语句体,为false则不执行,继续执行后面的语句
public class IfDemo {
public static void main(String[] args) {
int a = 10;
int b = 20;
if (a == b) {
System.out.println("a等于b");
}
int c = 10;
if (a == c) {
System.out.println("a等于c");
}
System.out.println("结束");
}
}
a等于c
结束
格式二:(两种情况的判断)
if (关系表达式) {
语句体1;
} else {
语句体2;
}
首先计算关系表达式的值,为true执行语句体1,为false则执行语句体2,再继续执行后面的语句
public class IfDemo02 {
public static void main(String[] args) {
int a = 10;
int b = 20;
if (a > b) {
System.out.println("a>b");
} else {
System.out.println("a<=b");
}
System.out.println("结束");
}
}
a<=b
结束
格式三:(多种情况的判断)
if (关系表达式1) {
语句体1;
} else if (关系表达式2) {
语句体2;
}
...
else {
语句体n+1;
}
首先计算关系表达式1的值,为true执行语句体1,为false则关系表达式2,为true执行语句体2,为false则关系表达式3,……如果没有任何关系表达式值为true,则执行语句体n+1
注:测试数据时:正确数据、边界数据、错误数据
② switch判断语句格式
switch(表达式) {
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
...
default:
语句体n+1;
[break;] // 可选
首先计算表达式的值,依次和case后的值进行比较,有对应的值就会执行相应的语句,遇到break就会结束,如果都不匹配就执行default语句体,最后结束程序
case穿透:若语句体执行完成后无break,则会执行下一个语句体,直到遇到break
③ for循环语句格式
循环结构组成:初始化语句、条件判断语句、循环体语句、条件控制语句
for (初始化语句;条件判断语句;条件控制语句) {
循环体语句;
}
首先执行初始化语句,执行条件判断语句,结果为false循环结束,为true继续执行循环体语句,执行条件控制语句,返回判断语句继续重复执行。
public class ForDemo {
public static void main(String[] args) {
for(int i=1;i<6;i++) {
System.out.println("Sqhy szd");
}
}
}
注意i的类型需定义
D:\>javac ForDemo.java
D:\>java ForDemo
Sqhy szd
Sqhy szd
Sqhy szd
Sqhy szd
Sqhy szd
例1:输出1-100的累加和 1-100内偶数的累加和
public class Test06 {
public static void main(String[] args) {
int sum1 = 0;
for(int i=1;i<=100;i++) {
sum1 += i;
}
System.out.println("1-100累加和为:" + sum1);
int sum2 = 0;
for(int i=1;i<=100;i++) {
if (i % 2 == 0) {
sum2 += i;
}
}
System.out.println("1-100偶数累加和为:" + sum2);
}
}
D:\>javac -encoding gbk Test06.java
D:\>java Test06
1-100累加和为:5050
1-100偶数累加和为:2550
例2:找出水仙花数
public class Test07 {
public static void main(String[] args) {int count = 0;
for(int i=100;i<1000;i++) {
int a = i / 100; // 百位数字
int b = i / 10 % 10; // 十位数字
int c = i % 10; // 个位数字
int sum = a*a*a+b*b*b+c*c*c;
if (sum == i) {
System.out.println(i + "是水仙花数");count++;
}
}System.out.println("水仙花数的个数为:" + count);
}
}
注意任意数字的指定位置上的数:先用整除,再用取余
注意定义变量要定义类型,语句结束要有;
注意for循环和count之间的缩进关系
水仙花数:三位数,个位、十位、百位的数字立方和等于原数
D:\>javac -encoding gbk Test07.java
D:\>java Test07
153是水仙花数
370是水仙花数
371是水仙花数
407是水仙花数水仙花数的个数为:4
④ while循环语句格式
初始化语句;
while (条件判断语句) {
循环体语句;
条件控制语句;
}
先执行初始化语句,执行条件判断语句,结果为false则循环结束,为true继续执行,执行循环体语句,执行条件控制语句,回到条件判断继续循环
public class WhileDemo {
public static void main(String[] args) {
int i = 1;
while (i < 6) {
System.out.println("sqhyszd");
i++;
}
}
}
输出五遍sqhyszd
注:for循环适合次数已知的情况,while循环适合需要记录循环次数、不知道循环多少次
⑤ do…while循环语句格式
初始化语句;
do {
循环体语句;
条件控制语句;
} while (条件判断语句);
首先执行初始化语句,再执行循环体语句、条件控制语句,执行条件判断语句,结果为false结束循环,结果为true继续执行,回到循环体继续循环。