1. Java简介
Java是一种广泛使用的编程语言,它的设计目标是有助于开发者编写一次,随处运行。这意味着一旦你写了一个Java程序,理论上它可以在任何设备、任何平台上运行,只要设备有一个Java虚拟机。
2. 开始之前
在开始编写Java程序之前,你需要确保你的计算机上安装了Java开发工具包(JDK)。JDK是Java的开发环境,它包含了Java的编译器、库文件和其他工具,你需要它来编写和运行Java程序。
3. 第一个Java程序
当你安装好JDK后,你可以开始编写你的第一个Java程序。
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
这是一个简单的Java程序,它会在屏幕上打印出"Hello, World!"。
3.1 解析
public class HelloWorld`: 这是Java程序的开始。每个Java程序都有一个或多个类,而每个类都有一个名字。在这里,我们的类名是`HelloWorld`。
public static void main(String[] args)`: 这是Java程序的主方法。当你运行Java程序时,它开始执行`main`方法。
System.out.println("Hello, World!");`: 这是一个命令,告诉计算机在屏幕上打印指定的文本。
4. 数据类型
在Java中,每个变量都有一个数据类型。数据类型决定了变量可以存储的数据范围。
4.1 基本数据类型
整数类型
byte: 8位,范围从-128到127。例如:`byte a = 65;`
short: 16位,范围从-32,768到32,767。例如:`short b = 32000;`
int: 32位,范围从-2^31到2^31-1。这是最常用的整数类型。例如:`int c = 100000;`
long: 64位,范围从-2^63到2^63-1。当你需要存储的整数超出int的范围时使用。例如long d = 5000000000L;` 注意后面的L,它告诉Java这是一个long类型的数字。
5. 浮点类型
这些是用于存储小数的数据类型。
float: 32位,范围大约是±3.4e−038到±3.4e+038。例如:float e = 2.5f; 注意后面的f,它告诉Java这是一个float类型的数字。
double: 64位,范围大约是±4.9e−324到±1.8e+308。这是最常用的浮点类型。例如:double f = 5.5;
6. 字符和布尔类型
char: 用于存储单个字符。例如:char g = 'A';
boolean: 用于存储真或假的值,即true或false。例如:boolean h = true;
7. 字符串
虽然字符串不是基本数据类型,但它们在Java中非常常用。字符串是字符的序列。例如:String i = "Hello, World!";
8. 类型转换
有时,你可能需要在不同的数据类型之间转换数据。
8.1 自动类型转换
当将一个较小的数据类型赋值给一个较大的数据类型时,Java会自动进行类型转换。例如,将int赋值给double。
int j = 100;
double k = j; // 自动将int转换为double
8.2 强制类型转换
当你需要将一个较大的数据类型赋值给一个较小的数据类型时,你需要进行强制类型转换。这是通过在变量前放置你想要转换的数据类型来完成的。
double l = 5.5;
int m = (int) l; // 将double强制转换为int,m的值为5
注意:强制类型转换可能会导致数据丢失。
9. 运算符
Java提供了一系列的运算符来操作变量。
算术运算符: 如 `+`, `-`, `*`, `/`, `%` (取余数)。
比较运算符: 如 `==` (等于), `!=` (不等于), `>` (大于), `<` (小于), `>=` (大于或等于), `<=` (小于或等于)。
逻辑运算符: 如 `&&` (逻辑与), `||` (逻辑或), `!` (逻辑非)。
10. 控制结构
控制结构允许您基于某些条件执行代码块。
10.1 条件语句
if 语句: 它用于测试一个条件,如果条件为真,则执行代码块。
int n = 10;
if (n > 5) {
System.out.println("数字大于5");
}
if-else 语句: 如果if的条件为假,则执行else块中的代码。
int o = 3;
if (o > 5) {
System.out.println("数字大于5");
} else {
System.out.println("数字小于或等于5");
}
if-else-if 语句: 用于测试多个条件。
int p = 5;
if (p > 10) {
System.out.println("数字大于10");
} else if (p > 5) {
System.out.println("数字大于5但小于10");
} else {
System.out.println("数字小于或等于5");
}
10.2 循环结构
for 循环: 当您知道循环应该执行多少次时,使用for循环。
for (int q = 0; q < 5; q++) {
System.out.println("当前数字是: " + q);
}
while 循环: 当您不知道循环应该执行多少次,但知道循环应该在满足某个条件时继续执行时,使用while循环。
int r = 0;
while (r < 5) {
System.out.println("当前数字是: " + r);
r++;
}
do-while 循环: 类似于while循环,但至少执行一次,因为它在测试条件之前执行代码块。
int s = 0;
do {
System.out.println("当前数字是: " + s);
s++;
} while (s < 5);
10.3 switch 语句
用于基于变量的值执行不同的代码块。
int t = 2;
switch (t) {
case 1:
System.out.println("值是1");
break;
case 2:
System.out.println("值是2");
break;
default:
System.out.println("值既不是1也不是2");
}
注意: `break`关键字用于退出switch语句。如果省略它,所有后续的case语句和default语句都会被执行,直到遇到下一个break语句或switch语句结束。
11. 数组
数组是一个存储固定大小的同类型元素的集合。数组的元素可以通过索引访问。
11.1 声明数组
要声明数组,你可以使用以下语法:
dataType[] arrayName;
例如:
int[] myArray;
11.2 初始化数组
你可以在声明时初始化数组:
int[] myArray = {1, 2, 3, 4, 5};
或者使用`new`关键字:
int[] myArray = new int[5];
11.3 访问数组元素
数组元素是通过索引访问的,索引从0开始:
int firstElement = myArray[0];
11.4 修改数组元素
你可以通过索引修改数组的元素:
myArray[0] = 6;
11.5 数组的长度
你可以使用`length`属性获取数组的长度:
int length = myArray.length;
12. 函数
函数是执行特定任务的一组语句。Java中的函数称为方法。
12.1 声明方法
方法声明包括返回类型、方法名称和任何参数。
public static returnType methodName(parameters) {
// 方法体
}
例如:
public static int add(int a, int b) {
return a + b;
}
12.2 调用方法
你可以通过方法名称来调用方法:
int result = add(5, 3);
12.3 方法参数
方法可以有两种参数:
- 形式参数:在方法声明中指定的参数。
- 实际参数:调用方法时传递的参数。
在上面的`add`方法示例中,`a`和`b`是形式参数,而`5`和`3`是实际参数。
12.4 返回值
方法可以返回一个值。`return`语句用于从方法返回并指定返回值。
13. 面向对象编程 (OOP)
面向对象编程是Java的核心,它围绕以下四个基本概念:封装、继承、多态和抽象。
13.1 类和对象
类:类是一个模板,它定义了如何创建对象。类定义了对象的属性和方法。
public class Dog {
String breed;
int age;
String color;
void bark() {
System.out.println("汪汪!");
}
}
// 当调用bark方法时,输出:汪汪!
对象:对象是类的实例。你可以使用`new`关键字创建一个对象。
Dog myDog = new Dog();
myDog.bark(); // 输出:汪汪!
13.2 封装
封装是将变量和函数组合到一个单一的单位(即类)中。为了防止对数据的未经授权的访问,我们使用访问修饰符。
private:该成员只能在其定义的类中访问。
public:可以从任何其他类访问该成员。
protected:该成员可以在其自己的包和子类中访问。
default:该成员可以在其自己的包中访问
13.3 继承
继承是从另一个类获取属性和方法的过程。它提供了代码重用性。
class Animal {
void eat() {
System.out.println("吃东西");
}
}
class Dog extends Animal {
void bark() {
System.out.println("汪汪!");
}
}
// 当Dog类的对象调用eat方法时,输出:吃东西
// 当Dog类的对象调用bark方法时,输出:汪汪!
13.4 多态
多态允许我们执行一个动作的多种方式。例如,我们可以有多个类,每个类都有一个`draw`方法,但是它们都执行不同的任务。
class Shape {
void draw() {
System.out.println("绘制形状");
}
}
class Circle extends Shape {
void draw() {
System.out.println("绘制圆形");
}
}
// 当Shape类的对象调用draw方法时,输出:绘制形状
// 当Circle类的对象调用draw方法时,输出:绘制圆形
13.5 抽象
抽象是隐藏复杂性并仅显示重要特性的过程。Java使用接口和抽象类来实现抽象。
抽象类:不能实例化的类。它可以有抽象和非抽象方法。
abstract class Animal {
abstract void makeSound();
}
// 由于Animal是抽象的,所以不能直接创建其对象。
接口:是完全抽象的类,它只有抽象方法。
interface Drawable {
void draw();
}
// 接口也是抽象的,不能直接创建其对象。