【Java零基础入门篇】第 ② 期 - Java语言基础(四)

简介: Java零基础入门


博主:命运之光
专栏:JAVA入门
JAVA.gif

学习目标
掌握变量、常量、表达式的概念,数据类型及变量的定义方法;
掌握常用运算符的使用;
掌握程序的顺序结构、选择结构和循环结构的使用;
掌握数组的定义及使用方法;
掌握基本的输入输出方法;


流程控制语句

  • 顺序结构
  • 选择结构
  • 循环结构

这三种不同的结构有一个共同点,就是它们都只有一个入口,也只有一个出口。程序中使用了上面这些结构到底有什么好处呢?这些单一入、出口可以让程序易读、好维护,也可以减少调试的时间。

顺序结构

程序至上而下逐行执行,一条语句执行完之后继续执行下一条语句,一直到程序的末尾。
在这里插入图片描述

选择(分支)结构

根据条件的成立与否,再决定要执行哪些语句的一种结构。
这种结构可以依据判断条件的结构,来决定要执行的语句。当判断条件的值为时,就运行“语句1”;当判断条件的值为,则执行“语句2”。不论执行哪一个语句,最后都会再回到“语句3”继续执行。
在这里插入图片描述
🍓 if 语句 : 如果

  • if语法:
if (布尔表达式) {
    条件满足时执行的程序 ;
}

在这里插入图片描述

  • if…else语法:
if (布尔表达式) {
    条件满足时执行的程序 ;
} else {
    条件不满足时执行的程序 ;
}

在这里插入图片描述

  • if…else if…else语法:
if (布尔表达式1) {
    条件满足时执行的程序 ;
} else if (布尔表达式2) {
    条件满足时执行的程序 ;
} ... else {
    所有条件都不满足时执行的程序 ;
}

在这里插入图片描述
🍓🍓例1:使用if语句判断。

public class text1 {
    public static void main(String args[]) {
        double score = 90.0;        // 定义变量
        if (score > 60.0) {        // 设置判断条件
            System.out.println("及格了!");
        }
    }
}

请添加图片描述
🍓🍓例2:使用if…else语句判断。

public class text1 {
    public static void main(String args[]) {
        double score = 30.0;     // 定义变量
        if (score > 60.0) {     // 条件判断满足
            System.out.println("及格了!");
        } else {             // 条件判断不满足
            System.out.println("小白的成绩!");
        }
    }
}

请添加图片描述
🍓🍓例3:使用if…else if…else语句判断。

public class text1 {
    public static void main(String args[]) {
        double score = 91.0;         // 定义变量
        if (score < 60.0) {        // 条件判断
            System.out.println("小白的成绩!") ;
        } else if (score >= 60 && score <= 90) {// 条件判断
            System.out.println("中等成绩") ;
        } else if (score > 90 && score <= 100) {// 条件判断
            System.out.println("优秀成绩") ;
        } else {            // 条件判断都不满足
            System.out.println("你家的考试成绩这么怪异!") ;
        }
    }
}

请添加图片描述
🍓switch语句
对于多条件判断使用if…else if…else是可以判断布尔条件的,如果是多数值判断,可以通过switch完成,语法格式如右所示:

switch(整数 | 字符 | 枚举 | String) {
    case 内容 : {
        内容满足时执行 ;
        [break ;]
    }
    case 内容 : {
        内容满足时执行 ;
        [break ;]
    }
    case 内容 : {
        内容满足时执行 ;
        [break ;]
    } ... 
    [default : {
        内容都不满足时执行 ;
        [break ;]
    }]
}

在这里插入图片描述
🍓🍓例1:使用switch语句判断。

public class text1 {
    public static void main(String args[]) {
        int ch = 1;
        switch (ch) {        // 判断的是数字
            case 2: {    // 判断内容是否是2
                System.out.println("内容是2");
                break;
            }
            case 1: {    // 判断内容是否是1
                System.out.println("内容是1");
                break;
            }
            case 3: {    // 判断内容是否是3
                System.out.println("内容是3");
                break;
            }
            default: {    // 判断都不满足
                System.out.println("没有匹配内容");
                break;
            }
        }
    }
}

