一文搞懂 Java 基础:新手入门必备

目录

  • 📝 Java基础
    • Java起源
    • 第一个Java程序
    • 基础语法
      • Java标识符
      • Java变量
      • Java注释
      • Java数据类型
      • Java运算符
      • Java流程控制语句

📝 Java基础

Java起源

Java programming language具有大部分编程语言所共有的一些特征,被特意设计用于互联网的分布式环境。Java具有类似于C++语言的"形式和感觉",但它要比C++语言更易于使用,而且在编程时彻底采用了一种"以对象为导向"的方式。使用Java编写的应用程序,既可以在一台单独的电脑上运行,也可以被分布在一个网络的服务器端和客户端运行。

另外,Java还可以被用来编写容量很小的应用程序模块或者applet,做为网页的一部分使用。applet可使网页使用者和网页之间进行交互式操作,但 Applet 很早之前就被无情地拍死在了沙滩上。(已被弃用)

Java是Sun公司在1995年推出的,推出之后马上给互联网的交互式应用带来了新面貌。最常用的两种互联网浏览器软件中都包括一个Java虚拟机。几乎所有的操作系统中都增添了Java编译程序。后来 Sun 公司被 Oracle (甲骨文)公司收购,Java 也随之成为 Oracle 公司的产品。

Java分为三个体系:

  • JavaSE(J2SE)(Java2 Platform Standard Edition,java平台标准版)

  • JavaEE (J2EE) (Java 2 Platform,Enterprise Edition,java平台企业版)

  • JavaME (J2ME) (Java 2 Platform Micro Edition,java平台微型版)

Java的一些相关术语:

  • JDK(Java Development Kit)是用于开发 Java 应用程序的软件环境。里面包含运行时环境(JRE)和其他 Java 开发所需的工具,比如说解释器(java)、编译器(javac)、文档生成器(javadoc)等等。

  • JRE(Java Runtime Environment)是用于运行 Java 应用程序的软件环境。也就是说,如果只想运行 Java 程序而不需要开发 Java 程序的话,只需要安装 JRE 就可以了。

  • JVM (Java Virtual Machine) ,也就是 Java 虚拟机,由一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域等组成,屏蔽了不同操作系统(macOS、Windows、Linux)的差异性,使得 Java 能够“一次编译,到处运行”。

在这里插入图片描述

第一个Java程序

public class HelloWorld {public static void main(String[] args) {System.out.println("Hello World");}
}
//String args[] 与 String[] args 都可以执行,但推荐使用 String[] args,这样可以避免歧义.

java程序的执行基础命令的解析。 依次执行以下命令

javac HelloWord.java //先Java 源码编译成字节码
java HelloWord //  java 命令运行字节码

在这里提一下,参数args的作用:

参数args是Java编译器要求必须做的,用来存储命令行参数的。

在这里插入图片描述

  • 注意点

    1. Java对大小写特别敏感。A和a不相同。

    2. 类名,类名首字母大写,若是由若干单词组成,每个单词的首字母大写。HelloWord

    3. 方法名,**所有方法名以小写字母开头,如果方法名含有若干单词,则后面的每个单词首字母大写。**myAction

    4. 源文件名,源文件名必须与类名相同,文件名必须与public的类名相同。

    public class test{public static void main(String[] args){......}
    }该文件名需为test.java
    

    所有的Java程序都由 public static void main(String[] args)方法开始执行。

基础语法

Java标识符

简单来记,自己起了名字的都可以称为标识符,如类名,方法名,变量名。

命名规范(驼峰命名法)

  • 项目的命名:项目的命名全部小写

  • 包的命名:package 的名字由全部小写的字母组成,例如:com.test

  • 类名和接口名:每个单词首字母大写,其余小写,例如:public class MyClass{}

  • 方法名:方法的名字用一个小写字母开头,后面的单词用大写字母开头,例如:run(),getBalance()。

  • 变量名:变量的名字用一个小写字母开头,后面的单词用大写字母开头,例如:index,currentImage。

  • 常量名:基本数据类型的常量名使用全部大写,单词之间使用下划线分割。例如:public static final String GAME_COLOR=“RED”;

