Loading...
墨滴

筱筱琪、

2021/05/08  阅读:39  主题:雁栖湖

Java学习笔记(一)

本文档基于B站视频零基础玩Java,编程应该玩着学。

Part1学习进度:

2021.04.29==>P01-P10 基础知识

2021.05.01==>P11-P14 选择和循环结构

2021.05.07==>P15-P18 数组和方法

2021.05.08==>学习笔记整理完成

1P2-P4-搭建Java开发环境

所需软件

JDK8+IDEA

JDK: 编译、运行java程序

IDEA: 集成开发环境(IDE)

新建项目

IDEA中使用Maven方式组织管理代码。

当我们第一次打开IDEA时如下图示,我们选择右上方New Project

image-20210503132127005

之后选择Maven,然后点击Next

image-20210503132202429

这里选择项目存放的位置(根据自己实际情况修改),然后点击Finish

image-20210503132246230

到此我们已经新建了一个名为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

2P5-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

  • 整数:1、0、-1、365

浮点数:double,float

  • 0.03、3.14、-1.68

字符:char

  • 'a'、'h'、'你'
  • 用单引号表示

布尔:boolen

  • 布尔值:true、false

字符串: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(14):  # 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 = {123456};
        int num2[] = {123456};

        //声明长度,没设置初始值,初始值就是默认值 =>
        // 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 = {12345678};
        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 = {12345678};
        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 = {12345678};
        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 = {389};
        int[] num2 = {528};
        //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 = {35999212};
        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 = [1234]
num2 = [2468]
num3 = [None] * len(num1)

for num in range(len(num1)):
    num3[num] = num1[num] + num2[num]
print(num3)

# 查找列表中最大值
nums = [14667773357889]
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

筱筱琪、

2021/05/08  阅读:39  主题:雁栖湖

作者介绍

筱筱琪、