什么是程序

程序:计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合

Java 技术体系平台

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_System

Java 重要特点

  1. Java 语言是面向对象的(oop)
  2. Java 语言是健壮的。Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证
  3. Java 语言是跨平台性的。[即: 一个编译好的.class 文件可以在多个系统下运行,这种特性称为跨平台]
  4. 【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_开发语言_02

  5. Java 语言是解释型的[了解]
    解释性语言:javascript,PHP, java
    编译性语言: c / c++
    区别是:解释性语言,编译后的代码,不能直接被机器执行,需要解释器来执行, 编译性语言, 编译后的代码, 可以直接被机器执行, c /c++

什么是JDK、JRE、JVM

JDK(Java Development Kit Java 开发工具包)

JDK = JRE + java 的开发工具 [java, javac,javadoc,javap 等]

JRE(Java Runtime Environment Java 运行环境)

JRE = JVM + Java 的核心类库[类]

JVM (java virtual machine Java 虚拟机)

  1. JVM 是一个虚拟的计算机,具有指令集并使用不同的存储区域。负责执行指令,管理数据、内存、寄存器,包含在JDK 中.
  2. 对于不同的平台,有不同的虚拟机。
  3. Java 虚拟机机制屏蔽了底层运行平台的差别,实现了“一次编译,到处运行”

配置环境变量 path

为什么要配置path

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_开发语言_03

配置环境变量 path 的步骤

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_System_04


配置好 path 环境变量。可以在控制台下正确的执行

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_开发语言_05

Java快速入门(cmd方式运行)

需求说明

要求开发一个Hello.java程序,可以输出"hello,world!"

开发步骤

1)将Java代码编写到扩展名为Hello.java的文件中。[代码说明]
2)通过javac命令对该java文件进行编译,生成.class文件。
3)通过java命令对生成的class文件进行运行。

运行原理示意图

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_System_06


【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_java_07

执行流程分析

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_System_08

Java 开发注意事项和细节说明

  • Java源文件以.java为扩展名.源文件的基本组成部分是类,如本类中的Hello类。
  • Java应用程序的执行入口是main()方法。它有固定的书写格式:公共静态void main(String[] args){…}
  • Java语言严格区分大小写。
  • Java方法由一条条语句构成,每个语句以";"结束。
  • 大括号都是成对出现的,缺一不可。[习惯,先写(}再写代码]
  • 一个源文件中最多只能有一个公用类。其它类的个数不限。
  • 【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_System_09


  • 【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_System_10

  • 如果源文件包含一个公用类,则文件名必须按该类名命名!
  • 【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_System_11

  • 一个源文件中最多只能有一个公用类。其它类的个数不限,也可以将主方法写在非公用类中,然后指定运行非公用类,这样入口方法就是非公用的主要方法
  • 【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_Java_12

DOS(DiskOperatingSystem)命令

DOS介绍

DiskOperatingSystem磁盘操作系统,简单说一下windows的目录结构。

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_java_13

相对路径,绝对路径

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_java_14

常用的dos命令

  • 查看当前目录是有什么内容 dir
    dir d:labc2\test200
  • 切换到其他盘下:盘符号 cd:change directory
    切换到c盘cd /D c:
  • 切换到当前盘的其他目录下(使用相对路径和绝对路径演示).\表示上一级目录
    cd d:\abc2ltest200
    cd …abc2\test200
  • 切换到上一级:
    cd …
  • 切换到根目录:cd
    cd \
  • 查看指定的目录下所有的子级目录tree
  • 清屏 cls
  • 退出 DOS exit

变量

变(变化)量(值)的介绍

变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,而通过变量名可以访问到变量(值)

变量使用注意事项

  • 变量表示内存中的一个存储区域[不同的变量,类型不同,占用的空间大小不同,比如:int 4 个字节, double 就是 8个字节,先有基本印象,后面说字节]
  • 该区域有自己的名称[变量名]和类型[数据类型]
  • 变量必须先声明,后使用,即有顺序
  • 该区域的数据/值可以在同一类型范围内不断变化
  • 变量在同一个作用域内不能重名
  • 变量=数据类型+变量名+值(变量三要素),这一点请大家注意。

数据类型

每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间(字节)。

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_System_15


【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_java_16

整数类型(整型常量(具体值)默认为 int 型,声明long型常量须后加’‘或’L’)

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_java_17


