Java语言程序设计

1 、Java语言概论

        Java是一种通用的,基于类的,面向对象的编程语言。它是用于应用程序开发的计算平台。因此,Java是快速,安全和可靠的。它被广泛用于在笔记本电脑,数据中心,游戏机,科学超级计算机,手机等中开发Java应用程序。Java遵循WORA(Write Once, Run Anywhere。一次写入,到处运行)的原理,并且与平台无关。它也简单易学。

1.1.1、 java语言历史及现状

Java是世界上使用最广泛的编程语言之一。Java最初由Sun Microsystems在1990年代开发,用于开发从Web应用程序到移动应用程序到批处理应用程序的所有内容。Java最初是一种纯粹的面向对象的语言,但现在已经发展成为一种多范例语言,可以高度适应任何情况。拥有庞大的开发人员社区和支持库,Java是开发几乎所有类型的应用程序的理想选择。

Java是最初由开发James Gosling(詹姆斯·高斯林,他被称为Java编程语言之父)在Sun Microsystems公司(现已经被Oracle收购),并于1995年发布了作为Sun公司的一个核心组成部分Java平台。

James Gosling(詹姆斯·高斯林),Mike Sheridan(迈克·谢里丹)和Patrick Naughton(帕特里克·诺顿)于1991年6月启动了Java语言项目。Java最初是为交互式电视设计的,但在当时的数字有线电视行业来说太先进了。该语言最初是在James Gosling(詹姆斯·高斯林)办公室外的一棵橡树之后被称为Oak的。后来,该项目以Green命名,并最终从Java coffee(印度尼西亚的一种咖啡)重命名为Java

Java的创始人:James Gosling(詹姆斯·高斯林)

GitHub 语言统计表明,Java 在其他编程代码中排名第二,而在 2022 年 TIOBE指数 中,Java 移至第四位。 抛开排名不谈,Java 是自诞生以来企业使用率最高的编码语言,至今仍保持着同样的地位。 作为一种编程语言,它优于许多竞争对手,并继续成为大多数公司/组织的软件应用程序选择。 即使如此,Java及其生态依旧保持活力,朝着更加适应互联网现代化的方向发展。

1.1.2、java语言的特点

Java语言的特点包括:


简单易学:Java语法相对简单,与C++相比,去除了一些复杂的特性,使得初学者更容易学习和理解。


面向对象:Java是一种纯粹的面向对象编程语言,支持封装、继承和多态等面向对象的特性。


平台无关性:Java是一种跨平台的语言,它的代码可以在不同的操作系统上运行,只需将Java源代码编译成字节码,然后在Java虚拟机(JVM)上运行。


垃圾回收:Java具有自动的垃圾回收机制,程序员不需要手动释放内存,由虚拟机自动回收不再使用的对象。


强类型检查:Java是一种强类型语言,变量必须先声明后使用,并且数据类型必须匹配,这有助于减少程序错误和提高代码的可读性。


安全性:Java具有内置的安全机制,如沙箱安全模型和安全类库,可以保护系统免受恶意代码的攻击。


多线程支持:Java提供了多线程编程的支持,可以方便地创建和管理多个线程,实现并发执行。


丰富的类库:Java提供了大量的类库,包括GUI、网络、数据库等功能,开发者可以直接使用这些类库来加快开发速度。


开放源代码:Java的开源性使得开发者可以自由地使用、修改和分发Java的代码,这促进了Java生态系统的发展。


丰富的工具支持:Java有许多强大的开发工具,如Eclipse、IntelliJ IDEA等,可以提高开发效率和质量。

1.1.3、java语言的实现机制

Java语言的实现包括以下几个方面:

1. Java开发工具和编译器:Java开发工具和编译器是用来编写、调试和编译Java代码的工具。其中,最著名的Java开发工具是Eclipse和IntelliJ IDEA,而最著名的编译器则是Oracle的Java Development Kit(JDK)。

2. Java虚拟机(JVM):Java虚拟机是Java语言最重要的实现部分之一,因为它是Java语言的核心。JVM负责将Java字节码转换为机器代码,并运行Java程序。

3. Java类库:Java类库包含了许多常用的类和方法,可以帮助开发人员更容易地编写Java程序。Java类库包括标准Java类库、扩展类库和第三方类库。

