分类 JAVA 下的文章

下面是Java语言支持的赋值运算符:

操作符描述例子
=简单的赋值运算符,将右操作数的值赋给左侧操作数C = A + B将把A + B得到的值赋给C
+ =加和赋值操作符,它把左操作数和右操作数相加赋值给左操作数C + = A等价于C = C + A
- =减和赋值操作符,它把左操作数和右操作数相减赋值给左操作数C - = A等价于C = C - A
* =乘和赋值操作符,它把左操作数和右操作数相乘赋值给左操作数C = A等价于C = C A
/ =除和赋值操作符,它把左操作数和右操作数相除赋值给左操作数C / = A,C 与 A 同类型时等价于 C = C / A
(%)=取模和赋值操作符,它把左操作数和右操作数取模后赋值给左操作数C%= A等价于C = C%A

switch case 语句

判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

语法

switch case 语句语法格式如下:

switch(expression){ 
   case value : 
      //语句 break; 
    //可选 case value : 
       //语句 break; 
    //可选 
       //你可以有任意数量的case语句 
    default : //可选 
     //语句 
}

switch case 语句有如下规则:

  • switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面量。
  • switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。
  • case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字面常量。
  • 当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。
  • 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须
  • 包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。
  • switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分支(可以在任何位置,但建议在最后一个)。default 在没有 case 语句的值和变量值相等的时候执行。default 分支不需要 break 语句。

switch注意事项

  • switch case 执行时,一定会先进行匹配,匹配成功返回当前 case 的值,再根据是否有 break,判断是否继续输出,或是跳出判断。
  • 如果 case 语句块中没有 break 语句时,JVM 并不会顺序输出每一个 case 对应的返回值,而是继续匹配,匹配不成功则返回默认 case。
  • 如果 case 语句块中没有 break 语句时,匹配成功后,从当前 case 开始,后续所有 case 的值都会输出。
  • 如果当前匹配成功的 case 语句块没有 break 语句,则从当前 case 开始,后续所有 case 的值都会输出,如果后续的 case 语句块有 break 语句则会跳出判断。

Java 条件语句 - if...else

Java 中的条件语句允许程序根据条件的不同执行不同的代码块。

一个 if 语句包含一个布尔表达式和一条或多条语句。

语法

if 语句的语法如下:

if(布尔表达式)
{
    //如果布尔表达式为true将执行的语句
}

如果布尔表达式的值为 true,则执行 if 语句中的代码块,否则执行 if 语句块后面的代码。

if...else语句

if 语句后面可以跟 else 语句,当 if 语句的布尔表达式值为 false 时,else 语句块会被执行。

语法

if…else 的用法如下:

if(布尔表达式){ 
    //如果布尔表达式的值为true 
}else{ 
    //如果布尔表达式的值为false
 }

if...else if...else 语句

if 语句后面可以跟 else if…else 语句,这种语句可以检测到多种可能的情况。
使用 if,else if,else 语句的时候,需要注意下面几点:

  • if 语句至多有 1 个 else 语句,else 语句在所有的 else if 语句之后。
  • if 语句可以有若干个 else if 语句,它们必须在 else 语句之前。
  • 一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行。

语法

if...else 语法格式如下:

if(布尔表达式 1){ 
    //如果布尔表达式 1的值为true执行代码 
}else if(布尔表达式 2){ 
    //如果布尔表达式 2的值为true执行代码 
}else if(布尔表达式 3){ 
    //如果布尔表达式 3的值为true执行代码 
}else { 
    //如果以上布尔表达式都不为true执行代码 
}

嵌套的 if…else 语句

使用嵌套的 if…else 语句是合法的。也就是说你可以在另一个 if 或者 else if 语句中使用 if 或者 else if 语句。

语法

嵌套的 if…else 语法格式如下:

if(布尔表达式 1){ 
    ////如果布尔表达式 1的值为true执行代码 
    if(布尔表达式 2){ 
        ////如果布尔表达式 2的值为true执行代码 
     } 
}

你可以像 if 语句一样嵌套 else if...else。

条件运算符也被称为三元运算符。该运算符有3个操作数,并且需要判断布尔表达式的值。该运算符的主要是决定哪个值应该赋值给变量。

variable x =(expression)? value iftrue: value iffalse

