Java 基础语法(一)

Java 概述

Java 跨平台原理

  1. 在不同操作系统上运行 Java 程序,只需要安装与该操作系统对应的 Java 虚拟机JVM),这样可以实现同一个 Java 程序在不同平台上运行,也就是 Java 的跨平台原理。

JRE 与 JDK

  1. JREJava Runtime Environment):Java 程序运行时的环境,包含 JVM 和运行时所需的核心类库
  2. JDKJava Development Kit):Java 程序开发工具包,包含 JRE 和开发人员所使用的工具,其中开发工具包括编译工具 javac.exe运行工具 java.exe

JDK 的安装目录

目录名称 说明
bin 存放了 JDK 的各种工具命令 javac 和 java 在此目录中
conf 存放了 JDK 的相关配置文件
include 存放了一些平台特定的头文件
jmods 存放了 JDK 的各种模块
legal 存放了 JDK 各模块的授权文档
lib 存放了 JDK 工具的一些补充 JAR 包

基础语法

注释

  1. 单行注释

    格式://注释信息

  2. 多行注释

    格式:/*注释信息*/

  3. 文档注释

    格式:/**注释信息*/

关键字

  1. 关键字:Java 语言中赋予了特殊含义的单词
  2. 关键字的特点
    • 关键字的字母全部小写
    • 常用的代码编辑器,针对关键字有特殊的颜色标记

常量

  1. 常量概述:在程序运行中,其值不可用发生改变的量。

  2. 常量的分类

    常量类型 说明
    字符串常量 用双引号括起来的内容
    整数常量 不带小数的数字
    小数常量 带小数的数字
    字符常量 用单引号括起来的内容
    布尔常量 布尔值(true,false),表示真假
    空常量 一个特殊的值,空值(null)

数据类型

  1. Java 语言是强类型语言,对于每一种数据都给出了明确的数据类型,不同的数据类型也分配了不同的内存空间,所以它们表示的数据大小也是不一样的。

    数据类型.png

  2. 数据类型与内存占用

    数据类型 内存占用
    byte 1
    short 2
    int(整数默认) 4
    long 8
    float 4
    double(浮点数默认) 8
    char 2
    boolean 1

变量

  1. 变量概述:在程序运行过程中,其值可以发生改变的量。

  2. 变量的定义

    格式:数据类型 变量名 = 变量值;

    范例:int a = 10;

  3. 变量使用的注意事项

    • 变量不能重复定义
    • 变量使用前必须初始化
    • 在对 float 类型的变量进行赋值时,需要在浮点数后加 F,因为浮点数默认是 double 类型,否则会提示超出数据范围。

标识符

  1. 标识符概述:就是给类,方法,变量等起名字的符号。
  2. 标识符定义规则
  • 由数字、字母、下划线(_)和美元符($)组成
  • 不能以数字开头
  • 不能是关键字
  • 区分大小写
  1. 常见命名约定

    • 小驼峰命名法:方法、变量

      • 约定 1:标识符是一个单词时,首字母小写
      • 约定 2:标识符由多个单词组成时,第一个单词首字母小写,其他单词首字母大写
    • 大驼峰命名法:类

      • 约定 1:标识符是一个单词时,首字母大写
      • 约定 2:标识符由多个单词组成时,每个单词的首字母大写

类型转换

  1. 自动类型转换

    把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量。

    自动类型转换.png

  2. 强制类型转换

    把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量。

    • 格式:目标数据类型 变量名 = (目标数据类型)值或者变量;
    • 范例:int k = (int)88.88;

运算符

算术运算符

运算符与表达式
  • 运算符:对常量或变量进行操作的符号

  • 表达式:用运算符把常量或变量连接起来符合 java 语法的式子就可以称为表达式。不同运算符连接的表达式体现的是不同类型的表达式。

    符号 作用
    +
    -
    *
    /
    % 取余
    • 整数相除只能得到整数,要得到小数,必须要有浮点数的参与。
字符的 + 操作
  1. 当字符之间进行 + 操作时,取字符所对应的 ASCII 码值进行运算。

  2. 算术表达式中包含多个基本数据类型的值的时候,整个算术表达式的类型会自动提升。此时与表达式对应的变量(比如 a = b + c,a 和 b + c 的类型需相同)要求与表达式同类型,否则会提示不兼容。

    提升规则:

    • byte 类型,short 类型和 char 类型将被提升到 int 类型。

    • 整个表达式的类型自动提升到表达式中最高等级操作数同样的类型。

      等级顺序:byteshortchar -> int -> long -> float -> double

字符串的 + 操作
  1. 当“+”操作中出现字符串时,这个“+”是字符串连接符,而不是算术运算
  2. 在“+”操作中,如果出现了字符串,就是连接运算符,否则就是算术运算符。(例如 1+2+“abc”的结果为 3abc),当连续进行“+”操作时,从左到右逐个执行。

赋值运算符

符号 作用
= 赋值
+= 加后赋值
-= 减后赋值
*= 乘后赋值
/= 除后赋值
%= 取余后赋值
  • 注意事项:扩展的赋值运算符隐含了强制类型转换。

逻辑运算符

符号 作用
& 逻辑与
| 逻辑或
^ 逻辑异或
! 逻辑非
短路逻辑运算符
符号 作用 说明
&& 短路与 作用和&相同,但是有短路效果
|| 短路或 作用和|相同,但是有短路效果

