美文网首页
Java语言基础一(变量、数据类型、运算符、流程控制、数组)

Java语言基础一(变量、数据类型、运算符、流程控制、数组)

作者: YMeng_Zhang | 来源:发表于2022-04-04 16:10 被阅读0次

    初识java语言

    Java SE -- Java Platform, Standard Edition 是 Java 平台的基础

    • Java SE 以前称为 J2SE, 可以编写桌面应用和基于 web 的应用程序。

    • JDK > JRE > JVM。

    • Javac.exe -- 编译器, 主要用于将高级 Java 源代码翻译成字节码文件。

    • Java.exe -- 解释器, 主要用于启动 JVM 对字节码文件进行解释并执行。

    • 不同的操作系统提供了 JVM 规范的实现, 达成跨平台的目的。

    • JVM 解释 Java 字节码文件为具体平台能够执行的机器指令。

    Java EE -- Java Platform, Enterprise Edition

    • J2EE 是 1999 年到 2003 年 Java EE 的抽象规范的版本名称。

    • Java EE 构建在 Java SE 基础之上, 用于构建企业级应用。

    • Java EE 是一个抽象的规范, 具体实现称为应用服务器。

    • EJB 遵循 Java EE 的规范, 所以 EJB 属于 Java EE。

    注释
     // 单行注释
    
     /* 
       多行注释 
    */
    
    
     /** 
        多行或文档注释, 支持提取的注释
     */
    

    变量与数据类型

    变量

    Java 是强类型语言, 变量在使用前必须声明来指明其数据类型;

    • 变量在使用之前必须初始化;

    • 变量不能重复声明 ;

    标识符命名

    • 由数字, 字母, 下划线以及$等等, 不能数字开头;

    • 不能使用 Java 语言的关键字 ;

    • 区分大小写, 长度没有限制但不宜过长;

    • 支持中文, 但不推荐使用 ;

    • 标识符可以给 类/变量/属性/方法/包 起名字;

    数据类型

    • 基本类型: byte(1字节), short(2字节), int(4字节), long(8字节), float(4字节), double(8字节), boolean(1字节), char(2字节)。

    • 引用类型: 数组, 类, 接口, 枚举, 标注 。

    基本数据类型之间的转换

    • 自动类型转换 --从小到大类型的转换:byte->short,char->int->long->float->double。

    • 强制类型转换 -- 从大到小类型的转换:目标类型 变量名 = (目标类型)源类型变量名。

    //比如实现 double类型(3.12) 向 float类型 ,即大类型向小类型转换
    float a = 3.12F;
    float a = (float)3.12;
    
    
    注:成员变量和局部变量的区别:
    • 区别一:定义的位置不同。
      (1)成员变量定义在类中,整个类全都可以通用。
      (2)局部变量定义在方法中,只有方法当中才可以使用,出了方法就不能再用。

    • 区别二:在内存中的位置不同。
      (1)成员变量存储在堆内存的对象中。
      (2)局部变量存储在栈内存的方法中。

    • 区别三:声明周期不同:
      (1)成员变量随着对象的出现而出现,随着对象的消失而消失。
      (2)局部变量是随着方法的运行而出现,随着方法的弹栈而消失。

    • 区别四:初始化不同:
      (1)成员变量因为在堆内存中,所以有默认的初始化值。
      (2)局部变量没有默认初始化值,必须初始化后才可以使用。


    运算符(部分)

    算术运算符 : / 和 %

    • / 表示做除法(商)运算,%表示做取余(模)运算。

    自增减运算符 :++ 和 --

    • a++: 先让 a 的数值作为整个表达式的最终结果, 然后让 a 自增 。

    • ++a: 先让 a 自增, 然后让 a 的新值作为整个表达式的最终结果 。

    逻辑运算符 : && 、 || 、 !

    • && :表示逻辑与运算符,相当于"并且",同真为真,一假为假(短路特性: 对于逻辑与 运算符来说,若第一个表达式为假则结果为假,此时跳过第二个表达式)。

    • || :表示逻辑或运算符,相当于"或者",一真为真,同假为假。

    • ! : 表示逻辑非运算符,相当于"取反",真为假,假为真。

    注:逻辑运算符的操作数均为boolean表达式。

    条件/三目运算符 :条件表达式? 表达式1: 表达式2

    • 判断条件表达式是否成立,若成立则执行表达式1,否则执行表达式2 。

    移位运算符**

    • << 左移运算符,用于将数据的二进制位向左移动,右边使用0补充

    • >> 右移运算符,用于将数据的二进制位向右移动,左边使用符号位补充

    • >>> 表示逻辑右移运算符,用于将数据的二进制位向右移动,左边使用0 补充

    位运算符**

    • & 表示按位与运算符,按照二进制位进行与运算,同1为1,一0为0.

    • | 表示按位或运算符,按照二进制位进行或运算,一1为1,同0为0.

    • ~ 表示按位取反运算符,按照二进制位进行取反,1为0,0为1.

    • ^ 表示按位异或运算符,按照二进制位进行异或运算,同为0,不同为1.


    流程控制语句

    局部变量 -- 作用范围是从声明开始一直到方法体结束

    块变量 -- 作用访问是从声明开始一直到当前语句块结束

    选择结构语句:

    • if 条件语句

    (1)if 条件语句

    if(表达式1){
    语句1;
    }
    如果表达式1的判断为真(正确/true)就执语句1

    (2)if else 表达式

    if(表达式1){
    语句1;
    }else{
    语句2;
    }
    当表达式1的判断为真(正确/true)就执行语句1,否则,就执行语句2(不执行1就执行2)。

    (3)if else if 表达式

    if else if 表达式
    if(表达式1){
    语句1;
    }else if(表达式2){
    语句2;
    }else{
    语句3;
    }
    当表达式1的判断为真(正确/true)就执行语句1,否则 ,当表达式2的判断为真就执行语句2,否则就执行语句3。

    注:字符串的判断
    错误的字符串判断相等(字符串的判断不能使用 "==" )

    public class HelloWorld {
        public static void main(String[] args) {
            String name = new String("张三");
            if( name  == "王五" ){
                System.out.println("yes1");
            } else if( name  == "赵四"){
                 System.out.println("yes2");
            } else if( name  == "张三"){
                 System.out.println("yes3");
            } else{
                System.out.println("yes4");
            }
        }
    }
    

    正确的字符串判断相等(使用 "equal")

    public class HelloWorld {
        public static void main(String[] args) {
            String name = new String("张三");
            if( name.equals("王五")){
                System.out.println("yes1");
            } else if( "赵四".equals(name)){
                 System.out.println("yes2");
            } else if( name.equals("张三")){
                 System.out.println("yes3");
            } else{
                System.out.println("yes4");
            }
        }
    }
    
    • switch 条件语句

    switch(表达式){
    case 表达式常量1:
    语句1;
    break;
    case 表达式常量2:
    语句2;
    break;
    ......
    case 表达式常量n:
    语句n;
    break;
    [default:语句n+1;]
    }

    其中,一个 case 表达式常量称为标号,代表一个 case 分支的入口。switch 语句在运行时首先计算 switch 圆括号中“表达式”的值(注意:这个值必须是整型或字符型的);同时后面各个 case 表达式常量的值的类型要与 switch 圆括号中“表达式”的值类型一致。

    一个 case 语句代表一个操作,当 switch 表达式的值与哪一个 case 表达式常量的值匹配时,执行其对应的语句,执行完成后遇到 break 输出;default 子句是可选的,当表达式的值与 case 表达式常量的值都不匹配时,就运行 default 子句并输出。

    注意:

    1. switch 表达式的值决定选择哪个 case 分支,如果找不到相应的分支,就直接从”default” 开始输出;当程序执行一条 case 语句后,如果 case 分支中没有 break 和 return 语句,程序会执行紧接于其后的语句。

    2. case 是常量表达式,也就是说 B 的取值只能是常量或者 int、byte、short、char,如果你需要在此处写一个表达式或者变量,那么就要加上单引号。

    循环结构语句:

    • for循环语句

    适合于明确循环次数的场合, 也可以成为死循环

    for (初始化表达式; 条件表达式; 修改初始值表达式)
    {
    循环体 ;
    }

    案例:连续输出十句话
    不使用for循环

    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("这是第"+1+"句话");   
            System.out.println("这是第"+2+"句话");
            System.out.println("这是第"+3+"句话");
            System.out.println("这是第"+4+"句话");
            System.out.println("这是第"+5+"句话");
            System.out.println("这是第"+6+"句话");
            System.out.println("这是第"+7+"句话");
            System.out.println("这是第"+8+"句话");
            System.out.println("这是第"+9+"句话");
            System.out.println("这是第"+10+"句话");
        }
    }
    

    使用for循环

    public class HelloWorld {
        public static void main(String[] args) {
            for(int i = 0; i < 10; i++){
                System.out.println("这是第"+i+"句话");   
            }
        }
    }
    
    • while循环

    while循环适合于明确循环条件, 但不明确循环次数的场合
    基本格式:

    while(判断条件语句) {
    循环体语句;

    }

    扩展格式

    初始化语句;
    while(判断条件语句) {
    循环体语句;
    控制条件语句;
    }

    • do ... while循环

    do while 循环主要用于至少执行一次循环体的场合

    do {
    循环体;
    } while (条件表达式);

    注: do while 循环格式: 最后要加分号

    continue 语句, 结束本次循环开始下次循环
    
    break 关键字, 退出当前语句块, 在循环体中用于退出循环
    

    数组

    • 常见异常:

    ArrayIndexOutOfBoundsException 数组下标越界异常

    ArithmeticException 算术异常

    • 内存结构之栈区:

    用于存放程序运行过程中所有的局部变量

    • 内存结构之堆区:

    用于存储使用 new 关键字创建的数组和对象

    一维数组

    是相同数据类型的多个元素的容器,本质上是在空间中申请一段连续的存储单元。 在 Java 语言中体现为一种引用数据类型

    格式:数据类型[] 数组名称 = new 数据类型[数组的长度]

    数组名的内存空间中存放的是数据在堆区中的内存地址信息
    通过下标访问数组每一个元素, 从 0 开始 到 array.length - 1

    初始化方式:

    基本类型数组初始值:
    byte, short, char, int, long 为 0;
    float, double 为 0.0; boolean 为 false;

    可以在数组声明的同时进行初始化:

    数据类型[] 数组名称 = new 数据类型[]{value0, value1, value2}

    数据类型[] 数组名称 = {value0, value1, value2} // simplified

    优缺点:
    • 可以通过下标快速访问指定位置的元素

    • 要求所有元素的类型相同

    • 要求内存空间连续, 并且长度一旦确定就不能修改

    • 增加和删除效率低

    变长数组: 主要指变量可以作为数组的长度, 但绝不是数组的长度可以改变

    数据工具类:

    java.util.Arrays 类可以实现对数组中元素的遍历, 查找, 排序等操作

    常用方法:

    Arrays.toString(array):输出数组中的内容

    Arrays.fill(array, val):将参数指定元素赋值给数组中所有元素

    Arrays.equals(array1, array2):判断两个数组元素内容和次序是否相同

    Arrays.sort(array):对数组中的元素进行从小到大排序

    Arrays.binarySearch(array, val):从数组中查找参数指定元素所在的位置

    二维数组

    本质上由多个一维数组摞在一起的数组;每个元素都是一维数组, 而一维数组中的每个元素才是数据内容

    格式:数据类型[][] 数组名称 = new 数据类型[行数][列数];

    初始化方式:

    数据类型[][] 数组名称 = {{element0, element1, ...}, ...};

    int[][] arr = new int[3][]; // 每一行列数不一样

    arr[0] = new int[3];

    arr[1] = new int[4];

    arr[2] = new int[5];

    相关文章

      网友评论

          本文标题:Java语言基础一(变量、数据类型、运算符、流程控制、数组)

          本文链接:https://www.haomeiwen.com/subject/iwecsrtx.html