请添加图片描述

  • case子句中的值必须是常量,不能是变量名或不确定的表达式值;
  • 同一个switch语句,所有case子句中的常量值互不相同
  • break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾
  • default子句是可任选的。同时,位置也是灵活的当没有匹配的case时,执行default

🍓🍓例2:使用字符串判断。

public class text1 {
    public static void main(String args[]) {
        String str = "HELLO";
        switch (str) {     // 判断的是字符串
            case "HELLO": {
                System.out.println("内容是HELLO");
                break;
            }
            case "hello": {
                System.out.println("内容是hello");
                break;
            }
            case "mldn": {
                System.out.println("内容是mldn");
                break;
            }
            default: {
                System.out.println("没有匹配内容");
                break;
            }
        }
    }
}

请添加图片描述

从JDK 1.7开始switch支持 字符串的直接判断,即:可以利用switch判断是否是某一个字符串内容。但是在字符串的判断中是严格 区分字母大小写的。

循环结构

循环,即事物周而复始的变化。 循环结构,使一部分代码按照次数一定的条件反复执行的一种代码结构。对于循环结构有三种循环:while循环、for循环和do-while循环。
循环语句的四个组成部分:

  • 循环初值(init_statement)
  • 循环条件部分(test_exp)
  • 循环体部分(body_statement)
  • (修改循环条件)迭代部分(alter_statement)

在这里插入图片描述
while循环:

while (循环条件) {
    循环语句 ;
    修改循环结束条件 ;
}

在这里插入图片描述
do...while循环:

do {
    循环语句 ;
    修改循环结束条件 ;
} while (循环条件) ;

在这里插入图片描述
🍓🍓例1:使用while语句实现求解1~100的累加和。

public class text1 {
    public static void main(String args[]) {
        int sum = 0;         // 保存总和
        int current = 1;         // 循环的初始化条件
        while (current <= 100) {     // 循环结束条件
            sum += current;     // 累加
            current++;    // 改变循环条件
        }
        System.out.println(sum);
    }
}

请添加图片描述
在这里插入图片描述
🍓🍓例2:使用do-while语句实现求解1~100的累加和。

public class text1 {
    public static void main(String args[]) {
        int sum = 0;         // 保存总和
        int current = 1; // 循环的初始化条件
        do {     // 循环结束条件
            sum += current; // 累加
            current++;    // 改变循环条件
        } while (current <= 100); // 循环结束判断
        System.out.println(sum);
    }
}

请添加图片描述
在这里插入图片描述
for循环:已经明确的知道了循环次数,语法如下:

for ( ① 循环初始化条件; ②循环条件; ④迭代部分) {
    ③循环语句 ;
}

执行过程:
①-②-③-④-②-③-④-②-③-④-.....-②
说明:
②循环条件部分为boolean类型表达式,当值为false时,退出循环;
①初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔;
④可以有多个变量更新,用逗号分隔。
在这里插入图片描述
for循环执行演示
请添加图片描述
🍓🍓例3:使用for语句实现求解1~100的累加和。

public class text1 {
    public static void main(String args[]) {
        int sum = 0;         // 保存总和
        // 设置循环初始化条件current,同时此变量作为累加操作使用
        // 每次执行循环体前都要进行循环判断(current <= 100)
        // 循环体执行完毕后会自动执行“current++”改变循环条件
        for (int current = 1; current <= 100; current++) {
            sum += current;    // 循环体中实现累加操作
        }
        System.out.println(sum);
    }
}

请添加图片描述
🍓🍓例4:输出乘法口诀表(循环嵌套)。

public class text1 {
    public static void main(String args[]) {
        for (int x = 1; x <= 9; x++) { // 控制循环的行数
            for (int y = 1; y <= x; y++) {// 控制列数
                System.out.print(x + "*" + y + "=" + (x * y) + "\t");
            }
            System.out.println();// 换行
        }
    }
}