4. Java API文档:Java API文档是Java语言的官方文档,包含了Java类库中的所有类和方法的说明。Java API文档可用于开发人员查找如何使用Java类库中的特定类和方法的信息。

总之,Java语言的实现包括Java开发工具和编译器、Java虚拟机、Java类库和Java API文档。

1.2.1、java的编译与执行

Java程序的编译与执行主要包括以下几个步骤:

1. 编写Java程序:使用文本编辑器或者集成开发环境(IDE)编写Java程序,保存为.java文件。Java程序由一个或多个Java类组成,每个Java类保存在一个单独的.java文件中。

2. 编译Java程序:使用Javac编译器将Java程序编译成字节码文件。在命令行下,输入`javac MyProgram.java`,其中MyProgram是Java程序的文件名,.java是Java程序文件的扩展名。如果编译成功,将会生成一个名为MyProgram.class的字节码文件。

3. 运行Java程序:使用Java虚拟机(JVM)运行Java程序。在命令行下,输入`java MyProgram`,其中MyProgram是Java程序的类名,不需要包含.class扩展名。JVM会读取MyProgram.class文件并执行其中的Java代码。

需要注意的是,在编译Java程序时,如果程序中使用了其他类的代码,这些类的字节码文件也需要被编译并放在正确的位置上。如果使用了IDE,IDE会自动处理这些依赖关系。

1.2.2、java的环境

Java的运行环境包括两个部分:

1. Java虚拟机(JVM):JVM是Java程序运行的核心,它可以解释Java程序的字节码,并把它们转换为机器码让计算机执行。JVM是Java跨平台的基础,因为Java程序只需要编译成字节码,就可以在任何安装了JVM的平台上运行,无需重新编译。

2. Java类库:Java类库是Java程序所依赖的核心库,在Java SE中,Java类库包含了数千个类和接口,这些类和接口提供了各种各样的功能,比如各种数据类型、输入输出、网络通信、图形化界面等等。Java类库是Java程序必不可少的一部分,也是Java语言的强大之处。

Java运行环境通常是通过安装Java Development Kit(JDK)或者Java Runtime Environment(JRE)来获得的。JDK包含了完整的Java开发工具,包括编译器、调试器、文档生成器等等,而JRE只包含了运行Java程序所需的Java虚拟机和Java类库。开发Java程序需要安装JDK,而普通用户只需要安装JRE即可。

2、基本数据结构

2.1基本数据类型:

2.1.1 Java的基本数据类型包括整数类型(byte、short、int、long)、浮点数类型(float、double)、字符类型(char)和布尔类型(boolean)。这些基本类型都有对应的包装类,例如Integer、Double等。Java的基本数据类型包括以下8种:

1. byte(1字节):表示8位带符号的整数,取值范围为-128到127。

2. short(2字节):表示16位带符号的整数,取值范围为-32,768到32,767。

3. int(4字节):表示32位带符号的整数,取值范围为-2,147,483,648到2,147,483,647。

4. long(8字节):表示64位带符号的整数,取值范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807。

5. float(4字节):表示32位单精度浮点数,取值范围为大约±1.4E-45到大约±3.4E+38。

6. double(8字节):表示64位双精度浮点数,取值范围为大约±4.9E-324到大约±1.8E+308。

7. char(2字节):表示16位Unicode字符,取值范围为0到65535。

8. boolean(1字节):表示真或假,取值为true或false。

2.2数组:

2.2.1数组是一种容器,用于存储固定大小的相同类型的元素。Java中的数组可以是一维或多维的,可以存储基本数据类型或对象。

Java数组是一组相同类型的数据按照一定顺序排列的集合。在Java中,数组是一种引用类型,它的大小是固定的,一旦创建,大小就不能改变。Java数组的声明方式如下:

```
dataType[] arrayName; // 声明一个数组
dataType[] arrayName = new dataType[arraySize]; // 声明并初始化一个数组
```

其中,dataType表示数据类型,arrayName表示数组名称,arraySize表示数组的大小。声明一个数组后需要进行初始化。Java数组的初始化方式有两种:

1. 声明数组并分配空间,在使用前必须初始化每个元素。例如:

   ```
   int[] intArray = new int[5]; // 声明并初始化一个大小为5的int类型数组
   intArray[0] = 1;
   intArray[1] = 2;
   intArray[2] = 3;
   intArray[3] = 4;
   intArray[4] = 5;
   ```

