一、Java程序的基本结构

一个最简单的Java程序通常包含一个类定义和一个main方法。

public class HelloWorld { // 定义一个名为HelloWorld的公共类
    public static void main(String[] args) { // 程序执行的入口点
        System.out.println("Hello, World!"); // 在控制台输出文本
    }
}

  • public class HelloWorld { ... }: 定义了一个类。类名(这里是HelloWorld)必须与文件名(HelloWorld.java)一致。
  • public static void main(String[] args) { ... }: 这是程序的入口方法。Java程序从这里开始执行。
  • System.out.println("Hello, World!");: 用于在控制台输出文本。println会在输出后换行,print则不会。

二、变量声明与数据类型

变量用于存储数据。在Java中,使用变量前需要声明其类型和名称。

int age = 25; // 声明一个整数变量age并初始化为25
double price = 19.99; // 声明一个双精度浮点数变量price
char grade = 'A'; // 声明一个字符变量grade
boolean isJavaFun = true; // 声明一个布尔变量isJavaFun
String name = "Alice"; // 声明一个字符串变量name

常见基本数据类型

  • int: 整数 (例如:42, -10)
  • double: 双精度浮点数 (例如:3.14, -2.5)
  • float: 单精度浮点数 (声明时需要加f后缀,例如:3.14f)
  • char: 单个字符 (用单引号括起来,例如:'a', '$')
  • boolean: 布尔值 (truefalse)
  • String: 字符串 (用双引号括起来,例如:"Hello")。注意:String不是基本类型,而是类。

变量命名规则

  • 以字母、数字、下划线_或美元符号$开头。
  • 后面可以跟字母、数字、下划线_或美元符号$
  • 区分大小写。
  • 不能是Java关键字(如int, class, public等)。
  • 建议使用驼峰命名法(如myVariableName)。
  • 不可以数字开头

三、运算符

运算符用于对变量和值进行操作。

1. 算术运算符

用于基本的数学运算。

int a = 10;
int b = 3;

int sum = a + b; // 加法, sum = 13
int difference = a - b; // 减法, difference = 7
int product = a * b; // 乘法, product = 30
int quotient = a / b; // 除法 (整数除法), quotient = 3 (注意:不是3.333...)
int remainder = a % b; // 取模 (求余数), remainder = 1

a++; // 等同于 a = a + 1; (后置自增)
++a; // 等同于 a = a + 1; (前置自增)
b--; // 等同于 b = b - 1; (后置自减)
--b; // 等同于 b = b - 1; (前置自减)

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

用于比较两个值,返回布尔结果(truefalse)。

int x = 5;
int y = 10;

boolean isEqual = (x == y); // 等于, isEqual = false
boolean notEqual = (x != y); // 不等于, notEqual = true
boolean greaterThan = (x > y); // 大于, greaterThan = false
boolean lessThan = (x < y); // 小于, lessThan = true
boolean greaterOrEqual = (x >= y); // 大于等于, greaterOrEqual = false
boolean lessOrEqual = (x <= y); // 小于等于, lessOrEqual = true

3. 逻辑运算符

用于组合布尔表达式。

boolean a = true;
boolean b = false;

boolean andResult = a && b; // 逻辑与 (AND), 两个都为true才true, andResult = false
boolean orResult = a || b; // 逻辑或 (OR), 一个为true就true, orResult = true
boolean notResult = !a; // 逻辑非 (NOT), 取反, notResult = false

4. 赋值运算符

用于给变量赋值。

int num = 10; // 简单赋值

num += 5; // 等同于 num = num + 5; (加后赋值)
num -= 3; // 等同于 num = num - 3; (减后赋值)
num *= 2; // 等同于 num = num * 2; (乘后赋值)
num /= 4; // 等同于 num = num / 4; (除后赋值)
num %= 3; // 等同于 num = num % 3; (取模后赋值)

5. 位运算符 (了解即可,初学不常用)

直接操作整数的二进制位(&, |, ^, ~, <<, >>, >>>)。

位运算符详解

位运算符是直接对整数在内存中的二进制位进行操作的运算符。它们主要用于底层编程、硬件操作和性能优化场景。

基本位运算符

1. 按位与(&)

  • 功能:对两个数的二进制表示的每一位进行比较,当两个对应位都为1时,结果的该位才为1,否则为0
  • 示例
    5 & 3 = 1
    // 5: 0101
    // 3: 0011
    // & ----
    //    0001 (1)
    

  • 应用场景:掩码操作、检查特定位是否设置

