
Java作为一门面向对象的编程语言,其基础语法是构建复杂应用的基石。本章将系统讲解Java语言基础,包括简单程序开发、数据类型、运算符和类型转换等核心内容。每个知识点都配有完整可运行的代码示例,帮助读者深入理解。

本章内容的思维导图概览

Java中使用Scanner类获取用户输入:
import java.util.Scanner;
public class KeyboardInput {
public static void main(String[] args) {
// 创建Scanner对象
Scanner scanner = new Scanner(System.in);
System.out.print("请输入您的姓名: ");
String name = scanner.nextLine(); // 读取字符串
System.out.print("请输入您的年龄: ");
int age = scanner.nextInt(); // 读取整数
System.out.println("\n--- 用户信息 ---");
System.out.println("姓名: " + name);
System.out.println("年龄: " + age);
scanner.close(); // 关闭Scanner
}
}变量是存储数据的基本单元:
public class VariablesDemo {
public static void main(String[] args) {
// 变量声明与赋值
int score = 95; // 整型变量
double price = 19.99; // 双精度浮点
char grade = 'A'; // 字符
boolean isPassed = true; // 布尔
// 变量重新赋值
score = 100;
// 同时声明多个变量
int x = 5, y = 10, z = 15;
System.out.println("成绩: " + score);
System.out.println("价格: " + price);
System.out.println("等级: " + grade);
System.out.println("是否通过: " + isPassed);
}
}标识符命名规则:
public class Identifiers {
public static void main(String[] args) {
// 有效标识符
int userAge = 25;
double $salary = 5000.50;
String _firstName = "张";
// 无效标识符(编译错误)
// int 2ndValue = 10; // 不能以数字开头
// double my-salary = 4000; // 不能包含减号
System.out.println("用户年龄: " + userAge);
}
}Java保留的关键字不能用作标识符:
public class Keywords {
public static void main(String[] args) {
// 常见关键字示例
int count = 10; // int是关键字
boolean flag = false; // boolean是关键字
double value = 3.14; // double是关键字
// 错误用法示例(编译错误)
// int int = 5; // 不能使用关键字作为变量名
System.out.println("计数: " + count);
}
}Java数据类型分为两大类:
下面是数据类型关系的类图:
@startuml
title Java数据类型体系
class DataType {
+ 分类
}
class PrimitiveType {
+ byte
+ short
+ int
+ long
+ float
+ double
+ char
+ boolean
}
class ReferenceType {
+ String
+ 数组
+ 类
+ 接口
}
DataType <|-- PrimitiveType
DataType <|-- ReferenceType
@enduml
public class LiteralsConstants {
public static void main(String[] args) {
// 整数字面值
int decimal = 100; // 十进制
int octal = 0144; // 八进制
int hex = 0x64; // 十六进制
int binary = 0b1100100; // 二进制
// 浮点字面值
double price = 19.99; // 标准形式
double scientific = 1.23e5; // 科学计数法(1.23×10⁵)
// 字符字面值
char letter = 'A';
char unicodeChar = '\u0041'; // Unicode字符'A'
// 字符串字面值
String message = "Hello Java!";
// 常量(使用final关键字)
final double PI = 3.14159;
// PI = 3.14; // 错误!常量不可修改
System.out.println("二进制字面值: " + binary);
System.out.println("科学计数法: " + scientific);
System.out.println("Unicode字符: " + unicodeChar);
System.out.println("常量PI: " + PI);
}
}public class IntegerTypes {
public static void main(String[] args) {
// 4种整数类型
byte b = 127; // 1字节, -128~127
short s = 32767; // 2字节, -32768~32767
int i = 2147483647; // 4字节, -2³¹~2³¹-1
long l = 9223372036854775807L; // 8字节, 结尾加L
System.out.println("byte最大值: " + Byte.MAX_VALUE);
System.out.println("short最大值: " + Short.MAX_VALUE);
System.out.println("int最大值: " + Integer.MAX_VALUE);
System.out.println("long最大值: " + Long.MAX_VALUE);
// 数值溢出示例
int maxInt = Integer.MAX_VALUE;
System.out.println("int溢出: " + (maxInt + 1)); // 输出最小值
}
}public class FloatingPointTypes {
public static void main(String[] args) {
// 两种浮点类型
float f = 3.14159f; // 4字节, 结尾加f
double d = 3.141592653589793; // 8字节
// 特殊浮点值
double positiveInfinity = Double.POSITIVE_INFINITY;
double negativeInfinity = Double.NEGATIVE_INFINITY;
double nan = Double.NaN; // 非数字
System.out.println("float值: " + f);
System.out.println("double值: " + d);
System.out.println("正无穷大: " + positiveInfinity);
System.out.println("负无穷大: " + negativeInfinity);
System.out.println("非数字: " + nan);
// 浮点精度问题
System.out.println("0.1 + 0.2 = " + (0.1 + 0.2)); // 0.30000000000000004
}
}public class CharType {
public static void main(String[] args) {
// 字符表示
char c1 = 'A'; // 单字符
char c2 = 65; // ASCII值
char c3 = '\u0041'; // Unicode
// 转义字符
char newline = '\n';
char tab = '\t';
char backslash = '\\';
System.out.println("字符表示: " + c1 + ", " + c2 + ", " + c3);
System.out.println("转义字符示例: Hello" + newline + tab + "World!");
System.out.println("反斜杠: " + backslash);
}
}public class BooleanType {
public static void main(String[] args) {
boolean isJavaFun = true;
boolean isFishTasty = false;
System.out.println("Java有趣吗? " + isJavaFun);
System.out.println("鱼好吃吗? " + isFishTasty);
// 布尔表达式
int x = 10, y = 20;
boolean result = (x > y);
System.out.println("x > y 吗? " + result);
}
}public class StringType {
public static void main(String[] args) {
// 创建字符串
String s1 = "Hello";
String s2 = new String("World");
// 字符串操作
String combined = s1 + " " + s2; // 连接
int length = combined.length(); // 长度
char firstChar = combined.charAt(0); // 获取字符
String upper = combined.toUpperCase(); // 转大写
System.out.println("连接结果: " + combined);
System.out.println("字符串长度: " + length);
System.out.println("第一个字符: " + firstChar);
System.out.println("大写形式: " + upper);
// 字符串不可变性
String original = "Java";
original.toUpperCase(); // 创建新字符串
System.out.println("原始字符串: " + original); // 输出"Java"
}
}public class ArithmeticOperators {
public static void main(String[] args) {
int a = 10, b = 3;
System.out.println("a + b = " + (a + b)); // 13
System.out.println("a - b = " + (a - b)); // 7
System.out.println("a * b = " + (a * b)); // 30
System.out.println("a / b = " + (a / b)); // 3 (整数除法)
System.out.println("a % b = " + (a % b)); // 1 (取余)
// 自增自减
int c = 5;
System.out.println("c++ = " + c++); // 5 (后置)
System.out.println("++c = " + ++c); // 7 (前置)
}
}public class RelationalOperators {
public static void main(String[] args) {
int x = 10, y = 20;
System.out.println("x > y: " + (x > y)); // false
System.out.println("x < y: " + (x < y)); // true
System.out.println("x >= 10: " + (x >= 10)); // true
System.out.println("y <= 20: " + (y <= 20)); // true
System.out.println("x == 10: " + (x == 10)); // true
System.out.println("x != 10: " + (x != 10)); // false
}
}public class LogicalOperators {
public static void main(String[] args) {
boolean a = true, b = false;
System.out.println("a && b: " + (a && b)); // false (与)
System.out.println("a || b: " + (a || b)); // true (或)
System.out.println("!a: " + (!a)); // false (非)
// 短路特性演示
int x = 5, y = 10;
boolean result = (x > 10) && (y++ > 0); // 第一个条件为false,第二个不执行
System.out.println("y的值: " + y); // 10 (未改变)
}
}public class AssignmentOperators {
public static void main(String[] args) {
int num = 10;
num += 5; // 等同于 num = num + 5
System.out.println("+= : " + num); // 15
num -= 3; // 等同于 num = num - 3
System.out.println("-= : " + num); // 12
num *= 2; // 等同于 num = num * 2
System.out.println("*= : " + num); // 24
num /= 4; // 等同于 num = num / 4
System.out.println("/= : " + num); // 6
num %= 4; // 等同于 num = num % 4
System.out.println("%= : " + num); // 2
}
}public class BitwiseOperators {
public static void main(String[] args) {
int a = 5; // 二进制: 0101
int b = 3; // 二进制: 0011
System.out.println("a & b: " + (a & b)); // 0001 = 1 (按位与)
System.out.println("a | b: " + (a | b)); // 0111 = 7 (按位或)
System.out.println("a ^ b: " + (a ^ b)); // 0110 = 6 (按位异或)
System.out.println("~a: " + (~a)); // 1010 = -6 (按位取反)
System.out.println("a << 1: " + (a << 1)); // 1010 = 10 (左移)
System.out.println("a >> 1: " + (a >> 1)); // 0010 = 2 (带符号右移)
System.out.println("a >>> 1: " + (a >>> 1)); // 0010 = 2 (无符号右移)
}
}运算符优先级从高到低:
优先级 | 运算符 | 结合性 |
|---|---|---|
最高 | ()、[]、. | 左到右 |
!、~、++、--、+、- | 右到左 | |
*、/、% | 左到右 | |
+、- | 左到右 | |
<<、>>、>>> | 左到右 | |
<、<=、>、>=、instanceof | 左到右 | |
==、!= | 左到右 | |
& | 左到右 | |
^ | 左到右 | |
| | 左到右 | |
&& | 左到右 | |
|| | 左到右 | |
?: | 右到左 | |
=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=、>>>= | 右到左 |
public class OperatorPrecedence {
public static void main(String[] args) {
int result = 5 + 2 * 3; // 乘法优先于加法
System.out.println("5 + 2 * 3 = " + result); // 11
boolean logical = true || false && false; // &&优先于||
System.out.println("true || false && false = " + logical); // true
}
}
public class AutoConversion {
public static void main(String[] args) {
// 小类型转大类型:自动转换
int intVal = 100;
long longVal = intVal; // int自动转long
double doubleVal = longVal; // long自动转double
System.out.println("int转long: " + longVal);
System.out.println("long转double: " + doubleVal);
// 表达式中的自动转换
double result = 10 + 20.5; // int自动转double
System.out.println("表达式转换: " + result); // 30.5
}
}public class CastingConversion {
public static void main(String[] args) {
// 大类型转小类型:需要强制转换
double doubleVal = 10.5;
int intVal = (int) doubleVal; // 强制转换,丢失小数部分
System.out.println("double转int: " + intVal); // 10
// 整数类型强制转换
int bigNum = 200;
byte smallByte = (byte) bigNum; // 强制转换,可能溢出
System.out.println("int转byte: " + smallByte); // -56 (溢出结果)
// 字符与整数转换
char ch = 'A';
int charCode = (int) ch;
System.out.println("字符'A'的ASCII: " + charCode); // 65
}
}public class ExpressionPromotion {
public static void main(String[] args) {
// 表达式中的类型提升
byte b = 10;
short s = 20;
int i = 30;
long l = 40L;
float f = 5.5f;
double d = 6.6;
double result = b + s + i + l + f + d; // 所有类型提升为double
System.out.println("表达式结果: " + result); // 111.1
// 混合类型运算
int intVal = 10;
float floatVal = 3.5f;
double result2 = intVal * floatVal; // int提升为float,然后提升为double
System.out.println("混合运算结果: " + result2); // 35.0
}
}
本章系统讲解了Java语言的基础知识,包括:
掌握这些基础知识是学习Java编程的关键一步。下面通过一个综合案例巩固所学内容。
import java.util.Scanner;
public class SimpleCalculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("简易计算器");
System.out.println("-------------------");
// 获取第一个操作数
System.out.print("请输入第一个数字: ");
double num1 = scanner.nextDouble();
// 获取运算符
System.out.print("请输入运算符(+ - * /): ");
char operator = scanner.next().charAt(0);
// 获取第二个操作数
System.out.print("请输入第二个数字: ");
double num2 = scanner.nextDouble();
double result = 0;
boolean validOperator = true;
// 根据运算符执行计算
switch (operator) {
case '+':
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
if (num2 != 0) {
result = num1 / num2;
} else {
System.out.println("错误:除数不能为零!");
validOperator = false;
}
break;
default:
System.out.println("错误:无效的运算符!");
validOperator = false;
}
// 输出结果
if (validOperator) {
System.out.println("计算结果: " + num1 + " " + operator + " " + num2 + " = " + result);
}
scanner.close();
}
}(10 + 5 * 2) / (20 % 3) - 2的结果,并解释计算过程。
通过本章学习,读者应能掌握Java语言的基础知识,为后续学习面向对象编程打下坚实基础。建议读者动手实践所有代码示例,加深理解。