下表列出了逻辑运算符的基本运算,假设布尔变量A为真,变量B为假
操作符描述例子
&&称为逻辑与运算符。当且仅当两个操作数都为真,条件才为真。(A && B)为假。
||称为逻辑或操作符。如果任何两个操作数任何一个为真,条件为真。(A||)为真
称为逻辑非运算符。用来反转操作数的逻辑状态。如果条件为true,则逻辑非运算符将得到false。!(A && B)为真。

短路逻辑运算符

当使用与逻辑运算符时,在两个操作数都为true时,结果才为true,但是当得到第一个操作为false时,其结果就必定是false,这时候就不会再判断第二个操作了。

表格中的实例整数变量A的值为10,变量B的值为20:
运算符描述例子
==检查如果两个操作数的值是否相等,如果相等则条件为真。(A == B)为假。
!=检查如果两个操作数的值是否相等,如果值不相等则条件为真。(A != B)为真。
>检查左操作数的值是否大于右操作数的值,如果是那么条件为真。(A> B)为假。
<检查左操作数的值是否小于右操作数的值,如果是那么条件为真。(A> = B)为假
<=检查左操作数的值是否小于或等于右操作数的值,如果是那么条件为真。(A <= B)为真

public class Test{
    public static void main(String[] args){
        String s1 = null;
        String s2 = "Hello Wolrd";
  
        //这里会出现NullPointerException异常,调用者不能为null
        System.out.println(s1.equals(s2));
        //此时不会有NullPointerException异常,底层会自动先判断空
        System.out.println(Objects.equals(s1,s2));
  
        //判断对象是否为null,等价于==
        System.out.println(Objects.isNull(s1)); //true
        System.out.println(s1==null); //true
  
        //判断对象是否不为null,等价于!=
        System.out.println(Objects.nonNull(s2)); //true
        System.out.println(s2!=null); //true
    }


}
Objects是一个工具类,提供了一些方法可以对任意对象进行操作。主要方法如下
方法名说明
public static boolen equals(Object a,Object b)先做非空判断 再比较两个对象
public static boolean isNull(Object obj)判断对象是否为null 为null返回true 反之
public static boolean nonNull(Object obj)判断对象是否不为null 不为null返回true 反之

toString()