2. 在声明数组时可以直接为数组赋初值。例如:

   ```
   int[] intArray = {1, 2, 3, 4, 5}; // 声明并初始化一个大小为5的int类型数组
   ```

Java数组可以通过下标访问数组元素,下标从0开始。例如,intArray[0]表示数组intArray的第一个元素,intArray[4]表示数组intArray的最后一个元素。可以使用循环语句来遍历数组。常用的循环语句有for循环和foreach循环。

2.3集合:

2.3.1Java提供了丰富的集合类,包括List、Set、Map等。集合类是用来存储一组对象的容器,它们提供了方便的方法来访问、添加、删除、搜索元素,以及对元素进行排序等操作。

Java集合是一组相关对象的容器,提供了若干种存储和操作对象的方法。Java集合分为两种:一种是Collection,另一种是Map。其中,Collection接口又分为List、Set和Queue三种,它们是Java集合框架中最常用的集合类型。

List是一种有序集合,它可以包含重复元素。常用的List实现类有ArrayList和LinkedList。ArrayList是通过数组实现的,可以动态增加和缩减元素,但在插入和删除元素时效率较低。LinkedList是通过链表实现的,对于插入和删除元素具有很高的效率。

Set是一种不包含重复元素的无序集合。常用的Set实现类有HashSet和TreeSet。HashSet是通过哈希表实现的,它的元素没有顺序,但是插入和查询元素时效率较高。TreeSet是通过红黑树实现的,它的元素按照自然顺序排序,插入和查询元素时效率高。

Queue是一种队列,它包含了头部和尾部。常用的Queue实现类有LinkedList和PriorityQueue。LinkedList作为Queue的实现类可以用来实现先进先出(FIFO)的队列。PriorityQueue是一种优先队列,它可以将元素按照一定规则进行排序,并按照优先级取出元素。

Map是一种键值对存储的集合,它提供了快速查询和存储键值对的方法。常用的Map实现类有HashMap和TreeMap。HashMap是通过哈希表实现的,它的键和值都可以为null。TreeMap是通过红黑树实现的,它的键可以按照自然顺序排序。

Java集合框架提供了许多方法用来操作集合,如增加元素、删除元素、查找元素等。可以使用Iterator迭代器来遍历集合中的元素。Java集合还提供了排序、查找、过滤等功能,可以根据需要选择合适的方法来操作集合。

2.4栈和队列:

2.4.1栈和队列都是一种线性结构,栈是一种后进先出(LIFO)的数据结构,队列是一种先进先出(FIFO)的数据结构。

Java中的栈和队列是两种常用的数据结构,它们都是一种有序容器,可以用于存储一组数据,但存储和访问数据的方式不同。

栈(Stack)是一种后进先出(Last In First Out,LIFO)的数据结构,其基本操作包括压栈(push)和弹栈(pop),以及查看栈顶元素(peek)的操作。在Java中,可以通过使用Stack类来实现栈。

以下是使用Stack类来实现栈的示例代码:

```java
Stack<Integer> stack = new Stack<Integer>();
// 压栈
stack.push(1);
stack.push(2);
stack.push(3);
// 弹栈
int top = stack.pop();
// 查看栈顶元素
int peek = stack.peek();
// 判断栈是否为空
boolean empty = stack.isEmpty();
```

队列(Queue)是一种先进先出(First In First Out,FIFO)的数据结构,其基本操作包括入队(offer)和出队(poll),以及查看队首元素(peek)的操作。在Java中,可以通过使用Queue接口及其实现类来实现队列。

以下是使用LinkedList类来实现队列的示例代码:

```java
Queue<Integer> queue = new LinkedList<Integer>();
// 入队
queue.offer(1);
queue.offer(2);
queue.offer(3);
// 出队
int head = queue.poll();
// 查看队首元素
int peek = queue.peek();
// 判断队列是否为空
boolean empty = queue.isEmpty();
```

Java中的栈和队列可以被应用于很多场景,如算术表达式求值、符号匹配、迷宫求解等。在实际编程中,应根据具体的需求来选择合适的数据结构。

2.5树和图:

2.5.1树和图都是非线性结构,树是一种有根节点、有层次结构的数据结构,图是由节点和边组成的一种数据结构,可以用来表示各种关系。

