Java 基本语法详解(一)

AI的出现,是否能替代IT从业者? 10w+人浏览 1.6k人参与

Java 基本语法详解(一)

Java 是一种面向对象的编程语言,其语法具有严谨性、跨平台性和易读性的特点。掌握基本语法是编写 Java 程序的基础,以下将从程序结构、核心语法要素到常见语法规则,进行系统梳理。

一、Java 程序的基本结构

一个完整的 Java 程序需遵循固定结构,以最简单的 “Hello World” 程序为例,可清晰理解其组成部分:

// 1. 包声明(可选,用于组织代码,避免类名冲突)
package com.example.basic;

// 2. 导入其他包的类(可选,使用非当前包的类时需导入)
import java.util.Scanner;

// 3. 类定义(Java 程序的最小单位,每个 .java 文件最多 1 个 public 类,且类名与文件名一致)
public class HelloWorld {
    // 4. 主方法(程序入口,固定格式:public static void main(String[] args))
    public static void main(String[] args) {
        // 5. 语句(执行具体逻辑,需以分号 ; 结尾)
        System.out.println("Hello, Java!"); // 输出语句,打印内容到控制台
    }
}

核心结构说明:

  1. 包声明(package):通过 package 关键字指定类所属的包,格式为 “包名。子包名”(如 com.example.basic),包名通常采用 “倒置域名” 规则(如公司域名 baidu.com 对应包名 com.baidu)。

  2. 导入语句(import):通过 import 关键字引入其他包中的类(如 java.util.Scanner 是用于输入的类),若使用 java.lang 包下的类(如 String、System),可无需导入(JVM 自动加载)。

  3. 类定义(class):Java 是 “类级语言”,所有代码必须放在类中。public 修饰的类为 “公共类”,要求文件名与类名完全一致(包括大小写);非 public 类可多个存在于一个 .java 文件中。

  4. 主方法(main):程序的 “入口点”,JVM 运行程序时会首先执行 main 方法,其格式固定:

  • public:公开访问权限,确保 JVM 可调用;

  • static:静态方法,无需创建类的对象即可调用;

  • void:无返回值;

  • String[] args:参数数组,用于接收命令行传入的参数(如运行 java HelloWorld 123,args[0] 即为 “123”)。

二、变量与数据类型

变量是存储数据的容器,Java 是 “强类型语言”,声明变量时必须指定数据类型,且赋值需与类型匹配。

1. 基本数据类型(8 种,存储原始值)

Java 提供 8 种基本数据类型,分为 “数值型”“字符型”“布尔型” 三类,具体如下:

类型分类数据类型占用内存取值范围说明
整数型byte1 字节-128 ~ 127最小整数类型,适合存储小范围整数
整数型short2 字节-32768 ~ 32767短整数类型
整数型int4 字节-2³¹ ~ 2³¹-1默认整数类型(如 123 默认为 int)
整数型long8 字节-2⁶³ ~ 2⁶³-1长整数类型,赋值时需加后缀 L(如 123L)
浮点型float4 字节±3.4×10³⁸单精度浮点数,赋值时需加后缀 F(如 3.14F)
浮点型double8 字节±1.8×10³⁰⁸默认浮点类型(如 3.14 默认为 double)
字符型char2 字节0 ~ 65535存储单个字符,用单引号包裹(如 ‘A’、‘中’),本质是 Unicode 编码值
布尔型boolean1 字节true / false存储逻辑值,用于条件判断(如 boolean isSuccess = true)
示例:基本数据类型的声明与赋值
public class PrimitiveTypeDemo {
    public static void main(String[] args) {
        byte age = 25; // 整数型(byte)
        int score = 98; // 整数型(int,默认)
        long distance = 1000000000L; // 整数型(long,加 L 后缀)
        
        float pi1 = 3.14F; // 浮点型(float,加 F 后缀)
        double pi2 = 3.1415926; // 浮点型(double,默认)
        
        char ch = 'J'; // 字符型(单引号)
        boolean isPass = true; // 布尔型
        
        // 输出变量值
        System.out.println("年龄:" + age);
        System.out.println("圆周率(double):" + pi2);
    }
}