注意事项:

  • 逻辑与&:无论左边真假,右边都要执行。

    短路与&&:如果左边为真,右边执行;如果左边为假,右边不执行。

  • 逻辑或 |:无论左边真假,右边也要执行。

    短路或 ||:如果左边为假,右边执行;如果左边为真,右边不执行。

三元运算符

  1. 格式:关系表达式 ?表达式 1:表达式 2;

    范例:a > b ? a : b;

  2. 计算规则:

    • 首先计算关系表达式的值。
    • 如果值为 true,表达式 1 的值就是运算结果。
    • 如果值为 false,表达式 2 的值就是运算结果。

数据输入

  1. 使用 Scanner 进行数据输入

    • 使用步骤

      • 导包

        import java.util.Scanner;
        //导包的动作必须出现在类定义之前
        
      • 创建对象

        Scanner sc = new Scanner(System.in);
        
      • 接收数据

        int i = sc.nextInt();
        

流程控制语句

  1. 流程控制语句分类:
    • 顺序结构
    • 分支结构(ifswitch
    • 循环结构(forwhiledo...while

顺序结构

  1. 顺序结构是程序中最简单最基本的流程控制,没有特点的语法结构,按照代码的先后顺序,依次执行。

分支结构

if 语句
  1. if 语句格式:

    if(关系表达式){
        语句体1;
    }
    else if(关系表达式2){
        语句体2;
    }
    ...
    else{
        语句体n+1;
    }
    
switch 语句
  1. switch 语句格式:

    switch(表达式){
        case 1:
            语句体1;
            break;
    
        case 2
            语句体2;
            break;
        ...   
        default:
            语句体n+1;
            [break;]
    }
    
  2. 格式说明

    • 表达式的取值为 byteshortintcharJDK5 以后可以是枚举类型JDK7 以后可以是 String
    • break:表示中断,用来结束 switch 语句。
  3. 注意事项:在 switch 语句中,如果 case 控制的语句体后面不写 break,将出现穿透现象,在不判断下一个 case 值的情况下,向下运行,直到遇到 break,或者整体 switch 语句结束。

循环语句

for 循环语句
  1. for 循环语句格式:

    for(初始化语句;条件判断语句;条件控制语句){
        循环语句;
    }
    
while 循环语句
  1. while 循环语句格式:

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

    初始化语句;
    do{
        循环体语句;
        条件控制语句;
    }while(条件判断语句);
    
跳转控制语句
  1. continue:用在循环中,基于条件控制,跳过某次循环内容的执行,继续下一次的执行。
  2. break:用在循环中,基于条件判断,终止循环体内容的执行,也就是结束当前的整个循环。
Random
  1. 作用:产生一个随机数。

  2. 使用步骤:

    • 导包

      import java.util.Random;
      
    • 创建对象

      Random r = new Random();
      
    • 获取随机数

      int number = r.nextInt(10);
      //获取数据的范围为(0,10),包括0,不包括10
      

数组

数组概述

什么是数组

  1. 数组(array)是一种用于存储多个相同类型数据的存储模型。

数组的定义格式

  1. 数组的定义格式

    • 格式一:数据类型[ ] 变量名
    • 定义了一个 int 类型的数组,数组名是 arr
    • 格式二:数据类型 变量名[ ]
    • 定义了一个 int 类型的变量,变量名为 arr[ ]
  2. 一般情况下使用格式一进行数组定义。

数组初始化

动态初始化

  1. 初始化时只指定数组长度,由相同为数组分配初始值。
  2. 初始化格式
    • 格式:数据类型[ ] 变量名 = new 数据类型[数组长度];
    • 范例:int [] arr = new int [3];(new 为数组申请内存空间)

静态初始化

  1. 初始化时指定每个数组元素的初始值,由系统决定数组长度。
  2. 初始化格式
    • 格式:数据类型[ ] 变量名 = new 数据类型[ ]{数据 1,数据 2,数据 3,....};
    • 范例:int [] arr = new int[]{1,2,3};

数组元素访问

  1. 数组变量访问方式

    • 格式:数组名
  2. 数组内部保存的数据的访问方式

    • 格式:数组名[索引] (索引从 0 开始)
  3. 数组在初始化时,会为存储空间添加默认值

    • 整数:默认值 0
    • 浮点数:默认值 0.0
    • 布尔值:默认值 false
    • 字符:默认值是空字符
    • 引用数据类型:默认值是 null

内存分配

  1. 栈内存:存储局部变量(定义在方法中的变量,使用完毕后立即消失)

  2. 堆内存:存储 new 出来的内容(实体对象

    每一个 new 出来的东西都有一个地址值,使用完毕后会在垃圾回收器空闲时被回收。

数组操作常见问题

  • 索引越界:访问了数组中不存在的索引对应的元素,造成索引越界的问题。
  • 空指针异常:访问的数组已经不再指向堆内存的数据,造成空指针异常。
  • null:空值,引用数据类型的默认值,表示不指向任何有效对象。
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3174 引用 • 8212 回帖 • 1 关注
  • 语法
    4 引用 • 3 回帖
  • 数组
    8 引用 • 6 回帖
  • 运算符
    1 引用 • 2 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • YUNSUO

    不是,哥,怎么感觉前面很基础,后面怎么就有的跳跃了

    1 回复
  • wangdj
    作者

    😄 感谢您的建议,我将调整文章顺序。由于积分不足,文章同步到社区的频率会较慢,您可以关注我的博客 qntop.com