【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_java_18

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_System_19

浮点类型(浮点型常量(具体值)默认为 double 型,声明 float 型常量,须后加‘f’或‘F)(通常情况下,应该使用 double 型,因为它比 float 型更精确)(对运算结果是小数的进行相等判断是以两个数的差值的绝对值,在某个精度范围类判断

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_System_20

注意事项:

1)关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位

2) 尾数部分可能丢失,造成精度损失(小数都是近似值)

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_java_21

字符类型(char)(char 是两个字节(可以存放汉字,字母和汉字统一都是占用两个字节))(65->A,97->a)(实际上一个字节可以表示256个字符,只用128个)(在java中,char的本质是一个整数,在输出时,是unicode码对应的字符

字符类型可以表示单个字符,字符类型是 char,char 是两个字节(可以存放汉字),多个字符我们用字符串 String(我们后面详细讲解 String)

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_java_22


【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_java_23

各种编码了解

ASCII码

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_java_24

Unicode编码

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_System_25

UTF-8编码(字母占1个字节,汉字占3个字节)

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_开发语言_26

布尔类型:boolean(取值true和false,无null)

基本数据类型转换

自动类型转换(有多种类型的数据混合运算时,系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算)((byte,short)和 char之间不会相互自动转换)(byte,short,char 他们三者可以计算,在计算时首先转换为int类型)(boolean 不参与转换)

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_java_27


【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_System_28

//自动类型转换细节
public class AutoConvertDetail {


    //编写一个 main 方法
    public static void main(String[] args) {
    //细节 1: 有多种类型的数据混合运算时,
    //系统首先自动将所有数据转换成容量最大的那种数据类型,然后再进行计算
    int n1 = 10; //ok
    //    float d1 = n1 + 1.1;//错误 n1 + 1.1 => 结果类型是 double
    //double d1 = n1 + 1.1;//对 n1 + 1.1 => 结果类型是 double float d1 = n1 + 1.1F;//对 n1 + 1.1 => 结果类型是 float

    //细节 2: 当我们把精度(容量)大 的数据类型赋值给精度(容量)小 的数据类型时,
    //就会报错,反之就会进行自动类型转换。
    //
    //int n2 = 1.1;//错误 double -> int


    //细节 3: (byte, short) 和 char 之间不会相互自动转换
    //当把具体数赋给 byte 时,(1)先判断该数是否在 byte 范围内,如果是就可以
    byte b1 = 10; //对	, -128-127
//     int n2 = 1; //n2 是 int
//     byte b2 = n2; //错误,原因: 如果是变量赋值,判断类型
    //
    // char c1 = b1; //错误, 原因 byte 不能自动转成 char





        //细节 4: byte,short,char	他们三者可以计算,在计算时首先转换为 int 类型
        byte b2 = 1; byte b3 = 2; short s1 = 1;
//        short s2 = b2 + s1;//错, b2 + s1 => int
        int s2 = b2 + s1;//对, b2 + s1 => int
        //byte b4 = b2 + b3; //错误: b2 + b3 => int

        //boolean 不参与转换
        boolean pass = true;
//        int num100 = pass;// boolean 不参与类型的自动转换


        //自动提升原则: 表达式结果的类型自动提升为 操作数中最大的类型
        //看一道题
        byte b4 = 1; short s3 = 100; int num200 = 1;
        float num300 = 1.1F;
        double num500 = b4 + s3 + num200 + num300; //float -> double
//        if(0){
//            System.out.println("oooo");
//        }
    }



}

强制类型转换(强转符号只针对于最近的操作数有效)(char类型可以保存 int的常量值,但不能保存int的变量值,需要强转)

自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符 ( ),但可能造成精度降低或溢出,格外要注意。

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_开发语言_29

基本数据类型和String类型的转换

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_开发语言_30

/**
 * @创建人 wdl
 * @创建时间 2024/8/26
 * @描述
 */

public class StringToBasic {
    //编写一个 main 方法
    public static void main(String[] args) {
        //基本数据类型->String
        int n1 = 100;
        float f1 = 1.1F;
        double d1 = 4.5;
        boolean b1 = true;
        String s1 = n1 + "";
        String s2 = f1 + "";
        String s3 = d1 + "";
        String s4 = b1 + "";
        System.out.println(s1 + " " + s2 + " " + s3 + " " + s4);


        //String->对应的基本数据类型 
        String s5 = "123";
        //会在 OOP 讲对象和方法的时候会详细
        //解读 使用 基本数据类型对应的包装类,的相应方法,得到基本数据类型
        int num1 = Integer.parseInt(s5);
        double num2 = Double.parseDouble(s5);
        float num3 = Float.parseFloat(s5);
        long num4 = Long.parseLong(s5);//s5字符串的后面不能加l或者L标识
        byte num5 = Byte.parseByte(s5);
        boolean b = Boolean.parseBoolean("true");
        short num6 = Short.parseShort(s5);

        System.out.println("===================");
        System.out.println(num1);//123 
        System.out.println(num2);//123.0 
        System.out.println(num3);//123.0 
        System.out.println(num4);//123 
        System.out.println(num5);//123 
        System.out.println(num6);//123 
        System.out.println(b);//true

        //怎么把字符串转成字符 char -> 含义是指 把字符串的第一个字符得到
        //解读	s5.charAt(0) 得到 s5 字符串的第一个字符 '1' 
        System.out.println(s5.charAt(0));

    }
}

注意事项

  1. 在将 String 类型转成 基本数据类型时,要确保 String类型能够转成有效的数据,比如 我们可以把 “123” , 转成一个整数,但是不能把 “hello” 转成一个整数
  2. 如果格式不正确,就会抛出异常,程序就会终止, 这个问题在异常处理章节中,会处理

运算符

算术运算符

%(a % b 的结果是 a 除以 b 的余数,结果的符号与 a 的符号一致

// % 取模 ,取余
        // 在 % 的本质 看一个公式!!!! a % b = a - a / b * b
        // -10 % 3 => -10 - (-10) / 3 * 3 = -10 + 9 = -1
        // 10 % -3 = 10 - 10 / (-3) * (-3) = 10 - 9 = 1
        // -10 % -3 =	(-10) - (-10) / (-3) * (-3) = -10 + 9 = -1
        System.out.println(10 % 3); //1

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_开发语言_31

关系运算符(比较运算符)

  1. 关系运算符的结果都是 boolean 型,也就是要么是 true,要么是 false
  2. 关系表达式 经常用在 if 结构的条件中或循环结构的条件中
  3. 比较运算符"==“不能误写成”="

逻辑运算符(对于&&短路与而言,如果第一个条件为 false ,后面的条件不再判断,效率高 VS &对于&逻辑与而言,如果第一个条件为 false ,后面的条件仍然会判断效率低 )

用于连接多个条件(多个关系表达式),最终的结果也是一个 boolean 值。

  1. 短路与 && 短路或 || ,取反 !
  2. 逻辑与 &,逻辑或 |,^ 逻辑异或(相同为0,不同为1)

赋值运算符(会进行类型转换,byte b = 3;b++; // b = (byte)(b+1);)

赋值运算符就是将某个运算后的值,赋给指定的变量。

  • 基本赋值运算符 =
    int a = 10
  • 复合赋值运算符
    += ,-= ,*= , /= ,%= 等

赋值运算符特点

  1. 运算顺序从右往左 int num = a + b + c;
  2. 赋值运算符的左边 只能是变量,右边 可以是变量、表达式、常量值
    int num = 20; int num2= 78 * 34 - 10; int num3 = a;
  3. 复合赋值运算符等价于下面的效果
    比如:a+=3;等价于 a=a+3; 其他类推
  4. 复合赋值运算符会进行类型转换。 byte b = 2; b+=3; b++;

三元运算符

条件表达式 ? 表达式 1: 表达式 2;

运算符优先级

  1. 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。
  2. 只有单目运算符、赋值运算符是从右向左运算的。
  3. 一览表, 不要背,使用多了,就熟悉了.

标识符命名规范

  1. 包名:多单词组成时所有字母都小写:aaa.bbb.ccc //比如 com.hsp.crm
  2. 类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz [大驼峰]
    比如: TankShotGame
  3. 变量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYyyZzz [小
    驼峰, 简称 驼峰法]
    比如: tankShotGame
  4. 常量名:所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
    比如 :定义一个所得税率 TAX_RATE
  5. 后面我们学习到 类,包,接口,等时,我们的命名规范要这样遵守,更加详细的看文档

键盘输入语句

在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。Input.java , 需要一个 扫描器(对象), 就是Scanner

  1. 导入该类的所在包, java.util.*
  2. 创建该类对象(声明变量)
  3. 调用里面的功能
import java.util.Scanner;
//表示把 java.util 下的 Scanner 类导入
public class demo02_Scanner {
    //编写一个 main 方法
    public static void main(String[] args) {
        //演示接受用户的输入
        //步骤
        //Scanner 类 表示 简单文本扫描器,在 java.util 包
        //1. 引入/导入 Scanner 类所在的包
        //2. 创建 Scanner 对象 , new 创建一个对象,体会
        // myScanner 就是 Scanner 类的对象
        Scanner myScanner = new Scanner(System.in);
        //3. 接收用户输入了, 使用 相关的方法
        System.out.println("请输入名字");
        //当程序执行到 next 方法时,会等待用户输入~~~
        String name = myScanner.next(); //接收用户输入字符串
        System.out.println("请输入年龄");
        int age = myScanner.nextInt(); //接收用户输入 int
        System.out.println("请输入薪水");
        double sal = myScanner.nextDouble(); //接收用户输入 double
        System.out.println("人的信息如下:");

        System.out.println("名字=" + name
                + " 年龄=" + age + " 薪水=" + sal);

    }
}
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入一个字符(a-g)");
char c1 = myScanner.next().charAt(0);//

进制

进制介绍

对于整数,有四种表示方式:
二进制:0,1 ,满 2 进 1.以 0b 或 0B 开头。
十进制:0-9 ,满 10 进 1。
八进制:0-7 ,满 8 进 1. 以数字 0 开头表示。
十六进制:0-9 及 A(10)-F(15),满 16 进 1. 以 0x 或 0X 开头表示。此处的 A-F 不区分大小写。

//演示四种进制
public class BinaryTest {
    //编写一个 main 方法
    public static void main(String[] args) {
        //n1 二进制
        int n1 = 0b1010;
        //n2 10 进制
        int n2 = 1010;
        //n3 8 进制
        int n3 = 01010;
        //n4 16 进制
        int n4 = 0X10101;
        System.out.println("n1=" + n1);
        System.out.println("n2=" + n2);
        System.out.println("n3=" + n3);
        System.out.println("n4=" + n4);
        System.out.println(0x23A);
    }
}

位运算

二进制(Binary)数用0和1两个数字及其组合来表示任何数。进位规则是"逢2进1",数字1在不同的位上代表不同的值,按从右至左的次序,这个值以二倍递增。

原码、反码、补码

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_java_32

位运算符(java 中有 7 个位运算(&、|、^、~、>>、<<和 >>>)

【零基础 快速学Java】韩顺平 零基础30天学会Java---JAVA概述、变量、运算符(2024JavaReview)_开发语言_33

  1. 算术右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
  2. 算术左移 <<: 符号位不变,低位补 0
    3)>>>逻辑右移也叫无符号右移,运算规则是: 低位溢出,高位补 0
  3. 特别说明:没有 <<< 符号

示例

public static void main(String[] args) {
    int a = 1 >> 2;  // 算术右移2位
    int b = -1 >> 2; // 算术右移2位
    int c = 1 << 2;  // 算术左移2位
    int d = -1 << 2; // 算术左移2位
    int e = 3 >>> 2; // 无符号右移2位

    System.out.println("a=" + a);
    System.out.println("b=" + b);
    System.out.println("c=" + c);
    System.out.println("d=" + d);
    System.out.println("e=" + e);
}

位移操作说明:

  • 1 >> 2(算术右移2位)
  • 1 的二进制为 0000 0001。
  • 右移2位后变为0000 0000,即 0。
  • 结果:a = 0
  • -1 >> 2(算术右移2位)
  • -1 的二进制表示是补码形式:1111 1111。
  • 右移2位后仍然是 1111 1111(因为算术右移会保持符号位为1),即 -1。
  • 结果:b = -1
  • 1 << 2(算术左移2位)
  • 1 的二进制为 0000 0001。
  • 左移2位后变为 0000 0100,即4。
  • 结果:c = 4
  • -1 << 2(算术左移2位)
  • -1的二进制补码形式是 1111 1111。
  • 左移2位后变为 1111 1100,即 -4。
  • 结果:d = -4
  • 3 >>> 2(无符号右移2位)
  • 3 的二进制是 0000 0011。
  • 无符号右移2位后变为 0000 0000,即0。
  • 结果:e = 0