2. 引用数据类型(存储内存地址,指向对象)

引用数据类型基于基本类型扩展,包括 “类(Class)”“接口(Interface)”“数组(Array)” 等,常见示例:

  • 字符串类型:String(特殊的类,用于存储字符串,用双引号包裹,如 “Java”);

  • 数组:如 int[] arr(存储多个同类型数据);

  • 自定义类:如前面的 HelloWorld 类,需通过 new 关键字创建对象(如 HelloWorld demo = new HelloWorld())。

示例:引用数据类型的使用
public class ReferenceTypeDemo {
    public static void main(String[] args) {
        // String 类型(引用类型)
        String name = "Alice";
        System.out.println("姓名:" + name);
        
        // 数组(引用类型)
        int[] scores = {90, 85, 95}; // 初始化一个 int 数组
        System.out.println("数组长度:" + scores.length); // 数组的 length 属性(获取长度)
        System.out.println("第二个元素:" + scores[1]); // 数组下标从 0 开始
        
        // 自定义类(引用类型,需先创建对象)
        Student student = new Student(); // new 关键字创建 Student 对象
        student.name = "Bob"; // 给对象的属性赋值
        student.age = 20;
        student.study(); // 调用对象的方法
    }
}

// 自定义类(引用类型的定义)
class Student {
    // 类的属性(成员变量)
    String name;
    int age;
    
    // 类的方法(成员方法)
    void study() {
        System.out.println(name + "正在学习 Java!");
    }
}

3. 变量的作用域

变量的作用域指其可被访问的范围,由声明位置决定,主要分为:

  • 局部变量:在方法、代码块(如 if、for)内部声明,作用域仅限于当前方法 / 代码块,必须手动初始化后才能使用(否则编译报错);

  • 成员变量:在类内部、方法外部声明(如 Student 类的 name、age),作用域覆盖整个类,默认有初始值(如 int 默认为 0,String 默认为 null)。

示例:变量作用域
public class VariableScopeDemo {
    // 成员变量(类内部,方法外部)
    int memberVar = 100; // 默认初始化
    
    public void test() {
        // 局部变量(方法内部)
        int localVar; 
        // System.out.println(localVar); // 编译报错:局部变量未初始化
        
        localVar = 200; // 手动初始化后可使用
        System.out.println("局部变量:" + localVar);
        System.out.println("成员变量:" + memberVar); // 可访问成员变量
    }
    
    public static void main(String[] args) {
        VariableScopeDemo demo = new VariableScopeDemo();
        demo.test();
        // System.out.println(localVar); // 编译报错:局部变量作用域不包含 main 方法
    }
}

三、运算符

运算符用于对数据进行运算,Java 提供丰富的运算符,按功能可分为以下几类:

1. 算术运算符(用于数值计算)

运算符功能示例结果
+加法 / 字符串拼接3 + 5 / “Hello” + “Java”8 / “HelloJava”
-减法10 - 46
*乘法2 * 612
/除法(整数除法取商,浮点数除法取精确值)10 / 3 / 10.0 / 33 / 3.333…
%取模(求余数,符号与被除数一致)10 % 3 / -10 % 31 / -1
++自增(前置:先增后用;后置:先用后增)int a=5; System.out.println(++a); / int b=5; System.out.println(b++);6 / 5(a 最终为 6,b 最终为 6)
自减(规则同自增)int c=5; System.out.println(–c);4(c 最终为 4)
注意:
  • 字符串与其他类型拼接时,其他类型会自动转为字符串(如 “年龄:” + 25 结果为 “年龄:25”);

  • 整数除法中,若除数为 0,会抛出 ArithmeticException(算术异常)。

2. 赋值运算符(用于给变量赋值)

  • 基本赋值:=(如 int a = 5);

  • 复合赋值:+=、-=、*=、/=、%=(简化代码,且隐含自动类型转换),示例:

