Part1-Java学习笔记(一)
最近学习了Java,整理好了学习笔记,笔记中也包含对应案例的Python代码,发出来以供大家学习参考,如果能帮到大家就再好不过了。
本文档基于B站视频零基础玩Java,编程应该玩着学。
学习进度:
2021.04.29==>P01-P10 基础知识
2021.05.01==>P11-P14 选择和循环结构
2021.05.07==>P15-P18 数组和方法
2021.05.08==>学习笔记整理完成
P2-P4-搭建Java
开发环境
所需软件
JDK: 编译、运行java程序
IDEA: 集成开发环境(IDE)
新建项目
在IDEA
中使用Maven
方式组织管理代码。
当我们第一次打开IDEA
时如下图示,我们选择右上方New Project
之后选择Maven
,然后点击Next
这里选择项目存放的位置(根据自己实际情况修改),然后点击Finish
到此我们已经新建了一个名为test
的项目,同时IDEA
默认会帮我们打开pom.xml(test)
文件,我们暂时不用管它,点击关闭即可。
新建.java
文件
通常,我们新建的.java
文件放在test->src->main->java
目录下
右键java文件夹
在弹出的选择框中依次点击New->Java Class
输入文件名helloworld
后按下回车
IDEA
默认会帮我们打开helloworld.java
文件
然后输入以下命令
public class helloworld {
public static void main(String[] args) {
System.out.println("hello world");
}
}
Tips:
>public static void main(String[] args){}
>输入main后按下回车, IDEA会自动生成
>System.out.println()
>输入sout后按下回车,IDEA会自动生成
程序运行
右键空白处选择Run 'helloworld.main()'
或按快捷键Ctrl+Shitt+F10
程序运行并会在控制台输出hello world
P5-P6-数据类型和注释
程序=命令+数据+逻辑
注释
对代码进行解释说明,被注释的代码,程序不会执行
三种注释类型:
单行注释
//
//System.out.println("hello world");
多行注释
以/*
开始,以*/
结尾
/*public class helloworld {
public static void main(String[] args) {
System.out.println("hello world");
}
}*/
Java Doc
暂时用不到,/**
后回车IDEA
自动生成
/**
*
* @param args
*/
常见的数据类型
整数:int
,long
,short
,byte
等
浮点数:double
,float
字符:char
布尔:boolen
字符串:String
- "helloworld"、"java"、"python"
- 用双引号表示
变量
- 变量定义之后才能使用
- 变量由4部分组成:
变量类型
,变量名
,变量值
和;
int age = 9; // 创建age变量,整数类型,值为9
double num = 3.14; // 创建num变量,浮点数类型,值为3.14
String word = "hello\\world\n你好"; //hello\world 字符串的转义
//你好
命名规则
- 只能由数字、字母、下划线、美元符号
$
、中文字符组成。
- 不能以数字开头;不能用关键词。如
break、 case、 char
等。
- 大小写敏感;max, Max不同。
- 一般以小写开头,遵循驼峰命名。
当变量名或函数名是由一个或多个单词连结在一起,第一个单词以小写字母开始;从第二个单词开始以后的每个单词的首字母都采用大写字母。
例如:myFirstName、myLastName,这样的变量名看上去就像骆驼峰一样此起彼伏,故得名。
P7-P10-运算符
基础运算符
-
先乘除后加减,可以使用()改变运算优先级。
-
对于字符串也可以用+进行字符串连接操作。
运算符 |
含义 |
实例 |
+ |
加 |
a + b |
- |
减 |
a - b |
* |
乘 |
a * b |
/ |
除 |
a / b |
% |
取余 |
a % b |
= |
赋值 |
a = b |
复合运算符
运算符 |
含义 |
举例 |
+= |
加等 |
a += 10 |
-= |
减等 |
a -= 10 |
*= |
乘等 |
a *= 10 |
/= |
除等 |
a /= 10 |
%= |
取余等 |
a %= 10 |
++ |
自增 |
++x(先加1再用) |
|
|
x++(先用再加1) |
-- |
自减 |
--x(先减1再用) |
|
|
x--(先用再减1) |
关系运算符
- 关系运算符的结果为boolean类型
- String 的相等比较不能用==,要用
equals
==>s1.equals(s2)
运算符 |
含义 |
实例 |
> |
大于 |
a > b |
>= |
大于等于 |
a >= b |
< |
小于 |
a < b |
<= |
小于等于 |
a <= b |
== |
等于 |
a == b |
!= |
不等于 |
a != b |
逻辑运算符
运算符 |
含义 |
举例 |
$$ |
与 (一假则假,全真为真) |
a$$b |
|| |
或 (一真则真,全假为假) |
a||b |
! |
非 (真假互换) |
a!b |
三元运算符
表达式 1?表达式 2:表达式 3
如果表达式 1 的结果为真,以表达式 2 的值作为整个条件表达式的值,否则以表达式 3 的值作为整个条件表达式的值。
int a=9;
int b=0;
b=(a>10?888:666); // 666
b=(a>5?888:666); // 555
P11-选择结构
- 目的:满足某些条件的时候才执行一段代码。
- 两种语句:if、switch。
- if用的最多,可以代替switch。
if
if (表达式) //这里不要写分号
{
语块句
} //这里分号写不写都行
实例
public class ifTest1 {
public static void main(String[] args) {
int s = 20;
if (s > 18) //这里不要写分号
{
System.out.println("已满18");
} //这里分号写不写都行
System.out.println("程序结束");
int i = 5;
if (i == 6) ; // ; ==> if 语句结束 ==> 相当于 if (i == 6){};
{
System.out.println("666");
}
}
}
if...else
if (表达式) //这里不要写分号
{
语块句1
} //这里分号写不写都行
else
{
语块句2
}
实例
如果年龄大于21输出年龄大于21,否则输出年龄小于21。
public class ifTest2 {
public static void main(String[] args) {
int age = 20;
if (age > 21) {
System.out.println("年龄大于21");
} else {
System.out.println("年龄小于21");
}
}
}
if...elif...else
if (表达式) //这里不要写分号
{
语块句1
} //这里分号写不写都行
elif
{
语块句2
}
.
.
.
else
{
语句块n
}
实例
判断一个年龄,如果小于0,报错“年龄错误”,如果>=0并且<=1,显示“婴儿”,如果>1并且<=5,显示“幼儿”,如果>5并且<=18,显示“少儿”,否则显示“成年人”。
public class ifTest3 {
public static void main(String[] args) {
int age = 20;
if (age < 0) {
System.out.println("年龄报错");
} else if (age <= 1) {
System.out.println("婴儿");
} else if (age <= 5) {
System.out.println("幼儿");
} else if (age <= 18) {
System.out.println("少儿");
} else {
System.out.println("成年");
}
}
}
if嵌套
IF嵌套
if (表达式)
{
语句1
if (表达式2)
{
语句2
}
}
实例
判断年龄是否大于20,大于20的话判断是否大于40。
public class ifTest4 {
public static void main(String[] args) {
int age = 12;
if (age > 20) {
System.out.println("年龄大于20");
if (age < 40) {
System.out.println("年龄小于40");
} else {
System.out.println("年龄大于40");
}
} else {
System.out.println("年龄小于20");
}
}
}
P12-P14-循环结构
- 目的:反复执行N次(或一直执行)某段代码。
- 三种语句:for(重点)、while、do……while(没讲)。
- 使用频率: for > while > do...while
- 不同需求用不同语法难易程度不同。
while循环
while (条件表达式) ==> 先判断条件表达式,如果为true就执行循环体,执行完循环体再判断条件表达式...
{
循环体
}
实例
public class whileTest {
public static void main(String[] args) {
//打印 3 遍 I love you
/*int num = 1;
while (num < 4) ==> while (num <= 3)
{
System.out.println("I love you");
num ++ ;
}*/
//从 10 倒数到 0
/*int num = 10;
while (num >= 0) {
System.out.println(num);
num--;
}*/
// 统计 0 到 10 的和
int num = 0, sum = 0;
while (num < 10) {
num++;
sum += num;
}
System.out.println("0 到 10 的和是" + sum);
// 从 5 打印到 11
int printName = 5;
while (printName <= 11) {
System.out.println(printName);
printName++;
}
}
}
for循环
for(表达式1;表达式2;表达式3){
循环体
}
(1).先执行表达式1(只执行1次);
(2).执行表达式2,若结果为true,执行循环体,跳到(3),若为false跳出循环
(3).执行表达式3,跳到表达式2
实例
public class forTest {
public static void main(String[] args) {
// 打印从 0~10的数字
// for (int num = 0; num <= 10; num++) {
// System.out.println(num);
// }
// 打印从 10~0的数字
for (int num = 10; num >= 0; num--) {
System.out.println(num);
}
// 另一种写法
// int x = 0;
// for (x = 0; x <= 10; x++) {
// System.out.println(x);
// }
// 打印 0~10 的和
// int num = 0, sum = 0;
// for (num = 0, sum = 0; num < 10; num++,sum += num){
// System.out.println(sum);
// }
// System.out.println("0到10的和是:"+ sum);
// int sum = 0;
// for (int num = 0; num <= 10; num++){
// //System.out.println(sum);
// sum += num;
// }
// System.out.println("0到10的和是:"+ sum);
}
}
循环嵌套
- 循环里套循环
- while,for,do...while都可以嵌套;使用最多的是for
打印数组 0,1;0,2;0,3;1,1;1,2;1,3;2,1;2,2;2,3
public class xunHuanQianTao {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) { //i = 0; i =1; i=2
for (int j = 1; j <= 3; j++) { // j = 1; j=2 j=3
System.out.println(i + "," + j); // 0,1;0,2;0,3; 1,1;1,2;1,3; 2,1;2,2;2,3;
}
}
}
}
break和continue
- break: 强制结束
本轮循环
- continue:
不再执行
本次循环后面的代码,进行下一次循环
- 注意局部变量和全局变量
实例
public class breakContinue {
public static void main(String[] args) {
for (int num = 1; num <= 5; num++) {
if (num == 3) {
//break; // 1, 2
continue; //1, 2, 4, 5
}
System.out.println(num);
}
//打印 10 以内奇数
// for (int num = 1; num <= 10; num++) {
// if (num % 2 == 0){
// //break; // 1, 2
// continue; //1, 3, 5, 7, 9
// }
// System.out.println(num);
// }
//打印 10 以内偶数 while
// int num = 0;
// while (num <= 10) {
// System.out.println(num);
// num++;
// if (num % 2 == 0) {
// continue;
// }
// num++;
// }
//打印 10 以内偶数 for
for (int evenNum = 0; evenNum <= 10; evenNum++) {
if (evenNum % 2 != 0) {
continue;
}
System.out.println(evenNum);
}
}
}
Python对比
# 打印 0-10 数字
# while循环
j = 0
while j <= 10:
print(j)
j += 1
# for循环
for i in range(11):
print(i)
# 打印 0-10 的和
# while循环
num = 1
sum = 0
while num <= 10:
sum += num
num += 1
print(sum)
# for循环
sum = 0
for i in range(11):
sum += i
print(sum)
# 打印数组 0,1;0,2;0,3;1,1;1,2;1,3;2,1;2,2;2,3
for x in range(3): # 012
for y in range(1, 4): # 0123
print(x, y)
# 打印 0-10 的偶数
# while循环
i = 0 # 没输出0
while i < 10:
i += 1
if i % 2 != 0:
continue
print(i)
# for循环
for i in range(11):
if i % 2 == 0:
print(i)
i += 1
P15-17-数组
- 有序数据的集合就是数组(Array)。
- 一切类型皆可数组。
- 数组中每项都有一个编号,被称为数组下标,通过下标可以找到数组中指定的数据,也可给指定位置赋值
- 数组元素下标从
0
开始,最后一个元素的下标为长度-1
。
- 引用数组的形式:
数组名[下标]
。
数组定义
指定初始值:
int[] a = {1,2,3,4,5,6,7,8,9,10}(推荐);或 int a[] = {1,2,3,4,5,6,7,8,9,10};
指定长度,初始值为默认值
int[] a = new int[10](推荐);或 int a[]= new int[10];
数组默认值
int、 double等默认值是 0,
boolean 默认值是 false,
String 等默认值是 null。
数组越界
数组下标超出数组范围。
实例
public class Array {
public static void main(String[] args) {
// 指定初始值
int[] num1 = {1, 2, 3, 4, 5, 6};
int num2[] = {1, 2, 3, 4, 5, 6};
//声明长度,没设置初始值,初始值就是默认值 =>
// int初始值为 0 => String => null
int[] num3 = new int[6];
num3[1] = 8;
// 引用元素
// 下标从 0 开始,最后一个元素下标为 “长度 - 1”
// 引用数组形式: 数组名[下标]
num1[2]=num1[3]+num2[2];
System.out.println(num1[3]); // 4
System.out.println(num2[0]); // 1
System.out.println(num3[0]); // 0
System.out.println(num3[1]); // 8
System.out.println(num1[2]); // 7
// 数组越界 => 下标超出范围
int[] num = {1,2,3,4,5};
System.out.println(num[6]); //.ArrayIndexOutOfBoundsException: 6
}
}
数组长度
通过数组名.length
获取。
int len = worlds.length; // 获取数组的长度
实例
public class test {
public static void main(String[] args) {
String[] worlds = {"hello", "world", "hi"};
int len = worlds.length; // 获取数组的长度
System.out.println(len); // 3
}
}
数组遍历
数组的遍历: 从第 0
个到第 length - 1
个元素。
实例
public class test {
public static void main(String[] args) {
String[] worlds = {"hello", "world", "hi"};
for (int num = 0; num <= worlds.length - 1; num++) { // 避免魔法数 length - 1
System.out.println(worlds[num]); // hello,world,hi
}
}
}
增强for循环
如果只是对数组进行`从头到尾`的遍历获取值,可以用如下写法:
for(元素类型 item :array){
语块句
}
实例
public class test {
public static void main(String[] args) {
int[] nums = {1, 2, 3, 4, 5, 6, 7, 8};
for (int num : nums) {
System.out.println(num); //1 2 3 4 5 6 7 8
}
}
}
public class test {
public static void main(String[] args) {
// break continue
String[] words = {"hello", "world", "hi", "thanks"};
for (String word : words) {
if (word.equals("hi")) {
// break; // hello, world
continue;
}
System.out.println(word); // hello, world, thanks
}
}
}
数组打印
直接打印: 不可读格式。
public class test {
public static void main(String[] args) {
int[] nums = {1, 2, 3, 4, 5, 6, 7, 8};
System.out.println(nums); // [I@1b6d3586
}
}
Arrays.toString(推荐)
需要导入 java.util.Arrays;==>import java.util.Arrays;
输入Arrays.toString()
后IDEA
会自动导入
import java.util.Arrays;
public class tets {
public static void main(String[] args) {
int[] nums = {1, 2, 3, 4, 5, 6, 7, 8};
String text = Arrays.toString(nums);
System.out.println(text); // [1, 2, 3, 4, 5, 6, 7, 8]
}
}
数组案例
1.逆序输出(*)
public class test {
public static void main(String[] args) {
String[] names = {"tom", "lucy", "jack", "marry"};
for (int name = names.length - 1; name >= 0; name--) {
System.out.println(names[name]); // marry,jack,lucy,tom
}
}
}
2.等长数组元素逐位和(*)
import java.util.Arrays;
public class test {
public static void main(String[] args) {
int[] num1 = {3, 8, 9};
int[] num2 = {5, 2, 8};
//int[] num3 = new int[3]; // <==避免魔法数
int[] num3 = new int[num1.length]; // 优化 用length代替长度
for (int num = 0; num < num1.length; num++) {
num3[num] = num1[num] + num2[num];
}
String nums3 = Arrays.toString(num3);
System.out.println(nums3);
}
}
3.查找数组中最大值(***)
public class test {
public static void main(String[] args) {
int[] testNums = {3, 5, 999, 2, 12};
int maxNum = testNums[0]; // 假设数组中第一个数是最大的
for (int num = 1; num < testNums.length; num++) { // 对数组进行遍历与假设的数进行对比
if (maxNum < testNums[num]) { // 如果数组中的数比假设的数大
maxNum = testNums[num]; // 进行赋值
}
}
System.out.println("数组testNums中最大的数为" + maxNum); // 数组testNums中最大的数为999
}
}
Python对比
# 列表遍历
words = ["hello", "world", "hi"]
for word in words:
print(word)
# 逆序遍历
i = len(words)
while i > 0:
i -= 1
print(words[i])
# 对应值相加
num1 = [1, 2, 3, 4]
num2 = [2, 4, 6, 8]
num3 = [None] * len(num1)
for num in range(len(num1)):
num3[num] = num1[num] + num2[num]
print(num3)
# 查找列表中最大值
nums = [1, 4, 66, 777, 335, 7889]
maxNum = nums[0]
for num in nums:
if num > maxNum:
maxNum = num
print('nums中最大的数为:', maxNum)
P18-方法
方法由方法名
、参数
、返回值
组成,可对比Python中的函数。
- 别人写好的方法:JDK内置的库中的方法;第三方库中的方法;
- 自己写的方法:给自己或者别人使用的方法。
方法的定义
返回类型名 方法名(参数列表)
{
语句; //方法体
}
如果方法没有返回值,则“返回类型名 ”写void。
Println
方法
public void println(String x) {
synchronized (this) {
print(x);
newLine();
}
}
方法的调用
- 方法名 (参数列表);
System.out.println("hello");
- 变量=方法名 (参数列表);
String num = Arrays.toString(nums);
- 有时需要提前把对应方法中的类
import
进来。
结语
终于,陆陆续续(过了个五一假期)跟着教程学完了第一阶段的内容。
本文档是Java第一阶段学习笔记,如有什么错误,还请大家帮忙指出!
同时文档中也添加了对应案例的Python代码,以供大家学习。
以下闲扯仅供参考
-
总别人说某种编程语言的难易,倒不如自己亲自动手试试。
其实,在学Java之前我是比较抵触的,感觉语法非常繁琐,不如Python简洁,但到后来学习的时候,感觉也没预想的那么难,关键是看能不能走出自己的舒适圈。
-
注重编程思维的培养
举个例子,Java数组的第3个案例(查找数组中最大值),我之前用Python写过,到后来用Java写的时候,就直接“生搬硬套”,逻辑其实都是一样的。
最后,感谢你看到这里!
我们第二阶段笔记见!
2021.05.08