请添加图片描述

跳转语句

🍓🍓正常情况下只要执行了循环,那么只要循环条件满足,循环体的代码就会一直执行,但是在程序之中也提供有两个循环停止的控制语句:continue(退出本次循环)、break(退出整个循环)。此类的语句在使用时往往要结合分支语句进行判断。
🍓🍓例: 观察break语句。

public class text1 {
    public static void main(String args[]) {
        for (int x = 0; x < 10; x++) {
            if (x == 3) {
                break; // 退出整个循环
            }
            System.out.print("x = " + x + "、");
        }
    }
}

请添加图片描述
在这里插入图片描述
🍓🍓例: 观察continue语句。

public class text1 {
    public static void main(String args[]) {
        for (int x = 0; x < 10; x++) {
            if (x == 3) {
                continue; // 之后的代码不执行,直接结束本次循环
            }
            System.out.print("x = " + x + "、");
        }
    }
}

请添加图片描述
在这里插入图片描述

## 数组
### 数组概述
为什么需要数组?
如果说现在要想定义100个整型变量,按照传统的思路,可能这样定义:
int i1,i2 ,... i100,一共写100个变量。

以上的形式的确可以满足技术要求,但是有一个问题,这100多个变量没有任何的逻辑的控制关系, 完全独立,就会出现对象不方便管理的情况,那么在这种情况下就可以利用 数组来解决此类问题。

为了存储多个数据值

什么是数组(Array)?
数组是用来存储同一种数据类型多个元素容器
容器:比如教室、衣柜、纸箱等,可以存放多个事物。

  • 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型引用数据类型
  • 创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。
  • 数组的长度一旦确定,就不能修改
  • 可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。
  • 数组的分类

    • 按照维度:一维数组、二维数组、三维数组、…
    • 按照元素的数据类型分:基本数据类型元素的数组、引用数据类型元素的数组(即对象数组)

一维数组

数组的声明
🍓🍓例如:

  • int[ ] array ;
  • double b[ ];
  • String[ ] str;

注意:Java语言中声明数组时 不能指定其长度(数组中元素的数), 例如: int a[5]; //非法

数据类型[ ] 数组名;
数据类型 数组名[ ];

数据类型即数组中存储元素的数据类型,可以是基本数据类型,也可以是引用数据类型;
[ ]表示数组;
数组名 数组的变量名,遵循标识符命名规范;
静态初始化:在 定义数组的 同时就为数组元素 分配空间 赋值

例如: int[ ] array = new int[ ]{3, 9, 8};
或int[ ]  array = {3, 9, 8};    (简化写法)
给出初始化值,由系统决定数组长度。
例如:
String names[ ] = new String[ ] {“李四光”, “茅以升”, “华罗庚”};
或String names[ ] = {“李四光”, “茅以升”, “华罗庚”};
new:创建数组的关键字,通过new开辟内存空间;

动态初始化:数组声明且为数组元素分配空间赋值的操作分开进行。
数组元素的引用
定义并用new为数组分配空间后,才可以引用数组中的每个元素;
数组元素的引用方式:数组名[数组元素下标]

  • 数组元素下标可以是整型常量整型表达式。如a[3] , b[i] , c[6*i];
  • 数组元素下标从0开始;长度为n的数组,合法下标取值范围: 0 —>n-1;
    int a[ ]=new int[3]; 可引用的数组元素为a[0]、a[1]、a[2]
  • 每个数组都有一个属性length指明它的长度;
    例如:a.length 指明数组a的长度(元素个数)
  • 数组一旦初始化,其长度是不可变的;

数组元素的默认初始值
数组是引用类型,数组一经分配空间,其中的每个元素就被隐式初始化(默认值)
请添加图片描述
内存的简化结构
请添加图片描述

二维数组

动态初始化:数据类型 数组名称 = new 数据类型行的个数