int x = 10;
x += 5; // 等价于 x = x + 5 → 结果 15
x *= 2; // 等价于 x = x * 2 → 结果 30

3. 比较运算符(用于判断条件,返回 boolean 类型)

运算符功能示例结果
==判断是否相等(基本类型比值,引用类型比地址)3 == 5 / “a” == “a”false / true
!=判断是否不相等3 != 5true
>判断左 > 右5 > 3true
<判断左 < 右5 < 3false
>=判断左 >= 右5 >= 5true
<=判断左 <= 右5 <= 3false
注意:
  • 引用类型用 == 比较时,比较的是 “内存地址”(是否为同一个对象),若需比较内容,需用 equals() 方法(如 String 类的 equals(),示例:“abc”.equals(“abc”) → true)。

4. 逻辑运算符(用于组合条件,操作 boolean 类型)

运算符功能特点(短路特性)示例结果
&&逻辑与(全 true 则 true)左为 false 时,右不执行(3>2) && (5<10)true
||逻辑或(有 true 则 true)左为 true 时,右不执行`(3>5)
!逻辑非(取反)-!(3>5)true
示例:短路特性
int a = 5;
// && 短路:左 (a>10) 为 false,右 (a++) 不执行,a 仍为 5
boolean flag1 = (a > 10) && (a++ > 0); 
System.out.println("flag1:" + flag1 + ",a:" + a); // false,5

// || 短路:左 (a<10) 为 true,右 (a++) 不执行,a 仍为 5
boolean flag2 = (a < 10) || (a++ > 0); 
System.out.println("flag2:" + flag2 + ",a:" + a); // true,5

5. 三元运算符(三目运算符,简化条件判断)

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

  • 若条件表达式为 true,执行表达式 1 并返回结果;

  • 若条件表达式为 false,执行表达式 2 并返回结果。

示例:
int score = 85;
// 判断分数是否及格,返回对应提示
String result = (score >= 60) ? "及格" : "不及格";
System.out.println(result); // 输出:及格

四、流程控制语句

流程控制用于控制程序的执行顺序,主要分为 “顺序结构”“分支结构”“循环结构” 三类(顺序结构为默认,代码自上而下执行)。

1. 分支结构(根据条件执行不同代码)

(1)if-else 语句(单分支 / 双分支)

格式:

// 单分支(条件成立则执行)
if (条件表达式) {
    // 条件为 true 时执行的代码块
}

// 双分支(条件成立/不成立分别执行)
if (条件表达式) {
    // 条件为 true 时执行
} else {
    // 条件为 false 时执行
}

// 多分支(多个条件判断)
if (条件1) {
    // 条件1 为 true 时执行
} else if (条件2) {
    // 条件1 为 false,条件2 为 true 时执行
} else {
    // 所有条件都为 false 时执行
}
示例:成绩分级判断
public class IfElseDemo {
    public static void main(String[] args) {
        int score = 92;
        if (score >= 90) {
            System.out.println("成绩等级:优秀");
        } else if (score >= 80) {
            System.out.println("成绩等级:良好");
        } else if (score >= 60) {
            System.out.println("成绩等级:及格");
        } else {
            System.out.println("成绩等级:不及格");
        }
    }
}
(2)switch 语句(多值匹配,适合固定值判断)

格式:

switch (表达式) { // 表达式类型:byte、short、int、char、String、枚举
    case 值1:
        // 表达式 == 值1 时执行
        break; // 跳出 switch(若省略,会继续执行下一个 case)
    case 值2:
        // 表达式 == 值2 时执行
        break;
    ...
    default:
        // 表达式不匹配任何 case 时执行(可选)
        break;
}
示例:根据月份判断季节
public class SwitchDemo {
    public static void main(String[] args) {
        int month = 3;
        switch (month) {
            case 3:
            case 4:
            case 5:
                System.out.println("季节:春季");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("季节:夏季");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("季节:秋季");
                break;
            case 12:
            case 1:
            case 2:
                System.out.println("季节:冬季");
                break;
            default:
                System.out.println("无效月份");
                break;
        }
    }
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值