2. 按位或(|)

  • 功能:对两个数的二进制表示的每一位进行比较,当两个对应位中至少有一个为1时,结果的该位为1
  • 示例
    5 | 3 = 7
    // 5: 0101
    // 3: 0011
    // | ----
    //    0111 (7)
    

  • 应用场景:设置特定位的值

3. 按位异或(^)

  • 功能:对两个数的二进制表示的每一位进行比较,当两个对应位不相同时,结果的该位为1
  • 示例
    5 ^ 3 = 6
    // 5: 0101
    // 3: 0011
    // ^ ----
    //    0110 (6)
    

  • 应用场景:交换变量值、加密算法
  • 不同为1,相同为0

4. 按位取反(~)

  • 功能:对一个数的二进制表示的每一位进行取反操作(0变1,1变0)
  • 示例
    ~5 = -6
    // 5: 0000 0101
    // ~: 1111 1010 (-6的补码表示)
    

  • 注意:结果与数据类型和位数有关

移位运算符

1. 左移(<<)

  • 功能:将数的二进制表示向左移动指定位数,右侧补0
  • 示例
    5 << 1 = 10
    // 5: 0101
    // <<1: 1010 (10)
    

  • 效果:相当于乘以2的n次方(n为移动位数)

2. 右移(>>)

  • 功能:将数的二进制表示向右移动指定位数
    • 对于无符号数:左侧补0
    • 对于有符号数:实现定义(通常补符号位)
  • 示例
    5 >> 1 = 2
    // 5: 0101
    // >>1: 0010 (2)
    

  • 效果:相当于除以2的n次方(n为移动位数)

复合位运算符

这些运算符将位运算与赋值结合:

  • &=
  • |=
  • ^=
  • <<=
  • >>=

实际应用示例

  1. 权限控制

    #define READ 0x1    // 0001
    #define WRITE 0x2   // 0010
    #define EXECUTE 0x4 // 0100
    
    int permissions = READ | WRITE; // 0011 (3)
    if (permissions & READ) {
        // 有读权限
    }
    

  2. 快速乘除

    int x = 10;
    x = x << 1; // 相当于 x * 2
    x = x >> 2; // 相当于 x / 4
    

  3. 交换变量

    void swap(int *a, int *b) {
        *a ^= *b;
        *b ^= *a;
        *a ^= *b;
    }
    

注意事项

  1. 移位运算的位数不应超过或等于操作数的位数(如32位int不应移位≥32位)
  2. 右移有符号数的行为是实现定义的
  3. 位运算通常只适用于整数类型
  4. 注意运算符优先级,必要时使用括号

位运算虽然强大,但在现代编程中应谨慎使用,优先考虑代码可读性,除非确实需要性能优化或底层操作。

四、基本控制流语句

1. if-else 条件语句

根据条件决定执行哪段代码。

int score = 85;

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 语句 (适用于等值判断)

根据一个变量的不同取值执行不同分支。

int day = 3;
switch (day) {
    case 1:
        System.out.println("星期一");
        break; // break防止执行下一个case
    case 2:
        System.out.println("星期二");
        break;
    case 3:
        System.out.println("星期三"); // 这个会被执行
        break;
    // ... 其他case
    default:
        System.out.println("无效的日期");
}

3. 循环语句

  • while 循环: 当条件为真时重复执行代码块。
int count = 0;
while (count < 5) {
    System.out.println("Count is: " + count);
    count++; // 改变循环条件变量
}

  • do-while 循环: 先执行一次代码块,然后检查条件。至少执行一次。
int count = 0;
do {
    System.out.println("Count is: " + count);
    count++;
} while (count < 5);

  • for 循环: 最常用的循环,在头部声明循环变量、条件和步进。
for (int i = 0; i < 5; i++) { // 初始化i=0; 条件i<5; 每次循环后i增加1
    System.out.println("i is: " + i);
}

4. breakcontinue

  • break: 立即跳出当前循环或switch语句。
  • continue: 跳过当前循环的剩余部分,直接进入下一次循环。
for (int i = 0; i < 10; i++) {
    if (i == 5) {
        break; // 当i等于5时,跳出整个循环
    }
    if (i % 2 == 0) {
        continue; // 如果i是偶数,跳过本次循环的剩余代码,进入下一次循环
    }
    System.out.println(i); // 只会打印奇数,并且遇到5就停止了
}

五、注释

注释用于解释代码,不会被编译器执行。

// 这是单行注释

/*
这是
多行
注释
*/

/**
 * 这是文档注释,常用于生成API文档
 * @param args 命令行参数
 */

希望这个概述能帮助你开始学习Java!练习是掌握的关键,多动手写代码吧。

更多推荐