例如:int arr = new int3;

  • 定义了名称为arr的二维数组;
  • 二维数组中有3个一维数组;
  • 每一个一维数组中有2个元素;
  • 一维数组的名称分别为arr[0], arr[1], arr[2];
  • 给第一个一维数组,索引为1的元素,赋值78的写法是:arr0 = 78 ;

注意: 若定义二维数组int[][] arr = new int[3][];

  • 二维数组中有3个一维数组;
  • 每个一维数组都是默认初始化值null (数组本身为引用类型);
  • 可以对这三个一维数组分别进行初始化:
    arr[0] = new int[3]; arr[1] = new int[1]; arr[2] = new int[2] ;
  • int[][] arr = new int[][3]; //非法,声明时可以省略列数,不能省略行数

静态初始化:数据类型 数组名称 = new 数据类型 { {值,值,值…},{值,值,值…},… }

例如:int arr = new int { {3,8,2} , {2,7} , {9,0,1,6} };

  • 定义一个名称为arr的二维数组,二维数组中有三个一维数组;
  • 每一个一维数组中具体元素也都已初始化; 第一个一维数组 arr[0] = {3,8,2}; 第二个一维数组 arr[1] = {2,7}; 第三个一维数组 arr[2] = {9,0,1,6} ;
  • 第三个一维数组的长度表示方式:arr[2].length ;
  • 二维数组的长度(行的个数)表示方式:arr.length;

数组使用中常见异常

  • 数组索引值越界异常
  • 空指针异常

    Java标准输入输出

    🍓标准输出流System.out
    System.out是进行屏幕输出的操作对象,是一个PrintStream类的实例化对象,向标准输出设备输出数据,有2个常用的成员方法:

    public void print(参数):输出各种常见数据类型;

public void println(参数) :输出各种常见数据类型,并回车换行;

🍓标准输入流System.in (了解)

读取标准输入设备数据(一般是键盘),是InputStream类的实例化对象,常用的成员方法:
int read():从输入流中读取数据的一个字节,返回 0 到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1,说明没有读取到任何字节,读取结束。

System.in读入数据并不方便,我们通常使用java.util.Scanner类通过封装System.in实现读入数据,能够很方便的读入不同的数据类型。

🍓Scanner类——如何从键盘获取不同类型的变量

具体实现步骤:

1、导包 : import java.util.Scanner;
2、Scanner的实例化:Scanner scan = new
Scanner(System.in);

3、调用Scanner类的相关方法,来获取指定类型的变量;

Scanner类提供了以下常用方法用于读取数据:

