跳到主要内容

第2章:语法基础对比

作为 Java 开发者,你已经熟悉了 Java 的语法结构。Python 的语法更加简洁直观,但也有一些重要的区别。本章将详细对比两种语言的基础语法。

2.1 代码结构

Java 代码结构

// 包声明
package com.example;

// 导入语句
import java.util.ArrayList;
import java.util.List;

// 类声明
public class Example {
// 主方法
public static void main(String[] args) {
// 代码块
System.out.println("Hello");
}
}

Python 代码结构

# 导入语句
import os
import sys

# 函数定义
def main():
# 代码块
print("Hello")

# 执行入口
if __name__ == "__main__":
main()

对比

特性JavaPython
包管理使用 package 声明使用目录结构和 __init__.py 文件
导入语句import 语句,支持通配符import 语句,支持别名和部分导入
代码块使用大括号 {}使用缩进(通常4个空格)
主方法必须有 main 方法没有强制的主方法,使用 if __name__ == "__main__"
语句结束必须使用分号 ;不需要分号(可选)
注释// 单行注释,/* */ 多行注释# 单行注释,''' '''""" """ 多行注释

2.2 变量声明

Java 变量声明

// 变量声明
int age = 25;
String name = "Alice";
double salary = 50000.0;
boolean isEmployee = true;

// 常量
final int MAX_AGE = 100;

Python 变量声明

# 变量声明(动态类型)
age = 25
name = "Alice"
salary = 50000.0
is_employee = True

# 常量(约定俗成,无强制)
MAX_AGE = 100

对比

特性JavaPython
类型声明必须显式声明类型动态类型,无需声明类型
变量命名驼峰命名法(camelCase)蛇形命名法(snake_case)
常量使用 final 关键字约定使用全大写字母
类型检查编译时类型检查运行时类型检查
变量初始化可以声明后初始化声明时必须初始化

2.3 数据类型

Java 数据类型

  • 基本类型:byte, short, int, long, float, double, char, boolean
  • 引用类型:String, Integer, ArrayList, 自定义类等

Python 数据类型

  • 基本类型:int, float, str, bool, None
  • 容器类型:list, tuple, dict, set
  • 其他类型:bytes, bytearray, range 等

对比

Java 类型Python 类型说明
intintPython 的 int 没有大小限制
doublefloatPython 只有一种浮点类型
charstrPython 中单个字符也是字符串
booleanboolPython 使用 True/False(首字母大写)
StringstrPython 的字符串更灵活
int[]listPython 的列表可以包含不同类型
List<T>listPython 列表无需指定类型
Map<K,V>dictPython 的字典类似 Java 的 Map
Set<T>setPython 的集合类似 Java 的 Set

2.4 操作符

算术操作符

操作符JavaPython说明
+相同相同加法
-相同相同减法
*相同相同乘法
/整数除法截断浮点数除法Python 3 中 / 总是浮点数除法
%相同相同取模
++Python 中使用 x += 1
--Python 中使用 x -= 1
**幂运算(Python)
//整数除法(Python)

比较操作符

操作符JavaPython说明
==相同相同相等比较
!=相同相同不等比较
>相同相同大于
<相同相同小于
>=相同相同大于等于
<=相同相同小于等于
instanceofPython 使用 isinstance() 函数
===两者都没有

逻辑操作符

JavaPython说明
&&and逻辑与
||or逻辑或
!not逻辑非

赋值操作符

操作符JavaPython说明
=相同相同赋值
+=相同相同加赋值
-=相同相同减赋值
*=相同相同乘赋值
/=相同相同除赋值
%=相同相同取模赋值
**=幂赋值(Python)
//=整数除法赋值(Python)

2.5 字符串操作

Java 字符串

String str = "Hello";
String str2 = str + " World";
String str3 = String.format("Name: %s, Age: %d", name, age);
int length = str.length();
boolean contains = str.contains("ell");
String upper = str.toUpperCase();

Python 字符串

str = "Hello"
str2 = str + " World"
str3 = f"Name: {name}, Age: {age}" # f-string
length = len(str)
contains = "ell" in str
upper = str.upper()

对比

操作JavaPython
字符串拼接+StringBuilder+ 或 f-string
字符串格式化String.format()f-string、format()、% 操作符
字符串长度length() 方法len() 函数
包含检查contains() 方法in 操作符
大小写转换toUpperCase()、toLowerCase()upper()、lower()
字符串切片复杂简单:str[0:5]
多行字符串需要 \n 或 StringBuilder三引号 '''"""

2.6 输入输出

Java 输入输出

// 输出
System.out.println("Hello");
System.out.print("Hello ");
System.out.printf("Name: %s\n", name);

// 输入
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
int number = scanner.nextInt();

Python 输入输出

# 输出
print("Hello")
print("Hello ", end="") # 不换行
print(f"Name: {name}")

# 输入
input_str = input("Enter something: ")
number = int(input("Enter a number: "))

对比

操作JavaPython
输出System.out.println()print()
不换行输出System.out.print()print(..., end="")
格式化输出System.out.printf()print(f"...")
输入Scannerinput() 函数
类型转换手动转换使用类型函数转换

2.7 代码风格

Java 代码风格

  • 缩进:通常使用 4 个空格或 1 个制表符
  • 大括号:新行开始
  • 命名:驼峰命名法(camelCase)
  • 每行长度:通常不超过 100 字符

Python 代码风格

  • 缩进:强制使用 4 个空格(PEP 8 规范)
  • 大括号:不需要,使用缩进
  • 命名:
    • 变量和函数:蛇形命名法(snake_case)
    • 类:驼峰命名法(CamelCase)
    • 常量:全大写(UPPER_CASE)
  • 每行长度:通常不超过 79 字符(PEP 8 规范)

2.8 常见语法错误对比

Java 常见错误

  • 缺少分号 ;
  • 大括号不匹配
  • 类型不匹配
  • 未声明的变量
  • 访问控制错误

Python 常见错误

  • 缩进错误(最常见)
  • 变量名拼写错误
  • 冒号 : 缺失
  • 引号不匹配
  • 混合使用空格和制表符

2.9 练习

  1. 变量练习:创建 Python 变量存储个人信息(姓名、年龄、职业),并打印出来
  2. 字符串练习:使用 f-string 格式化输出个人信息
  3. 操作符练习:实现一个简单的计算器,支持加减乘除
  4. 输入输出练习:编写程序,输入两个数,计算它们的和并输出
  5. 代码风格练习:按照 PEP 8 规范重写以下代码:
    def calculate(a,b):
    return a+b
    name="alice"
    age=25
    print(Name+" is "+str(age)+" years old")

2.10 小结

  • Python 的语法比 Java 更简洁,减少了样板代码
  • Python 使用缩进代替大括号,强制代码风格一致性
  • Python 的动态类型系统让代码更灵活,但也需要更多的运行时检查
  • Python 的字符串操作更直观,特别是 f-string 格式化
  • Python 的操作符更丰富,如 ** 幂运算和 // 整数除法
  • Python 的输入输出更简单,不需要额外的类

通过本章的学习,你已经了解了 Java 和 Python 在语法基础上的主要区别。接下来,我们将深入学习 Python 的数据类型和操作。