树和图是数据结构中非常重要的两种形式,它们都可以用于表示复杂的数据结构和关系。在Java中,树和图也可以用相应的类和接口来实现。

1. 树(Tree)

树是一种自包含的数据结构,其中每个节点都包含一个值和指向其子节点的指针。树通常被用来表示层级关系,例如组织结构、文件系统等。

在Java中,可以通过TreeNode类和TreeModel接口来实现树的数据结构。以下是使用TreeNode类和TreeModel接口实现树的示例代码:

```java
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("Node1");
DefaultMutableTreeNode node2 = new DefaultMutableTreeNode("Node2");
root.add(node1);
root.add(node2);

// 使用TreeModel接口来实现树结构
TreeModel treeModel = new DefaultTreeModel(root);
```

2. 图(Graph)

图是由节点和边组成的数据结构,用于表示对象之间的关系。在图中,节点表示对象,边表示对象之间的关系。图通常被用于表示网络、社交关系等。

在Java中,可以通过Graph类和相关的接口来实现图的数据结构。以下是使用Graph类实现图的示例代码:

```java
Graph<Integer> graph = new Graph<Integer>();
graph.addEdge(1, 2);
graph.addEdge(1, 3);
graph.addEdge(2, 3);
graph.addEdge(3, 4);
```

以上代码创建了一个包含4个节点和4条边的图。其中,addEdge方法用于添加边。要实现更复杂的图,可以使用不同类型的图和相关的接口来实现。

总的来说,树和图是数据结构中非常重要的两种形式,它们广泛应用于计算机科学和软件开发中,如数据库存储、搜索算法等。在Java中,可以通过相应的类和接口来实现树和图的数据结构。

2.6字符串

2.6.1:Java中的字符串是以Unicode字符序列的形式存储的,字符串对象是不可变的,可以使用StringBuffer或StringBuilder类来进行字符串操作。

字符串在Java中是一种基本数据类型,同时也是一种非常常用的数据类型。Java提供了丰富的字符串操作方法和类,使得字符串的处理变得非常简单和高效。

在Java中,字符串类型是一种引用类型。也就是说,字符串变量存储的是一个指向实际字符串数据的引用,而不是实际的字符串数据本身。我们可以使用String类来创建和操作字符串对象。

以下是Java中常用的字符串操作方法:

1. 创建字符串

我们可以使用双引号或者String构造函数来创建字符串对象,例如:

```java
String str1 = "hello"; // 使用双引号创建字符串
String str2 = new String("world"); // 使用构造函数创建字符串
```

2. 连接字符串

使用加号运算符或者concat方法来连接字符串,例如:

```java
String s1 = "hello";
String s2 = "world";
String s3 = s1 + s2; // 使用加号运算符连接字符串
String s4 = s1.concat(s2); // 使用concat方法连接字符串
```

3. 获取字符串长度

使用length方法来获取字符串的长度,例如:

```java
String s = "hello world";
int len = s.length();
```

4. 获取字符串中的字符

使用charAt方法来获取字符串中指定位置的字符,例如:

```java
String s = "hello world";
char c = s.charAt(0);
```

5. 比较字符串

使用equals方法来比较字符串是否相等,例如:

```java
String s1 = "hello";
String s2 = new String("hello");
boolean isEqual = s1.equals(s2);
```

6. 查找字符或子串

使用indexOf或lastIndexOf方法来查找字符串中指定字符或子串的位置,例如:

```java
String s = "hello world";
int index1 = s.indexOf("o");
int index2 = s.lastIndexOf("o");
```

以上是Java中常用的字符串操作方法,还有很多其他的方法可以用来处理字符串。在实际开发中,字符串操作非常常见,在处理用户输入、输出数据、解析文件等方面都会用到。因此,熟练掌握Java的字符串操作是非常重要的。

3、java类库对基本数据类型的对象包装器

Java类库提供了基本数据类型的对象包装器,即将基本数据类型转换为对象类型。以下是Java类库中基本数据类型的对象包装器类:

1. Byte:用于处理字节数据,如图像和音频

2. Short:用于处理数字,如端口号

3. Integer:用于处理整数

4. Long:用于处理长整数

5. Float:用于处理浮点数

6. Double:用于处理双精度浮点数

7. Character:用于处理字符

8. Boolean:用于处理布尔值