boolean nextBoolean():读取下一个boolean数据;
byte nextByte():读取下一个byte数据 ;
short nextShort():读取下一个short数据 ;
int nextInt() :读取下一个double数据 ;
long nextLong() :读取下一个long数据 ;
float nextFloat() :读取下一个double数据;
double nextDouble() :读取下一个double数据;
String next() :读取下一个字符串数据 ;
String nextLine() :读取下一行数据;
void close():关闭Scanner;
相关文章
|
23天前
|
Java Maven
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
该博客文章介绍了如何使用Java Swing中的JFrame创建一个窗体来收集用户输入的内容,并提供了详细的实现步骤和完整代码示例。
使用java语言制作一个窗体(弹窗),用来收集用户输入的内容
|
11天前
|
算法 Java 开发者
Java 编程入门:从零到一的旅程
本文将带领读者开启Java编程之旅,从最基础的语法入手,逐步深入到面向对象的核心概念。通过实例代码演示,我们将一起探索如何定义类和对象、实现继承与多态,并解决常见的编程挑战。无论你是编程新手还是希望巩固基础的开发者,这篇文章都将为你提供有价值的指导和灵感。
|
12天前
|
存储 Java 程序员
Java中的集合框架:从入门到精通
【8月更文挑战第30天】在Java的世界里,集合框架是一块基石,它不仅承载着数据的存储和操作,还体现了面向对象编程的精髓。本篇文章将带你遨游Java集合框架的海洋,从基础概念到高级应用,一步步揭示它的奥秘。你将学会如何选择合适的集合类型,掌握集合的遍历技巧,以及理解集合框架背后的设计哲学。让我们一起探索这个强大工具,解锁数据结构的新视角。
|
15天前
|
Java 程序员 UED
Java中的异常处理:从入门到精通
【8月更文挑战第28天】在Java编程的世界里,异常处理是一块基石,它确保了程序的健壮性和可靠性。本文将通过深入浅出的方式,带你了解Java异常处理的基本概念、分类、以及如何有效地捕获和处理异常。我们将一起探索try-catch-finally结构的奥秘,并学习如何使用throws关键字声明方法可能会抛出的异常。此外,我们还会讨论自定义异常类的创建和使用,以及最佳实践。无论你是Java新手还是有一定经验的开发者,这篇文章都将为你提供宝贵的知识,帮助你编写出更加稳定和可靠的代码。
|
14天前
|
编解码 网络协议 Oracle
java网络编程入门以及项目实战
这篇文章是Java网络编程的入门教程,涵盖了网络编程的基础知识、IP地址、端口、通讯协议(TCP和UDP)的概念与区别,并提供了基于TCP和UDP的网络编程实例,包括远程聊天和文件传输程序的代码实现。
java网络编程入门以及项目实战
|
24天前
|
前端开发 IDE Java
"揭秘前端转Java的秘径:SpringBoot Web极速入门,掌握分层解耦艺术,让你的后端代码飞起来,你敢来挑战吗?"
【8月更文挑战第19天】面向前端开发者介绍Spring Boot后端开发,通过简化Spring应用搭建,快速实现Web应用。本文以创建“Hello World”应用为例,展示项目基本结构与运行方式。进而深入探讨三层架构(Controller、Service、DAO)下的分层解耦概念,通过员工信息管理示例,演示各层如何协作及依赖注入的使用,以此提升代码灵活性与可维护性。
33 2
|
11天前
|
Java 程序员 UED
Java 中的异常处理:从入门到精通
【8月更文挑战第31天】在Java编程的世界中,异常处理是保持应用稳定性的重要机制。本文将引导你理解异常的本质,学会如何使用try-catch语句来捕获和处理异常,并探索自定义异常类的魅力。我们将一起深入异常的世界,让你的代码更加健壮和用户友好。
|
11天前
|
Java 数据库连接 开发者
Java中的异常处理:从入门到精通
【8月更文挑战第31天】 在编程世界中,错误和异常就像是不请自来的客人,总是在不经意间打扰我们的程序运行。Java语言通过其异常处理机制,为开发者提供了一套优雅的“待客之道”。本文将带你走进Java异常处理的世界,从基础语法到高级技巧,再到最佳实践,让你的程序在面对意外时,也能从容不迫,优雅应对。
|
11天前
|
Java 开发者
Java 中的异常处理:从入门到精通
【8月更文挑战第31天】在Java的世界中,异常处理是保持程序健壮性的基石。本文将带你探索Java异常处理的奥秘,从基本的try-catch语句到深入理解自定义异常和最佳实践。你将学会如何优雅地处理错误,确保你的代码不仅能够面对意外情况,还能从中恢复。让我们一起开启这段旅程,掌握让程序更加稳定和可靠的技巧吧!
|
14天前
|
机器学习/深度学习 Java TensorFlow
深度学习中的图像识别:从理论到实践Java中的多线程编程入门指南
【8月更文挑战第29天】本文将深入探讨深度学习在图像识别领域的应用,从基础理论到实际应用案例,带领读者一步步理解如何利用深度学习技术进行图像识别。我们将通过一个简单的代码示例,展示如何使用Python和TensorFlow库实现一个基本的图像识别模型。无论你是初学者还是有一定经验的开发者,都能从中获得启发和学习。 【8月更文挑战第29天】在Java世界里,线程是程序执行的最小单元,而多线程则是提高程序效率和响应性的关键武器。本文将深入浅出地引导你理解Java多线程的核心概念、创建方法以及同步机制,帮助你解锁并发编程的大门。