注意点:

  • 所有的标识符都应该以字母(A-Z 或者 a-z),美元符($)、或者下划线(_)开始

  • 首字符之后可以是字母(A-Z 或者 a-z),美元符($)、下划线(_)或数字的任何字符组合

  • 关键字不能用作标识符

  • 标识符是大小写敏感的

  • 合法标识符举例:age、$salary、_value、__1_value

  • 非法标识符举例:123abc、-salary

  • " " 尽量不要在代码中出现。(是由于在后面内部类中,编译后会出现 "尽量不要在代码中出现。(是由于在后面内部类中,编译后会出现 "尽量不要在代码中出现。(是由于在后面内部类中,编译后会出现符号)

命名时,尽量不要使用中文及拼音命名。😆😆😆

这里列举一些常见的Java关键字。

类别关键字说明
访问控制private私有的,表示方法或变量只对当前类可见。
protected受保护的,表示方法或变量对同一包内的类和所有子类可见。
public除了可以声明方法和变量(所有类可见),还可以声明类。main() 方法必须声明为 public。
default默认
类、方法和变量修饰符abstract声明抽象类,抽象方法
class
enum定义一组固定的常量(枚举)
extends一个类是从另一个类或接口继承的。
final最终值、不可改变的.
final 变量:表示一个常量,一旦被赋值,其值就不能再被修改。
final 方法表示一个不能被子类重写的方法。
final 类表示一个不能被继承的类。这在设计类时,确保其不会被其他类继承时非常有用。
String类就是final的。
implements实现(接口)
interface用于声明接口。会定义一组方法的签名(即方法名、参数列表和返回值类型),但没有方法体。其他类可以实现接口,并提供方法的具体实现。
native本地、原生方法(非 Java 实现),本地方法是指在 Java 代码中声明但在本地代码(通常是 C 或 C++ 代码)中实现的方法,它通常用于与操作系统或其他本地库进行交互。
public native void Method();
new创建一个新的对象。
static静态,表示该变量或方法是是静态方法或静态变量
strictfp严格浮点、精准浮点,通常用于修饰一个方法,用于限制浮点数计算的精度和舍入行为。
synchronized线程、同步,用于指定多线程代码中的同步方法。变量或代码块。
transient修饰的字段不会被序列化。
volatile保证不同线程对它修饰的变量进行操作时的可见性,即一个线程修改了某个变量的值,新值对其他线程来说是立即可见的。
程序控制语句break跳出循环,程序将立即跳出当前循环或 switch 语句,继续执行紧跟在循环或 switch 语句后面的代码。
case定义一个值以供 switch 选择
continue继续,用于继续下一个循环,可以在指定条件下跳过其余代码。
do运行,通常和 while 关键字配合使用,do 后紧跟循环体。不同之处在于 do-while 循环会先执行循环体中的代码,然后再检查循环条件。因此,do-while 循环至少会执行一次循环体中的代码
else否则
for循环
if如果,如果条件为真,则执行对应代码。
instanceof实例,用于判断对象是否属于某个类型或者子类的实例。
return返回,从方法中返回一个值或终止方法的执行
return 语句可以将方法的计算结果返回给调用者,或者在方法执行到某个特定条件时提前结束方法。
switch根据值选择执行,switch 语句通常与 case 和 default 一起使用。每个 case 子句表示一个可能的值和对应的代码块,而 default 子句用于处理不在 case 子句中的值。
while循环
错误处理assert断言表达式是否为真
catch捕捉异常,在 try 块中可能会抛出异常,而在 catch 块中可以捕获这些异常并进行处理。catch 块可以有多个,每个 catch 块可以捕获特定类型的异常。
finally和 try-catch 配合使用,表示无论是否处理异常,总是执行 finally 块中的代码。
throw抛出一个异常对象,主动抛出。
throws声明一个异常可能被抛出
try捕获异常
包相关import引入,用于导入对应的类或者接口。
package
基本类型boolean布尔型,即真或假
byte字节型,用于表示一个 8 位(1 字节)有符号整数。它的值范围是 -128(-2^7)到 127(2^7 - 1)。
charchar 类型的变量可以存储任意的 Unicode 字符,可以使用单引号将字符括起来来表示。char c = ‘A’;
double双精度浮点。
在 Java 中,浮点数默认是 double 类型,如果要使用 float 类型的数据,需要在数字后面加上一个 f 或者 F,表示这是一个 float 类型的字面量。另外,也可以使用科学计数法表示浮点数,例如 1.23e-4 表示 0.000123。
float单精度浮点
int整型
long长整型
short短整型,占用 2 个字节(16 位)的内存空间。
变量引用super父类、超类,调用父类的方法或者字段。
this本类,用于在方法中引用当前对象。
void无返回值
保留关键字goto是关键字,但不能使用
const是关键字,但不能使用,在 Java 中可以使用 public static final 三个关键字的组合来达到常量的效果。

Java 的 null 不是关键字,类似于 true 和 false,它是一个字面常量,不允许作为标识符使用。

Java变量

变量就是指代在内存中开辟的存储空间,用于存放运算过程中需要用到的数据。

  • 声明变量

    变量必须先声明后使用,相同的变量只能声明一次。

    变量类型 变量名=变量值int x=1;int y=10,z=10;
    

    未经声明的变量不能使用,直接使用会有编译错误。

    在这里插入图片描述
    同时声明变量后,该变量只能存储制定好的数据类型的的数据,否则会产生编译错误。
    在这里插入图片描述

  • 变量的命名

    命名规则:

    1. 满足标识符的命名规则;

    2. 符合驼峰法命名规范;

    3. 尽量简单,做到见名知意;

  • 变量的类型

    成员变量

    • 成员变量定义在类中,在整个类中都可以被访问。

    • 成员变量随着对象的建立而建立,随着对象的消失而消失,存在于对象所在的堆内存中。

    • 成员变量有默认初始化值。

    局部变量

    • 局部变量只定义在局部范围内,如:函数内,语句内等,只在所属的区域有效。

    • 局部变量存在于栈内存中,作用的范围结束,变量空间会自动释放。

    • 局部变量没有默认初始化值

    静态变量

    • 静态变量随着类的加载而存在,随着类的消失而消失。

    • 静态变量可以被对象调用,还可以被类名调用。

    • 静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。

    在使用变量时需要遵循的原则为:就近原则. 首先在局部范围找,有就使用;接着在成员位置找。

    class Test{private String name;//成员变量,实例变量private int age;static String country="CN";//静态变量public Test(){};//name,age 为成员变量public Test(String name,int age){this.name=name;this.age=age;}public void start(){String tests="hello"; //局部变量System.out.println("姓名:"+name +" 年龄:"+age);}//i为局部变量for(int i=0;i<36;i++){......}}public class StaticDemo{public static void main(String[]args){Test test = new Test();System. out.println(test.country);//可以用类名直接调用System. out.println(Test.country);}
    }
    
    成员变量局部变量静态变量
    定义位置在类中,方法外方法中,或者方法的形式参数在类中,方法外
    初始化值有默认初始化值无,先定义,赋值后才能使用有默认初始化值
    调用方式对象调用对象调用,类名调用
    存储位置堆中栈中方法区
    生命周期与对象共存亡与方法共存亡与类共存亡
    别名实例变量类变量

    初始化值如下图:

    数据类型默认值大小
    booleanfalse1 比特
    char‘\u0000’2 字节
    byte01 字节
    short02 字节
    int04 字节
    long0L8 字节
    float0.0f4 字节
    double0.08 字节

Java注释

在这里插入图片描述

  • 单行注释

    单行注释通常用于解释方法内某单行代码的作用。

    public void method() {// age 用于表示年龄int age = 18; 
    }// ~~int age = 18; //age 用于表示年龄~~
    //注释写在行尾的话,是不符合阿里巴巴的开发规约的。咋就是说,事真多
    
  • 多行注释

    多行注释通常用于解释一段代码的作用,以 /* 开始,以 */ 结束。(一般用的很少,都用这了,不如选择用文档注释哈哈。)

    /*
    age 用于表示年纪
    name 用于表示姓名
    */
    int age = 18;
    String name = "alice";
    
  • 文档注释

    文档注释可用在三个地方,类、字段和方法,也是解释一段代码的作用。

    /*** 测试类*/
    public class Test {/*** 姓名*/private int age;/*** main 方法作为程序的入口** @param args 参数*/public static void main(String[] args) {}
    }
    
    • 创建文档注释

      1.在终端找到对应文件的路径。

      2.执行javadoc命令,

      javadoc Test.java -encoding utf-8
      

      在这里插入图片描述

      3.生成了许多的代码文件,通过浏览器打开看文档注释。

      在这里插入图片描述
      在这里插入图片描述

    文档注释注意点:

    • javadoc 命令只能为 public 和 protected 修饰的字段、方法和类生成文档。default 和 private 修饰的字段和方法的注释将会被忽略掉。

    • 文档注释中可以插入一些 @ 注解,比如说 @see 引用其他类,@version 版本号,@param 参数标识符,@author 作者标识符,@deprecated 已废弃标识符等等。

  • 注释规约

    1. 类、字段、方法必须使用文档注释,不能使用单行注释和多行注释。因为注释文档在 IDE 编辑窗口中可以悬浮提示,提高编码效率。

    2. 所有的抽象方法(包括接口中的方法)必须要用 Javadoc 注释、除了返回值、参数、 异常说明外,还必须指出该方法做什么事情,实现什么功能。

    3. 所有的类都必须添加创建者和创建日期。

    4. 所有的枚举类型字段必须要有注释,说明每个数据项的用途。

    5. 代码修改的同时,注释也要进行相应的修改。

Java数据类型

在这里插入图片描述

基本数据类型

    1. 布尔型

      布尔(boolean)仅用于存储两个值:true 和 false,也就是真和假,通常用于条件的判断。

      boolean flag = true;
      
    2. char

      char 用于表示 Unicode 字符,占 16 位(2 字节)的存储空间,取值范围为 0 到 65,535。

      char n = 'A';
      //字符字面量应该用单引号('')包围,而不是双引号(""),双引号表示字符串变量。
      

      在这里插入图片描述

    3. byte

      一个字节可以表示 2^8 = 256 个不同的值。由于 byte 是有符号的,它的值可以是负数或正数。(一般在网络传输过程中,采用字节来作为数据的传输方式。)

      byte b = 1;
      byte a = -1;
      
    4. short

      short也是有符号的,可以表示负数或正数,其取值范围在 -32,768 和 32,767 之间。

      short s = 32767;
      
    5. int

      最为常用的整型类型,int 的取值范围在 -2,147,483,648(-2 ^ 31)和 2,147,483,647(2 ^ 31 -1)(含)之间。

      int i = 2147483647;
      

      为什么 32 位的有符号整数的取值范围是从 -2^31 到 2^31 - 1 呢?

      这是因为其中一位用于表示符号(正或负),剩下的 31 位用于表示数值,这意味着其范围是 -2,147,483,648(即 -2^31)到 2,147,483,647(即 2^31 - 1)。

      在二进制系统中,每个位(bit)可以表示两个状态,通常是 0 和 1。对于 32 位得正二进制数,除去符号位,从右到左的每一位分别代表 2^0, 2^1, 2^2, …, 2^30,这个二进制数转换为十进制就是 2^0 + 2^1 + 2^2 + … + 2^30,也就是 2,147,483,647.

    6. long

      long 型变量在声明的时候,末尾要带上大写的“L”,以便于和int 区分。

      long取值范围为 -9,223,372,036,854,775,808(-2^63) 和 9,223,372,036,854,775,807(2^63 -1)(含)之间。

      long l = 500000000000L;
      

      在这里插入图片描述

    7. float

      float 是单精度的浮点数(单精度浮点数的有效数字大约为 6 到 7 位),32 位(4 字节).

      float型变量在声明的时候,末尾要带上小写的“f”。

      float a = 3.1415f;
      
    8. double

      double 是双精度浮点数(双精度浮点数的有效数字大约为 15 到 17 位),占 64 位(8 字节).

      double myDouble = 3.141592653589793;
      

      在这里插入图片描述

      double float 都不适合用于精确的数值,例如金额,交易这种。 一般采用 BigDecimal类来避免浮点数舍入误差。BigDecimal 可以表示一个任意大小且精度完全准确的浮点数。 如果是精确到小数点两位这种(0.01),可以乘以100,转换成整型处理。

基本数据类型转换

Java 提供了以下包装器类型,与基本数据类型一一对应:

  • Byte(对应 byte)

  • Short(对应 short)

  • Integer(对应 int)

  • Long(对应 long)

  • Float(对应 float)

  • Double(对应 double)

  • Character(对应 char)

  • Boolean(对应 boolean)

1、自动类型转换

自动类型转换(自动类型提升)是 Java 编译器在不需要显式转换的情况下,将一种基本数据类型自动转换为另一种基本数据类型的过程。

一般情况下,自动类型转换只发生在兼容类型之间.(较小的数据类型转换成较大的数据类型,或者精度值较低的数据类型转换为较高的数据类型,当然也存在大类型转换为小类型的,只要也在小类型的取值范围内)

byte -> short -> int -> long -> float -> double
char -> int -> long -> float -> double//示例
byte b = 50;
b *= 2;//true 
b = (byte) b*2;//true 强制类型转换
b = b * 2;//false

自动类型转换规则(隐式提升):

  • 算术运算

    如果任一操作数是 double 类型,其他操作数将被转换为 double 类型。

    否则,如果任一操作数是 float 类型,其他操作数将被转换为 float 类型。

    否则,如果任一操作数是 long 类型,其他操作数将被转换为 long 类型。

    否则,所有操作数将被转换为 int 类型。

  • 方法调用

    当方法参数类型与传递的参数类型不一致时,也会发生隐式提升。如果方法期望较高精度的类型,而传递了较低精度的类型,传递的参数会被提升。


2、强制类型转换

强制类型转换是 Java 中将一种数据类型显式转换为另一种数据类型的过程。与自动类型转换不同,强制类型转换需要程序员显式地指定要执行的转换。

一般情况下,将较大数据类型转换为较小数据类型,或者件字符类型转换为数值类型都需要强制类型转换。需要注意的是,强制类型转换可能会导致数据丢失或精度降低,因为目标类型可能无法容纳原始类型的所有可能值。

double -> float -> long -> int -> char -> short -> byte//示例
double d = 40.999090;
int a = (int) d ;//a = 40//示例:int 转换 char
//1.强制性类型转换
int test = 65;
char charTest = (char) test;
//2.利用Character.forDigit()方法将整型 int 转换为字符 char,参数 radix 为基数,十进制为 10,十六进制为 16.
int test1 = 1;
int radix = 10;
char charTest1 = Character.forDigit(test1,radix);
//3.toString()方法int test2 = 1;char charTest2 = Integer.toString(test2);// char 转换 intint a = 'a';int a = '1';//a=49int b = Character.getNumericValue('1'); // b=1int c = Character.digit('1',10); // c=1int d = '1' - '0'; // d =1

基本数据类型缓存池

基本数据类型的包装类除了 Float 和 Double 之外,其他六个包装器类(Byte、Short、Integer、Long、Character、Boolean)都有常量缓存池。

  • Byte:-128~127,也就是所有的 byte 值

  • Short:-128~127

  • Long:-128~127

  • Character:\u0000 - \u007F

  • Boolean:true 和 false

Integer a = new Integer(1);
Integer b = new Integer(1);
System.out.println(a == b);//falseInteger a1 =Integer.valueOf(1);
Integer b1 =Integer.valueOf(1);
System.out.println(a1 == b1);//trueInteger a2 =Integer.valueOf(288);
Integer b2 =Integer.valueOf(288);
System.out.println(a2 == b2);//false/**
Integer 类内部中内置了 256 个 Integer 类型的缓存数据,
当使用的数据范围在 -128~127 之间时,会直接返回常量池中数据的引用,而不是创建对象,
超过这个范围时会创建新的对象。当我们通过 Integer.valueOf() 方法获取整数对象时,会先检查该整数是否在 IntegerCache
如果在,则返回缓存中的对象,否则创建一个新的对象并缓存起来。
需要注意的是,如果使用 new Integer() 创建对象,即使值在 -128 到 127 范围内,
也不会被缓存,每次都会创建新的对象。因此,推荐使用 Integer.valueOf() 方法获取整数对象
**/

Java运算符

在这里插入图片描述
在这里插入图片描述

1、算术运算符

算术运算符包括常见的加法(+)、减法(-)、乘法(*)、除法(/),还有取余(模)运算符(%)。

在这里插入图片描述

int a = 1;
int b = 2;
System.out.println(a + b) // 3 整型与整型的算术运算结果都是整型2、
System.out.println(b - a) // 1
System.out.println(a * b) // 2
System.out.println(b / a) // 2
System.out.println(b % a) // 0double c = 5.0
System.out.println(c % b) // 1.0//整数除以0的情况
System.out.println(1/0) //程序抛出异常 //浮点数除以0的情况
System.out.println(5.0/0.0) // Infinity(无穷大)
System.out.println(0.0/0.0) // NaN

2、关系运算符

关系运算符用来比较两个操作数,返回结果为 true 或者 false。

在这里插入图片描述

int a = 1, b = 2;
System.out.println(a == b); // false
System.out.println(a != b); // true
System.out.println(a > b); // false
System.out.println(a < b); // true
System.out.println(a >= b); // false
System.out.println(a <= b); // true

3、位运算符

在Java中,位运算符用于直接操作整数类型的数据(如 intlong)的二进制表示。一般情况下,我们所使用的都是十进制的数值,在程序操作时,都需要转换为二进制数值。

int a = 5;   // 0101

在这里插入图片描述

按位与(并)(&):按位与操作会将两个整数的每一位进行与运算,只有当对应的位都为1时,结果位才为1。

int a = 5;   // 0101
int b = 3;   // 0011
int result = a & b; // 0001 -> 1

按位或(|):按位或操作会将两个整数的每一位进行或运算,只要对应的位有一个为1,结果位就为1。

int a = 5;   // 0101
int b = 3;   // 0011
int result = a | b; // 0111 -> 7

按位异或(^):按位异或操作会将两个整数的每一位进行异或运算,当对应的位不相同时,结果位为1。

int a = 5;   // 0101
int b = 3;   // 0011
int result = a ^ b; // 0110 -> 6

按位非(~):按位非操作会将整数的每一位取反,即0变1,1变0。

int a = 5;   // 0101
int result = ~a; // 1010 -> -6
/**
(在32位整数中为11111111111111111111111111111010) -> -6
11111111 11111111 11111111 11111010
取反得到 00000000 00000000 00000000 00000101
加一得到 00000000 00000000 00000000 00000110 -> 6
**/

在这里插入图片描述

右移(>>):将一个数的所有二进制位向右移动指定的位数,左边用符号位填充(即正数填充0,负数填充1),右移一位相当于除以2。

int a = 5;   // 0101
int result = a >> 1; // 0010 -> 2  5/2^1

无符号右移(>>>):将一个数的所有二进制位向右移动指定的位数,左边用0填充,不考虑符号位。

int a = -5;   // 11111111 11111111 11111111 11111011
int result = a >>> 1; // 01111111 11111111 11111111 11111101 -> 2147483645

左移(<<):将一个数的所有二进制位向左移动指定的位数,右边用0填充,左移一位相当于乘以2。

int a = 5;   // 0101
int result = a << 1; // 1010 -> 10 5*2^1

4、逻辑运算符(布尔运算符)

在这里插入图片描述

int a=10;
int b=5;
int c=20;
System.out.println(a<b&&a<c);//false && true = falseSystem.out.println(a>b||a<c);//true || true = true

单逻辑与运算符(&)和单逻辑或运算符(|):不管第一个条件为 true 还是 false,依然会检查第二个。

5、赋值运算符

在这里插入图片描述

int a=10;
int b=20;
a+=4;//a=a+4 (a=10+4)  
b-=4;//b=b-4 (b=20-4)

= 右侧的算术表达式默认为 int 类型,左侧是 short 类型的时候需要进行强转。

在这里插入图片描述

short a = 10;
short b = 10;
//a+=b;//a=a+b internally so fine
a = (short)(a + b);

6、三元运算符
三元运算符(也称为条件运算符)是一种简洁的条件语句,用于根据布尔表达式的结果选择值。

result = condition ? value1 : value2;

注意:

  • value1value2 的类型必须兼容或可以进行隐式转换。例如,不能返回一个整数和一个字符串。

  • 三元运算符的优先级较低,因此在复杂表达式中可能需要使用括号来明确运算顺序。

int a = 10;
int b = 20;
int max = (a > b) ? a : b;
System.out.println( max); // 20

Java流程控制语句

1、if 相关语句

  • if 语句

    if(布尔表达式){  
    // 如果条件为 true,则执行这块代码
    } 
    //如果条件为false,则跳过if中的代码,执行后续的的代码
    .....
    
  • if - else 语句

    if(布尔表达式){  
    // 条件为 true 时执行的代码块
    }else{  
    // 条件为 false  时执行的代码块
    }
    
  • if - else-if 语句

    if(条件1){  
    // 条件1 为 true 时执行的代码
    }else if(条件2){  
    // 条件2 为 true 时执行的代码
    }  
    else if(条件3){  
    // 条件3 为 true 时执行的代码
    }  
    ...  
    else{  
    // 以上条件均为 false 时执行的代码
    }
    

    在这里插入图片描述

  • if 嵌套语句

if(外侧条件){    // 外侧条件为 true 时执行的代码 if(内侧条件){  // 内侧条件为 true 时执行的代码}    
}

2、switch 语句

switch语句用于根据多个条件执行一条语句,类似于if-else-if阶梯语句。

switch(变量) {    
case 可选值1:    // 可选值1匹配后执行的代码;    break;  // 该关键字是可选项
case 可选值2:    // 可选值2匹配后执行的代码;    break;  // 该关键字是可选项
......    default: // 该关键字是可选项     // 所有可选值都不匹配后执行的代码 
}

switch中变量类型可以为以下的变量类型:

1、byte、short、int、char 基本数据类型

2、String 字符串类型

3、枚举类型

4、包装类: Byte、Short、Integer、Character

但 switch 不支持 long、float、double 类型,这是因为:

  • long 是 64 位整数,不在 switch 一开始设计的范围内(32 位的 int 在大多数情况下就够用了)。

  • float 和 double 是浮点数,浮点数的比较不如整数简单和直接,存在精度误差。

  • switch表达式可以有一个或多个case值。不允许使用变量作为case值。值类型和变量类型必须是一致的。

  • 每个case值必须是唯一的,重复的case值会导致编译错误。

  • 每个case语句可以包含一个可选的break语句。当控制流程到达break语句时,会跳出switch语句。如果没有break语句,将会继续执行后续所有的case语句(不论它们是否与表达式的值匹配。)。

    
    public class SwitchExample {public static void main(String[] args) {int day = 3;switch (day) {case 1:System.out.println("Monday");case 2:System.out.println("Tuesday");case 3:System.out.println("Wednesday");case 4:System.out.println("Thursday");case 5:System.out.println("Friday");case 6:System.out.println("Saturday");case 7:System.out.println("Sunday");default:System.out.println("Invalid day");}}
    }
    /**
    在该实例中,因为没有 break 语句的情况下,
    程序会继续执行后续的所有 case 语句,
    不论它们是否与表达式的值匹配。
    程序最终会输出 "Thursday"、"Friday"、"Saturday"、
    "Sunday" 和 "Invalid day"。
    **/
    
  • switch语句可以有一个可选的default标签,用于处理所有未匹配到的情况。

在这里插入图片描述

Switch 枚举示例:

public class SwitchEnumExample {public enum Day {MONDAY, TUESDAY,WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}public static void main(String[] args) {Day day = Day.WEDNESDAY;switch (day) {case MONDAY:System.out.println("Today is Monday");break;case TUESDAY:System.out.println("Today is Tuesday");break;case WEDNESDAY:System.out.println("Today is Wednesday");break;case THURSDAY:System.out.println("Today is Thursday");break;case FRIDAY:System.out.println("Today is Friday");break;case SATURDAY:System.out.println("Today is Saturday");break;case SUNDAY:System.out.println("Today is Sunday");break;default:System.out.println("Invalid day");break;}}
}//Today is Wednesday

3、for 循环语句

1、for循环

  • 初始变量:循环开始执行时的初始条件。

  • 条件:循环每次执行时要判断的条件,如果为 true,就执行循环体;如果为 false,就跳出循环。当然了,条件是可选的,如果没有条件,则会一直循环。

    //死循环
    for(;;){System.out.println("......");
    }
    
  • 循环体:循环每次要执行的代码块,直到条件变为 false。

  • 自增/自减:初始变量变化的方式。

for(初始变量;条件;自增/自减){  
// 循环体
}

2、for-each 循环(增强型for循环)

for-each 循环通常用于遍历数组和集合。

for(元素类型 元素 : 数组或集合){  
// 要执行的代码
}  //示例
public class ForEachExample {public static void main(String[] args) {int[] numbers = {1, 2, 3, 4, 5};for (int number : numbers) {System.out.println(number);}}
}
💢
break 关键字通常用于中断循环或 switch 语句,它在指定条件下中断程序的当前流程。如果是内部循环,则仅中断内部循环。
public class BreakExample {public static void main(String[] args) {for (int i = 1; i <= 3; i++) {System.out.println("Outer loop iteration: " + i);for (int j = 1; j <= 2; j++) {System.out.println("    Inner loop iteration: " + j);if (j == 2) {break;  // 中断内部循环}}}}
}
/**
Outer loop iteration: 1Inner loop iteration: 1Inner loop iteration: 2
Outer loop iteration: 2Inner loop iteration: 1Inner loop iteration: 2
Outer loop iteration: 3Inner loop iteration: 1Inner loop iteration: 2
**/
/**
内部循环在 j 等于 2 时会中断,
但外部循环不受影响,继续执行下一次迭代。
**/

4、while循环相关语句

1、while循环

while(条件){  
//循环体  
}

2、do-while循环

do{  
// 循环体
}while(条件);

在这里插入图片描述

💡
continue 关键字用于立即结束当前循环的本次迭代,并继续执行下一次循环的开始部分。
for (int i = 1; i <= 10; i++) {if (i == 5) {// 使用 continue 关键字continue;// 5 将会被跳过}System.out.println(i);
}

Java 中的 continue; 语句表示跳过当前循环的剩余部分,并开始下一次循环。它必须是循环体内的最后一条语句,不能在它之后有其他代码。

//示例:
public class WhileContinueExample {public static void main(String[] args) {int i = 1;while (i <= 10) {if (i == 5) {i++; // 在 continue 前增加 i 的值continue;}System.out.println(i);i++; // 移至 if 之后,确保在 continue 后也会执行}}
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/47319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《算法笔记》总结No.10——链表

从第10期破例插叙一期单链表的实现&#xff0c;这个东东相当重要&#xff01;考研的同学也可以看&#xff1a;相较于王道考研的伪码不太相同&#xff0c;专注于可以运行。如果是笔试中的伪码&#xff0c;意思正确即可~ 注&#xff1a;博主之前写过一个版本的顺序表和单链表的C实…

Jolt路线图

1. 引言 a16z crypto团队2024年7月更新了其Jolt路线图&#xff1a; 主要分为3大维度&#xff1a; 1&#xff09;链上验证维度&#xff1a; 1.1&#xff09;Zeromorph&#xff1a;见Aztec Labs团队2023年论文 Zeromorph: Zero-Knowledge Multilinear-Evaluation Proofs from…

视觉巡线小车——STM32+OpenMV

系列文章目录 第一章&#xff1a;视觉巡线小车——STM32OpenMV&#xff08;一&#xff09; 第二章&#xff1a;视觉巡线小车——STM32OpenMV&#xff08;二&#xff09; 第三章&#xff1a;视觉巡线小车——STM32OpenMV&#xff08;三&#xff09; 第四章&#xff1a;视觉巡…

【过题记录】 7.21

Mad MAD Sum 算法&#xff1a;思维&#xff0c;前缀最大值 模拟一下他的运行过程就会发现&#xff0c;两次之后整个数组就固定了&#xff0c;之后每次都是每个数往后移动一位&#xff0c;可以模拟两次之后计算每个数的存活轮数&#xff0c;计算贡献。 #include<bits/stdc.h…

JavaSE 知识梳理(下)

1.继承 继承是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特 性 的基础上进行扩展&#xff0c;增加新功能&#xff0c;这样产生新的类&#xff0c;称派生类。 继承主要解决的问题是&#xff1a;共性的抽取&#xff0c;实现代码复用&a…

【D3.js in Action 3 精译_018】2.4 向选择集添加元素

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可视化最佳实践&#xff08;下&#xff09;1.4 本章小结 第二章…

【PyTorch】图像二分类项目-部署

【PyTorch】图像二分类项目 【PyTorch】图像二分类项目-部署 在独立于训练脚本的新脚本中部署用于推理的模型&#xff0c;需要构造一个模型类的对象&#xff0c;并将权重加载到模型中。操作流程为&#xff1a;定义模型--加载权重--在验证和测试数据集上部署模型。 import torch…

基于PSO算法优化PID参数的一些问题

目录 前言 Q1&#xff1a;惯性权重ω如何设置比较好&#xff1f;学习因子C1和C2如何设置&#xff1f; Q2&#xff1a;迭代速度边界设定一定能够遍历&#xff08;/覆盖&#xff09;整个PID参数二维空间范围吗&#xff1f;还是说需要与迭代次数相关&#xff1f;迭代次数越高&a…

MATLAB图像处理分析基础(一)

一、引言 MATLAB软件得到许多数字图像处理学生、老师和科研工作者的喜爱&#xff0c;成为数字图像处理领域不可或缺的工具之一&#xff0c;其与其他软件相比有以下诸多显著优点。首先&#xff0c;MATLAB 拥有强大的内置函数库&#xff0c;涵盖了图像读取、显示、处理及分析的全…

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(九)-无人机区域地面探测与避让(DAA)

引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及A2X&#xff08;Aircraft-to-Everything&#xff09;服务的支持。 3GPP TS 23.256 技术规范&#xff1a; 【免费】3GPPTS23.256技术报告-无人机系…

ESP8266模块(2)

实例1 查看附近的WiFi 步骤1&#xff1a;进入AT指令模式 使用USB转串口适配器将ESP8266模块连接到电脑。打开串口终端软件&#xff0c;并设置正确的串口和波特率&#xff08;通常为115200&#xff09;。输入以下命令并按回车确认&#xff1a; AT如果模块响应OK&#xff0c;…

【计算机网络】0 课程主要内容(自顶向下方法,中科大郑烇、杨坚)(待)

1 教学目标 掌握计算机网络 基本概念 工作原理 常用技术 为将来学习、应用和研究计算机网络打下坚实基础 2 课程主要内容 1 计算机网络和互联网2 应用层3 传输层4 网络层&#xff1a;数据平面5 网络层&#xff1a;控制平面6 数据链路层和局域网7 网络安全8 无线和移动网络9 多…

构建gitlab远端服务器(check->build->test->deploy)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言构建gitlab远端服务器一、步骤一:搭建gitlab的运行服务器【运维】1. 第一步:硬件服务器准备工作(1)选择合适的硬件和操作系统linux(2)安装必…

Learning vtkjs之WarpScalar

过滤器 WarpScalar 介绍 先看一个官方的一句话介绍&#xff1a; vtkWarpScalar - deform geometry with scalar data vtkWarpScalar - 使用标量数据变形几何体 详细介绍 vtkWarpScalar is a filter that modifies point coordinates by moving points along point normals by…

spss数据分析是什么 怎么下载spss

什么是SPSS SPSS是社会统计科学软件包的简称&#xff0c; 其官方全称为IBM SPSS Statistics。SPSS软件包最初由SPSS Inc.于1968年推出&#xff0c;于2009年被IBM收购&#xff0c;主要运用于各领域数据的管理和统计分析。作为世界社会科学数据分析的标准&#xff0c;SPSS操作操作…

C++合作开发项目:美术馆1.0

快乐星空MakerZINCFFO 合作入口&#xff1a;CM工作室 效果图&#xff1a; 代码&#xff1a; &#xff08;还有几个音乐&#xff01;&#xff09; main.cpp #include <bits/stdc.h> #include <windows.h> #include <conio.h> #include <time.h> #in…

《数据结构》--顺序表

C语言语法基础到数据结构与算法&#xff0c;前面已经掌握并具备了扎实的C语言基础&#xff0c;为什么要学习数据结构课程&#xff1f;--我们学完本章就可以实践一个&#xff1a;通讯录项目 简单了解过后&#xff0c;通讯录具备增加、删除、修改、查找联系人等操作。要想实现通…

Python学习笔记—100页Opencv详细讲解教程

目录 1 创建和显示窗口... - 4 - 2 加载显示图片... - 6 - 3 保存图片... - 7 - 4 视频采集... - 8 - 5视频录制... - 11 - 6 控制鼠标... - 12 - 7 TrackBar 控件... - 14 - 8.RGB和BGR颜色空间... - 16 - 9.HSV和HSL和YUV.. - 17 - 10 颜色空间的转化... - 18 - …

数据结构——栈的实现(java实现)与相应的oj题

文章目录 一 栈栈的概念:栈的实现&#xff1a;栈的数组实现默认构造方法压栈获取栈元素的个数出栈获取栈顶元素判断当前栈是否为空 java提供的Stack类Stack实现的接口&#xff1a; LinkedList也可以当Stack使用虚拟机栈&#xff0c;栈帧&#xff0c;栈的三个概念 二 栈的一些算…

JetBrains IDE 使用git进行多人合作开发教程

以下DEMO可以用于多人共同开发维护一个项目时&#xff0c;使用Git远程仓库的实践方案 分支管理 dev&#xff1a;开发分支test&#xff1a;测试分支prod&#xff1a;生成分支 个人开发也最起码有一个masterdev&#xff0c;作为主分支和当前开发分支。master永远是稳定版本&am…