这些包装器类提供了很多方法来处理基本数据类型的值,例如将字符串转换为基本数据类型,比较两个对象的值等。通过这些包装器类,可以将基本数据类型转换为对象类型,从而方便地进行操作。

4、java运算符和表达式

4.1 运算符

在Java中,运算符和表达式用来执行计算和操作。以下是Java中的常见运算符和表达式:

1. 算数运算符:加(+)、减(-)、乘(*)、除(/)、取余(%),用于执行基本的算术运算。

2. 关系运算符:大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、等于(==)、不等于(!=),用于比较两个值是否相等。

3. 逻辑运算符:与(&&)、或(||)、非(!),用于执行逻辑操作。

4. 赋值运算符:赋值(=)、加等于(+=)、减等于(-=)、乘等于(*=)、除等于(/=)、取余等于(%=),用于将一个值赋给变量。

5. 自增/自减运算符:自增(++)、自减(--),用于增加或减少变量的值。

`x++` 和 `++x` 都是自增运算符,它们的区别在于它们的执行时间点不同。

- `x++` 是后缀自增运算符,它执行的时间点是将 `x` 的值返回给表达式之后,再将 `x` 的值加 1。也就是说,`x++` 先返回 `x` 的值,然后再将 `x` 加 1。

- `++x` 是前缀自增运算符,它执行的时间点是将 `x` 的值加 1,然后再将 `x` 的新值返回给表达式。也就是说,`++x` 先将 `x` 加 1,然后再返回 `x` 的新值。

举个例子,假设 `x = 5`:

```
int y = x++;  // y = 5, x = 6
int z = ++x;  // z = 7, x = 7
```

在第一行代码中,`x++` 返回 `x` 的当前值,也就是 5,然后将 `x` 加 1,所以 `y` 的值为 5,而 `x` 的值变为了 6。在第二行代码中,`++x` 先将 `x` 加 1,所以 `x` 的值变为了 7,然后返回 `x` 的新值,也就是 7,所以 `z` 的值为 7,而 `x` 的值也是 7。

6. 条件运算符:三元运算符(? :),用于根据条件的真或假返回不同的值。

7. 位运算符:与(&)、或(|)、异或(^)、非(~)、左位移(<<)、右位移(>>)和无符号右位移(>>>),用于执行位级运算。

8. 实例化运算符:用于创建一个对象的实例。

除此之外,还有一些其他的运算符和表达式,例如类型转换运算符、方法调用运算符等。

4.1.1优先级

在 Java 中,不同类型的运算符有不同的优先级,优先级高的运算符先进行计算。以下是 Java 运算符的优先级从高到低的排列:

1. ()    // 括号运算符,最高优先级
2. !     // 逻辑非
3. *, /, %  // 算术运算符:乘、除、取余
4. +, -  // 算术运算符:加、减
5. <<, >>, >>>  // 位运算符:左移、右移、无符号右移
6. <, <=, >, >=  // 关系运算符:小于、小于等于、大于、大于等于
7. ==, !=  // 关系运算符:等于、不等于
8. &     // 位运算符:按位与
9. ^     // 位运算符:按位异或
10. |    // 位运算符:按位或
11. &&   // 逻辑运算符:逻辑与
12. ||   // 逻辑运算符:逻辑或
13. ?:   // 条件运算符
14. =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>=, >>>=  // 赋值运算符,最低优先级

当表达式中有多个运算符时,优先级高的运算符会先被计算,如果多个运算符有相同的优先级,则按照运算符的结合性(从左到右或从右到左)进行计算。如果需要改变计算顺序,可以通过括号来改变优先级。

4.2 表达式

Java表达式由变量、常量、运算符和方法调用等组成,通过计算最终得到一个值。

例如,下面是一些Java表达式的例子:

1. 变量表达式:int a = 5; int b = a + 3;

2. 常量表达式:int result = 20 * 3;

3. 运算符表达式:boolean flag = (x > y) && (z < y);

4. 方法调用表达式:int max = Math.max(10, 20);

5. 条件表达式:int x = (y > 0) ? 10 : -10;

在Java中,表达式可以用来计算数学公式,执行逻辑运算或比较值等等。Java中支持的运算符包括算术运算符、逻辑运算符、位运算符、关系运算符等等。此外,Java还有许多内置的方法可以用于处理表达式,例如类型转换方法、字符串处理方法等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

k笔墨丹青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值