public class Student {
    private String name;
    private int age;


    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class Test {
    public static void main(String[] args) {
        Student student = new Student("张三", 100);
        //Object 默认的toString方法没有用
        //需要子类覆写 toString方法
        System.out.println(student.toString());
        //控制台打印对象时  toString可以忽略
        System.out.println(student);
    }
}

equals()

/**
* 比较name和age全相同就返回true
*/
@Override
public boolean equals(Object o) {
  if (this == o) {
      return true;
   };
   if (!(o instanceof Student)) {
     return false;
   }
   Student student = (Student) o;
    return getAge() == student.getAge() && getName().equals(student.getName());
}

@Override
public int hashCode() {
   return Objects.hash(getName(), getAge());
}
Student student1 = new Student("李四", 88);
Student student2 = new Student("李四", 88);


//Object 默认equals的方法 用的时== 比较的时对象地址
boolean flag= student1.equals(student2);
System.out.println(flag);

hashCode()

算数运算符

算术运算符用在数学表达式中,它们的作用和在数学中的作用一样
操作符描述例子
+加法-相加运算符两侧的值A+B等于20
-减法-左操作数减去右操作数A-B等于-10
*乘法-相乘操作符两侧的值A*B等于200
/除法-左操作数除以右操作数A/B等于0
%取余-左操作数除以右操作数的余数B%A等于0
++自增操作数的值增加1B++或++B
--自减操作数的值减少1B--或者--B

前++与后++(--)

int B=10;
//后++
B++;//当前B=10;
B;//当前B=11;
//前++
B=10 //初始化
++B;当前B=11;

int d = --c; 拆分运算过程为: c=c-1=2; d=c=2, 最后结果为d=2,c=2

int b = ++a; 拆分运算过程为: a=a+1=4; b=a=4, 最后结果为b=4,a=4

+ - * / % += -= *= /= %= ++ --
//byte类型的变量以及char类型的变量在参与运算的时候
//会先提升int  
// i/0
//报错信息: ArithmeticException

JDK JRE JVM

JDK (Java Development Kit) 是 Java 开发工具包,包含了 Java 编译器、Java 虚拟机、Java 类库等工具,用于 Java 程序的开发与编译。
JRE (Java Runtime Environment) 是 Java 运行时环境,包含了 Java 虚拟机以及运行 Java 应用所需的类库等,用于运行已经编译好的 Java 程序。
JVM (Java Virtual Machine) 是 Java 虚拟机,用于在不同平台上执行 Java 字节码文件。
含了 JRE 和开发工具,JRE 包含了 JVM 和运行 Java 程序所需的类库,JVM 则是用来执行 Java 字节码的虚拟机。
Java 跨平台的原理是使用了 JVM,将 Java 代码编译成字节码文件,然后由 JVM 解释执行。由于不同平台的 JVM 实现是相同的,所以同样的字节码文件在不同平台上都可以被正确地解释执行,从而实现了跨平台。
配置 JAVA_HOME 和 path 变量是为了方便在命令行下运行 Java 程序。JAVA_HOME 指定了 JDK 的安装路径,而 path 变量则将 JDK 的 bin 目录添加到了系统的环境变量中,使得可以在命令行下直接调用 Java 程序的命令。配置好这两个变量后,就可以在任何位置直接运行 Java 程序了。
安装路径最好不要有中文或空格等特殊字符,这可能会导致某些软件无法正常运行。
如果安装软件需要管理员权限,应该使用管理员权限运行安装程序。
安装软件时应该仔细查看每个安装步骤,避免不必要的捆绑软件或者修改系统配置。
安装完成后最好将安装路径添加到系统的 PATH 环境变量中,这样可以方便在命令行下直接调用软件的命令。

注释

注释是程序中用来描述代码含义、提供说明和解释的文字信息。注释不会被编译器识别和执行,它们只是提供给程序员或其他阅读代码的人参考和理解代码的辅助工具。注释的作用可以提高代码的可读性、维护性、可靠性和可重用性。
单行注释:使用“//”标记,注释内容从“//”后面到行尾结束。
多行注释:使用“/”和“/”标记,注释内容位于这两个标记之间。
文档注释:使用“/**”和“*/”标记。

关键词

关键字是编程语言中已经被赋予特殊含义的单词,通常被用来表示特定的操作或者语法结构,不能被作为标识符或变量名来使用。
关键字的特征包括:
关键字具有固定的意义,不能被重新定义或赋予其他含义。
关键字是编译器或解释器的组成部分,被用来识别和解析程序的语法结构。
关键字在不同的语法结构中可能有不同的用法和限制条件。
常见的关键字包括:
数据类型关键字:int、float、double、boolean、char等。
流程控制关键字:if、else、switch、case、default、while、do、for、break、continue、return等。
类和对象关键字:class、interface、extends、implements、new、this、super、static、final、abstract等。
异常处理关键字:try、catch、finally、throw、throws等。
其他关键字:void、true、false、null、package、import、synchronized、volatile等。

标识符

标识符是程序中用来标识变量、方法、类、接口、包等命名实体的名称。可以理解为程序中的名字或者符号,用来在代码中引用和调用相应的实体。
标识符的组成规则和注意事项如下:
标识符必须以字母、下划线或美元符号($)开头,后面可以跟着字母、数字、下划线或美元符号。
标识符区分大小写,即 MyName 和 myname 是不同的标识符。
标识符的长度没有限制,但是应当避免过长或者过于复杂,以保证代码的可读性。
标识符不能使用关键字、保留字作为名称,否则会导致编译错误。
标识符应当使用有意义、清晰、简洁的命名方式,以方便他人阅读和理解代码。
注意,标识符的命名应当遵循编程语言的规范和约定,以保证代码的可维护性和可读性。此外,在不同的编程语言中,标识符的命名规则和限制可能有所不同。

数据基础类型

整数型(占用的内存空间和取值范围如下)
   byte:1 字节,取值范围为 -128 到 127。
   short:2 字节,取值范围为 -32768 到 32767。
   int:4 字节,取值范围为 -2^31 到 2^31-1。
   long:8 字节,取值范围为 -2^63 到 2^63-1。
浮点型
   float:4 字节,取值范围为 1.4E-45 到 3.4028235E38,精度为 6-7 位有效数字。
   double:8 字节,取值范围为 4.9E-324 到 1.7976931348623157E308,精度为 15 位有效数字。
字符型
   char:2 字节,表示 Unicode 编码的字符,取值范围为 '\u0000' 到 '\uffff'。
布尔型
  boolean:1 字节,取值范围为 true 和 false。
其中,整数型、浮点型、字符型和布尔型分别对应 Java 的四个基本数据类型类。