初始Java

初始Java

1.1Java的概述

1.1.1什么是程序

程序:为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合。

1.1.2为什么学习Java语言

一种程序语言,一种汇编语言,一种高级语言。

Java技术可以应用在几乎所有类型和规模的设备上,小到计算机芯片、蜂窝电话、大到超级计算机,无所不在。

Java领域的Java SE、 JavaEE技术,有人说掌握了Java语言就号准了软件开发的“主脉”。

1.1.3Java可以做什么

可以把Java应用分为两种典型类型:一种是安装和运行在本机上的桌面程序,另一种是通过浏览器访问的面向lnternet的应用程序,Java还能做出非常炫的图像效果。

1.1.4Java技术平台

1.Java SE(主要是Java开发依赖的环境)

2.Java EE(主要用于网络程序和企业级应用的开发)

3.Java ME(主要是Java为移动设备提供的开发)

4.Java SE和Java SE流程图如下:
在这里插入图片描述

1.2开发第一个Java程序

1.2.1开发Java程序的步骤

1.编写源程序

2.编译

3.运行

1.2.1.1.安装JDK

下面是JDK中的重要目录和文件。

(1)bin 目录:存放编译、运行Java程序的可执行文件。

(2)jre 目录:存放Java运行环境文件。

(3)lib 目录:存放Java的类库文件。

(4)src.rar 文件:构成Java平台核心API的所有类的源文件。

在这里插入图片描述

1.2.1.2.配置环境变量并运行

由于bin 目录中存放的是要使用的各种Java命令,因此,为了在任何路径下都能找到并执行这些常用的Java命令,需要配置系统的环境变量。下面是在Windows 7中,JDK配置环境变量的具体步骤。

(1)右击桌面上的“计算机”图标。

在这里插入图片描述

(2)从弹出的快捷菜单中选择“属性”选项,在弹出的“属性”对话框中选择“高级”选项卡。

在这里插入图片描述

(3)单击“环境变量”按钮,弹出“环境变量”对话框。

在这里插入图片描述

(4)在“系统变量”选项组中,编辑path变量。在path变量开始位置增加
在这里插入图片描述

(5)在桌面用(Windows+r)打开运行,输入CMD(大写小写都行)。

在这里插入图片描述

(6)输入完CMD之后,输入Java。

在这里插入图片描述

(7)运行Java

在这里插入图片描述

有了JDK的支持,使用记事本就可以编写Java源程序。

首先,创建记事本程序,并以.Java作为扩展名进行保存。

1.2.2Java程序的结构

1.2.2.1Java基本框架

1.编写程序框架

public class Hello World{}

其中,Hello World为类的名称,它要和程序文件的名称一模一样,类名前面要用public(公共的)和class(类)两个词

2.编写main()方法的框架

public static void main(String[] args){}

main()方法就是Java程序的入口,是所有Java应用程序的一个起始点,没有main()方法,计算机就不知道该从哪里开始执行程序。

  • 注意:一个程序只能有一个main()方法。

3.编写代码

System.out.println("Hello World!!!");
  • 这一行代码的作用是向控制台输出。
1.2.3Java程序的注释

1.单行注释

如果说明性的文字较少,则可以放在一行中,即可以使用单行注释。 单行注释使用"//“开头,每一行中”//"后面 的文字都被认为是注释。单行注释通常用在代码之间,或者一行代码的后面,用来说明某一块代码的作用。示例如下:

public class HelloWorld{
	public static void main(String[] args){
	//输出信息到控制台
	System.out.println("Hello World!!!");
	}
}

2.多行注释

多行注释以"/“开头,以”/“结尾,在”/“和”/"之间的内容都被看做注释。当要说明的文字较多,需要占用多行时,可使用多行注释。示例如下:

/*
*HelloWorld.java
*2015-4-23
*第一个Java程序
*/
public class HelloWorld{
	public static void main(String[] args){
		System.out.println("Hello World!!!");
		/*
		System.out.println("Hello World!!!;
		System.out.println("Hello World!!!");
		*/
	}
}
1.2.4Java编码规范

1.类名必须使用public修饰。

2.一行只写一条语句

3.用{}括起来的部分通常表示程序的某一层次结构。“{”一般放在这一结构开始行的最末,“}”与该结构的第一个字母对齐,并单独占一行。

4.低一层次的语句或注释应该比高一层次的语句或注释缩进若干个空格后再书写,使程序更加清晰,增加程序的可读性。

1.本章总结

(1)程序是为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合。

(2)Java包括编程语言和相关的技术。

(3)Java主要用于开发两类程序:桌面应用程序和Internet应用程序。

(4)开发一个Java应用程序的基本步骤:编写源程序、编译程序和运行程序。源程序以.Java文件,使用Java命令可以运行编译后生成的.class文件。

(5)编写Java程序要符合Java编程规范,为程序编写注释可大大增加程序的可读性。

(6)MyEclipse是一个功能强大的集成开发环境。它的各种窗口便于Java程序的开发、调试和管理。

变量、数据类型和运算符

2.1变量和数据类型

2.1.1变量

1.定义:(1)变量名

​ (2)变量类型

2.根据内存地址可以找到这块内存空间的位置,也就找到了存储的数据。

3.可以通过变量名可以简单快速地找到它存储的数据

4.变量是存储数据的一个基本单元,不同的变量相互独立。

2.1.2数据类型

1.不同的数据类型

2.Java常用数据类型

数据类型说明举例
int整型用于存储整数,如学员人数、某公司的员工编号、一年的天数、一天的小时数
double双精度浮点型用于存储带有小数的数字,如商品的价格、世界银行给其他国家(地区)的贷款金额、员工工资
‘char’字符型用于存储单个字符,如性别"男"或"女"、成绩"优"或"良"
“String”字符串型用于存储一串字符,如员工姓名、产品型号、产品的介绍信息

2.1.3变量声明及使用

1.根据数据的类型在内存中分配一个合适的”房间”,并给它命名,即“变量名”。

2.将数据存储到这个“房间”中。

3.从“房间”中取出数据使用,可以通过变量名来获得。

  • 语法:

    (1)声明变量,即“根据数据类型在内存中申请一块空间”,这里需要给变量命名。

​ 数据类型 变量名;

​ 示例:

double score;           //声明双精度浮点型变量score存储分数
String name;           //声明字符串型变量name存储学生姓名
char sex;             //声明字符型变量sex存储性别
  • 语法:

(2)给变量赋值,即“将数据存储至对应的内存空间”。

​ 变量名 = 值;

​ 示例:

score = 98.5;           //存储98.5
name = "张三";         //存储"张三"
sex = '男';           //存储'男'
  • 语法:

(3)调用变量。使用存储的变量,我们称之为“调用变量”。

​ 数据类型 变量名 = 值;

​ 示例:

double score = 98.5;
String name = "张三";
char sex = '男';

可见,使用声明的变量名就是使用变量对应的内存空间中存储的数据。

2.1.4变量命名规则

序号条件合法变量名非法变量名
1变量必须以字母、下划线“_”或“$”符号开头_myGarmyvariablel //不能以开头
2变量可以包括数字,但不能以数字开头scorel9variable //不能以数字开头
3除了“_”或“$”符以外,变量名不能包括任何特殊字符$myCarvariable% //不能包括%
4不能使用Java语言的关键字,如int、class、public等graphl_la+b //不能包括+

2.1.5常见错误

(1)变量未赋值先使用

(2)使用非法的变量名

(3)变量不能重名

(4)排错方法:使用两个不同的变量名来存储。

2.2运算符

运算符分为:

(1)赋值运算符--------(=)可以将某个数赋值给变量

(2)算术运算符--------(+ , - , * , /)做简单的加减乘除计算

运算符说明举例
+加法运算符,求操作数的和5+3等于8
-减法运算符,求操作数的差5-3等于2
*乘法运算符,求操作数的乘积5*3等于15
/除法运算符,求操作数的商5/3等于1
%取余运算符,求操作数相除的余数5%3等于2

(3)关系运算符--------(> , >= , < , <= , == , !=)用来做比较运算的

关系运算符说明举例
>大于99>100,结果为false
<小于大象的寿命<乌龟的寿命,结果为true
>=大于等于你的考试成绩>=200分,结果为false
<=小于等于每次的考试的成绩<=60分,结果为false
==等于地球的大小==篮球的大小,结果为false
!=不等于水的密度!=铁的密度,结果为true

关系运算符是用来做比较运算的,而比较的结果是一个boolean类型的值,要么是在真(true),要么是假(false)。

(4)boolean类型

说明
true
false

2.2.1扫描仪

  • 定义:可以从控制台输入数据,然后把它存储在已经定义好的变量中,而不是直接在程序中给变量进行赋值。
import java.util.Scanner;
Scanner inpur = new Scanner(System.in);
int stb = input.nextInt();
  • 需要注意的是要使用这个功能,必须在Java源代码的第一行写上如写下语句。导包如下:
import java.util.Scanner;
  • 或者
import java.util.*;
  • 扫描仪如下:
Scanner input = new Scanner(System.in);
int stb = input.nextInt();

1.本章总结

(1)变量是一个数据存储空间的表示,它是存储数据的基本单元。

(2)Java中常用的数据类型有整型(int)、双精度浮点型(double)、字符型(char)和字符串型(String)。

(3)变量要先声明并赋值,然后才能使用。

(4)Java提供各种类型的运算符,具体如下。

  • 赋值运算符(=)。

  • 算术运算符(+ 、- 、* 、/ 、%)。

  • 关系运算符(> 、 >= 、< 、 <= 、 ==、 !=)。

(5)数据类型转换是为了方便不同类型的数据之间进行运算。

(6)数据类型转换包括自动类型转换和强制类型转换,发生自动类型转换时必须符合一定的条件。

(7)Java中使用boolean类型表示真假,boolean类型的两个值为true和false。

(8)Java中使用关系运算符可以用来比较大小、高低、多少等,比较后的结果是boolean类型。

(9)Java提供Scanner类,可以实现从控制台获取键盘上输入的信息。

选择结构(—)

3.1if选择结构

3.1.1为什么需要选择结构

我们经常需要做判断,然后才能够决定是否做某件事情。

3.1.2什么是if选择结构

  • if选择结构是根据条件判断之后再做处理的一种语法结构。
if(条件){
	代码块
}
  • if条件结构流程图如下:

在这里插入图片描述

  • 当if关键字后的一对大括号里只有一个语句时,可以省略大括号。但是为了避免有多个语句时遗忘大括号,以及保持程序整体风格一致,建议不要省略if结构块的大括号。
  • 流程图:逐步解决指定问题的步骤和方法的一种图形化表示方法。
  • 流程图直观、清晰地帮助我们分析问题或设计解决方案,是程序开发人员的好帮手。流程图使用一组预定义的符号来说明如何执行特定的任务。

3.1.3如何使用基本的if选择结构

1.使用基本的if选择结构

示例如下:

import java.util.*;
public class GetPrize{
	public static void main(){
		Scanner input = new Scanner(System.in);
		System.out.println("输入张浩的Java成绩:");
		int score = input.nextInt();
		if(score > 98){
			System.out.println("老师说:不错,奖励一个MP4!");
		}
	}
}

2.使用复杂条件下的if选择结构

运算符汉语名称表达式说明举例
&&与、并且条件1&&两个条件同时为真,则结果为真;两个条件有一个为假,则结果为假具有选举权的条件:年满18周岁&&中国公民。两个条件都为真则具有选举权;有一个条件为假,则不具有选举权
||或、或者条件1||条件2两个条件有一个为真,则结果为真;两个条件同时为假,则结果为假从中国去美国的方式:乘飞机||乘船。两个条件有一个条件为真,就可以过去美国;若都为假,则去不了美国
!条件条件为真时,结果为假;条件为假时,结果为真成为优秀软件工程师的条件:!偷懒
  • 当运算符比较多,无法确定运算符执行的顺序时,可以使用小括号控制。

3.使用if—else选择结构

示例如下:

public class KK{
	public static void main(String[] args){
		int score = 91;
		if(score > 98){
			System.out.println("老师说:不错,奖励一个MP4!");
		}
		if(score <= 98){
			System.out.println("老师说:惩罚进行编码!");
		}
	}
}
  • if—else选择结构的语法如下:
if(条件){
	//代码1
}else{
	//代码块2
}
  • if—else选择结构流程图如下:

在这里插入图片描述

3.3多重if选择结构

多重if选择结构:

  • 语法
if(条件1){
	//代码块1
}else if(条件2){
	//代码块2
}else{
	//代码块3
}
  • 注意:else块最多有一个或没有,else块必须要放在else if块之后。

    多重if选择结构流程图如下:

在这里插入图片描述

  • 注意:如果多重if选择结构中的所有条件之间只是简单的互斥,不存在连续的关系,则条件没有顺序要求。例如,判断一个人的国籍是中国、美国、英国、法国、俄国或其他。

3.4嵌套if选择结构

嵌套if选择结构的流程图如下:

在这里插入图片描述

  • 语法
if(条件1){
	if(条件2){
	//代码块1
	}else{
	//代码块2
	}
}else{
	//代码块3
}
  • 注意:(1)只有当满足外层if选择结构的条件时,才会判断内层if的条件。
  • ​ (2)else总是与它前面最近的那个缺少else的if配对。
  • ​ (3)if结构书写规范如下:
  • ​ (4)为了使if结构更加清晰,应该把每个if或else包含的代码块用大括号括起来。
  • ​ (5)相匹配的一对if和else应该左对齐。
  •   	 (6)内层的if结构相对于外层的if结构要有一定的缩进。
    

1.本章总结

(1)常见的逻辑运算符有&&、||、!。

(2)Java中的if选择结构,包括以下形式。

  • 基本的if选择结构:可以处理单一或组合条件的情况。
  • if—else选择结构:可以处理简单的条件分支情况。
  • 多重if选择结构:可以处理连续区间的条件分支情况。
  • 嵌套if选择结构:可以处理复杂的条件分支情况。

选择结构(二)

4.1switch选择结构

4.1.2什么是switch选择结构

  • 语法
switch(表达式){
	case 常量 1//代码块1;
		break;
	case 常量 2//代码块2;
		break;
	......
	default:
		//代码块n;
		break;	
}

这是switch、case、default、break都是Java的关键字。

  • 解释:switch选择结构用到了四个关键字,下面将一一介绍。
  • (1)switch:表示“开关”,这个开关就是switch关键字后面小括号里表达式的值,JDK1.7,switch语句小括号里可以是int、short、byte、char、枚举类型、String类型表达式。
  • (2)case:表示“情况、情形”,case后可以是int、short、byte、char、枚举、String类型,通常是一个固定的值。case块可以有多个,顺序可以改变,但是每个case后常量的值必须各不相同。
  • (3)default:表示“默认”,即其他情况都不满足。default后要紧跟冒号。default块和case块的先后顺序可以变动,不会影响程序执行的结果。通常,default块放在末尾,也可以省略。
  • (4)break:表示“停止”,即跳出当前结构。

4.3选择结构总结

Java中的if选择结构,包括以下形式。

  • 语法
if(条件){
	//代码块
}
  • 基本if选择结构:可以处理单一或组合条件的情况。
  • 语法
if(条件){
	//代码块1
}else{
	//代码块2
}
  • if—else选择结构:可以处理简单的条件分支情况。这种形式结构简单,但在实际开发中使用非常频繁。
  • 语法
if(条件1){
	//代码块1
}else if(条件2){
	//代码块2
}else{
	//代码块3
}
  • 多重if选择结构:可以处理复杂的条件分支情况。多重if选择结构在解决需要判断的条件是连续的区间时有很大的优势。
  • 语法
if(条件1){
	if(条件2){
		//代码块1
	}else{
		//代码块2
	}
}else{
	if(条件3){
		//代码块3
	}else {
			//代码块4
	}
}
  • 其中,else if块可以有多个,也可以没有,需要几个else if块完全取决于实际需求。else块最多有一个或没有,else块必须要放在else if块之后。
  • 语法
if(条件1){
	if(条件2){
		//代码块1
	}else{
		//代码块2
	}
}else{
	if(条件3){
		//代码块3
	}else{
		//代码块4
	}
}
  • 嵌套if选择结构:在if选择结构中又包括一个或多个if选择结构的情况,这种结构一般用于较为复杂的流程控制中。if选择结构嵌套的形式很多,如以下形式是其基本的结构。
  • Java中的switch选择结构。
  • 当需要多重分支并且条件判断是等值判断的情况下,使用switch选择结构代替多重if选择结构会更简单,代码结构更清晰易读。

1.本章总结

  • (1)当需要多重分支并且条件判断是等值判断的情况下,使用switch选择结构代替多重if选择结构会更简单,代码结构更清晰易读。在使用switch选择结构时不要忘记在每个case的最后写上break语句。
  • (2)为了增加程序的健壮性,可以在程序中主动做出判断,并给出用户友好的提示。
  • (3)在实际开发中,遇到分支情况时,通常会综合运用if选择结构的各种形式及switch选择结构来解决。

循环结构(一)

5.2while循环结构

5.2.1什么是while循环结构

while循环结构如下:

  • 语法
while(循环条件){
	//循环操作
}

while循环结构流程图如下:

在这里插入图片描述

while循环结构的执行顺序如下:

  • (1)声明并初始化循环变量。
  • (2)判断循环条件是否满足,如果满足则执行循环操作;否则退出循环。
  • (3)执行完循环操作后,再次判断循环条件,决定继续执行循环或退出循环。

5.5do—while循环

  • 语法
do{
	//循环操作
}while(循环条件);

do—while循环流程图如下:

在这里插入图片描述

do—while循环结构的执行顺序如下:

  • (1)声明并初始化循环变量。
  • (2)执行一遍循环操作。
  • (3)判断循环条件,如果循环条件满足,则循环继续执行,否则退出循环。
  • do—while循环的特点是先执行,再判断。

1.本章总结

  • (1)循环结构由循环条件和循环操作构成。只要满足循环条件,循环操作就会反复执行。
  • (2)使用循环解决问题的步骤:分析循环条件和循环操作,套用循环的语法写出代码,检查循环能否退出。
  • (3)编写循环结构代码时需注意:循环变量的初值、循环操作中对循环变量值的改变和循环条件三者间的关系;确保循环次数正确,不要出现“死循环”。
  • (4)while循环结构的特点是先判断,后执行;do—while循环结构的特点是先执行,再判断。
  • (5)程序调试是满足暂停程序、观察变量和逐条执行语句等功能的工具和方法的总称。其主要方法包括设置断点、单步运行和观察变量。

循环结构(二)

6.1.2什么是for循环结构

  • (1)初始部分:设置循环的初始状态,如设置记录循环次数的变量i为0;
  • (2)循环体:重复执行的代码,即输出“好好学习,天天向上!”。
  • (3)迭代部分:下一次循环开始前要执行的部分,在while循环结构中它作为循环体的一部分,如使用“i++;”进行循环次数的累加。
  • (4)循环条件:判断是否继续循环的条件,如使用“i < 100”判断循环次数是否已经达到100。
  • 在for循环结构中,这几个同样必不可少,不然循环就会出现错误。for循环的一般格式如下。
  • 语法
for(表达式1;表达式2;表达式3){
	//循环体
}
  • 记住,这里的for就是此循环结构的关键字。

for循环结构中三个表达式的含义如下:

表达式形式功能举例
表达式1赋值语句循环结构的初始部分,为循环变量赋初值int i = 0
表达式2条件语句循环结构的循环条件i < 100
表达式3赋值语句,通常使用++或–运算符循环结构的迭代部分,通常用来修改循环变量的值i++
  • for关键字后面括号中的三个表达式必须用“;”隔开。for循环中的这三个部分及{}中的循环体使循环结构必需的四个组成部分完美地结合在了一起。

for循环结构执行的顺序如下:

(1)执行初始部分(int i = 0;)。

(2)进行循环条件判断(i < 100;)。

(3)根据循环条件判断结果。如果为true,则执行循环体;如果为false,则退出循环。

(4)执行迭代部分,改变循环变量值(i++)。

(5)依次重复步骤,直到退出for循环结构。

6.3循环结构总结

  • (1)while循环结构:先进行条件判断,再执行循环体。如果条件不成立,退出循环。
  • (2)do—while循环结构:先执行循环体,再进行条件判断,循环体至少执行一次。
  • (3)for循环结构:先执行初始化部分,再进行条件判断,然后执行循环体,最后进行迭代部分的计算。如果条件不成立,跳出循环。

1.本章总结

for循环结构的语法格式如下。

  • 语法
for(表达式1;表达式2;表达式3){
	//循环体
}
  • (1)表达式1:循环结构的初始部分,为循环变量赋初值。
  • (2)表达式2:循环结构的循环条件。
  • (3)表达式3:循环结构的迭代部分,通常用来修改循环变量的值。
  • (4)在循环中,可以使用break和continue语句控制程序的流程。
  • break语句用于终止某个循环,程序跳转到循环体外的下一条语句。
  • continue语句用于跳出本次循环,进入下一次循环。

数组

8.1数组概述

8.1.2Java中的数组

  • (1)标识符。首先,和变量一样,在计算机中,数组也要有一个名称,称为标识符,用于区分不同的数组。
  • (2)数组元素。当给出了数组名称,即数组标识符后,要向数组中存放数据,这些数据就称为数组元素。
  • (3)数组下标。在数组中,为了正确地得到数组的元素,需要对它们进行编号,这样计算机才能根据编号去存取,这个编号就称为数组下标。
  • (4)元素类型。存储在数组中的数组元素应该是同一数据类型,如可以把学员的成绩存储在数组中,而每一个学员的成绩可以用整型变量存储,因此称它的元素类型是整型。

8.2如何使用数组

8.2.1使用数组的步骤

  • 语法

    数据类型 [] 数组名;

或者

​ 数据类型 数组名[];

  • 以上两种方式都可以声明一个数组,数组名可以是任意合法的变量名。
  • 语法

数组名 = new 数据类型[数组长度];

  • 语法

数据类型 [] 数据名 = new 数据类型[数组长度];

3.赋值
  • 语法

数组名 [下标值];

  • 注意:在编写程序时,数组和循环往往结合在一起使用,可以大大简化代码,提高程序效率。通常,使用for循环遍历数组或者给数组元素赋值。
  • 语法

数据类型 [] 数组名 = {值1,值2,值3…,值n};

  • 注意:如果定义的数组是基本数据类型的数组,即int、double、char和boolean类型,在Java中定义数组之后,若没有指定初始值,则依数据类型不同,会给数组元素赋一个默认的值。
数据类型初始值
int0
double0.0
char‘\u0000’
booleanfalse

8.3数组应用

8.3.1数组排序

  • 语法

Arrays.sort(数组名);

说明:Arrays是Java中提供的一个类,而sort()是该类的一个方法。关于“类”和“方法”的含义将在后续章节中详细讲解。这里我们只需要知道,按照上面的语法,即将数组名放在sort()方法的括号中,就可以完成对该数组的排序。因此,这个方法执行后,数组中的元素已经有序(升序)了。

1.本章总结

(1)数组是可以在内存中连续存储多个元素的结构,数组中的所有元素必须属于相同的数据类型。

(2)数组中的元素通过数组的下标进行访问,数组的下标从0开始。

(3)数组可用一个循环为元素赋值,或者用一个循环输出数组中的元素信息。

(4)通过数组,Iength可获得数组长度。

(5)利用Arrays类提供的sort()方法可以方便地对数组中的元素进行排序。
数据类型 [] 数据名 = new 数据类型[数组长度];

3.赋值
  • 语法

数组名 [下标值];

  • 注意:在编写程序时,数组和循环往往结合在一起使用,可以大大简化代码,提高程序效率。通常,使用for循环遍历数组或者给数组元素赋值。
  • 语法

数据类型 [] 数组名 = {值1,值2,值3…,值n};

  • 注意:如果定义的数组是基本数据类型的数组,即int、double、char和boolean类型,在Java中定义数组之后,若没有指定初始值,则依数据类型不同,会给数组元素赋一个默认的值。
数据类型初始值
int0
double0.0
char‘\u0000’
booleanfalse

8.3数组应用

8.3.1数组排序

  • 语法

Arrays.sort(数组名);

说明:Arrays是Java中提供的一个类,而sort()是该类的一个方法。关于“类”和“方法”的含义将在后续章节中详细讲解。这里我们只需要知道,按照上面的语法,即将数组名放在sort()方法的括号中,就可以完成对该数组的排序。因此,这个方法执行后,数组中的元素已经有序(升序)了。

1.本章总结

(1)数组是可以在内存中连续存储多个元素的结构,数组中的所有元素必须属于相同的数据类型。

(2)数组中的元素通过数组的下标进行访问,数组的下标从0开始。

(3)数组可用一个循环为元素赋值,或者用一个循环输出数组中的元素信息。

(4)通过数组,Iength可获得数组长度。

(5)利用Arrays类提供的sort()方法可以方便地对数组中的元素进行排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
import java.awt.BorderLayout; import java.awt.Container; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.InputEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import javax.swing.BorderFactory; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.KeyStroke; import javax.swing.ScrollPaneConstants; import javax.swing.SwingConstants; public class JNotePadUI extends JFrame { private JMenuItem menuOpen; private JMenuItem menuSave; private JMenuItem menuSaveAs; private JMenuItem menuClose; private JMenu editMenu; private JMenuItem menuCut; private JMenuItem menuCopy; private JMenuItem menuPaste; private JMenuItem menuAbout; private JTextArea textArea; private JLabel stateBar; private JFileChooser fileChooser; private JPopupMenu popUpMenu; public JNotePadUI() { super("新建文本文件"); setUpUIComponent(); setUpEventListener(); setVisible(true); } private void setUpUIComponent() { setSize(640, 480); // 菜单栏 JMenuBar menuBar = new JMenuBar(); // 设置「文件」菜单 JMenu fileMenu = new JMenu("文件"); menuOpen = new JMenuItem("打开"); // 快捷键设置 menuOpen.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_O, InputEvent.CTRL_MASK)); menuSave = new JMenuItem("保存"); menuSave.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_S, InputEvent.CTRL_MASK)); menuSaveAs = new JMenuItem("另存为"); menuClose = new JMenuItem("关闭"); menuClose.setAccelerator( KeyStroke.getKeyStroke( KeyEvent.VK_Q, InputEvent.CTRL_MASK)); fileMenu.add(menuOpen); fileMenu.addSeparator(); // 分隔线 fileMenu.add(menuSave); fileMenu.add(menuSaveAs); fileMenu.addSeparator(); // 分隔线 fileMenu.add(menuClose); // 设置「编辑」菜单 JMenu editMenu = new JMenu("编辑"); menuCut = new JMenuItem("剪切"); menuCut.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK)); menuCopy = new JMenuItem("复制"); menuCopy.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK)); menuPaste = new JMenuItem("粘贴"); menuPaste.setAccelerator( KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK)); editMenu.add(menuCut); editMenu.add(menuCopy); editMenu.add(menuPaste); // 设置「关于」菜单 JMenu aboutMenu = new JMenu("关于"); menuAbout = new JMenuItem("关于JNotePad"); aboutMenu.add(menuAbout); menuBar.add(fileMenu); menuBar.add(editMenu); menuBar.add(aboutMenu); setJMenuBar(menuBar); // 文字编辑区域 textArea = new JTextArea(); textArea.setFont(new Font("宋体", Font.PLAIN, 16)); textArea.setLineWrap(true); JScrollPane panel = new JScrollPane(textArea, ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); Container contentPane = getContentPane(); contentPane.add(panel, BorderLayout.CENTER); // 状态栏 stateBar = new JLabel("未修改"); stateBar.setHorizontalAlignment(SwingConstants.LEFT); stateBar.setBorder( BorderFactory.createEtchedBorder()); contentPane.add(stateBar, BorderLayout.SOUTH); popUpMenu = editMenu.getPopupMenu(); fileChooser = new JFileChooser(); } private void setUpEventListener() { // 按下窗口关闭钮事件处理 addWindowListener( new WindowAdapter() { public void windowClosing(WindowEvent e) { closeFile(); } } ); // 菜单 - 打开 menuOpen.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { openFile(); } } ); // 菜单 - 保存 menuSave.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { saveFile(); } } ); // 菜单 - 另存为 menuSaveAs.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { saveFileAs(); } } ); // 菜单 - 关闭文件 menuClose.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { closeFile(); } } ); // 菜单 - 剪切 menuCut.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { cut(); } } ); // 菜单 - 复制 menuCopy.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { copy(); } } ); // 菜单 - 粘贴 menuPaste.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { paste(); } } ); // 菜单 - 关于 menuAbout.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { // 显示对话框 JOptionPane.showOptionDialog(null, "程序名称:\n JNotePad \n" + "程序设计:\n \n" + "简介:\n 一个简单的文字编辑器\n" + " 可作为验收Java的实现对象\n" + " 欢迎网友下载研究交流\n\n" + " /", "关于JNotePad", JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, null, null); } } ); // 编辑区键盘事件 textArea.addKeyListener( new KeyAdapter() { public void keyTyped(KeyEvent e) { processTextArea(); } } ); // 编辑区鼠标事件 textArea.addMouseListener( new MouseAdapter() { public void mouseReleased(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON3) popUpMenu.show(editMenu, e.getX(), e.getY()); } public void mouseClicked(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON1) popUpMenu.setVisible(false); } } ); } private void openFile() { if(isCurrentFileSaved()) { // 文件是否为保存状态 open(); // 打开 } else { // 显示对话框 int option = JOptionPane.showConfirmDialog( null, "文件已修改,是否保存?", "保存文件?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null); switch(option) { // 确认文件保存 case JOptionPane.YES_OPTION: saveFile(); // 保存文件 break; // 放弃文件保存 case JOptionPane.NO_OPTION: open(); break; } } } private boolean isCurrentFileSaved() { if(stateBar.getText().equals("未修改")) { return false; } else { return true; } } private void open() { // fileChooser 是 JFileChooser 的实例 // 显示文件选取的对话框 int option = fileChooser.showDialog(null, null); // 使用者按下确认键 if(option == JFileChooser.APPROVE_OPTION) { try { // 开启选取的文件 BufferedReader buf = new BufferedReader( new FileReader( fileChooser.getSelectedFile())); // 设定文件标题 setTitle(fileChooser.getSelectedFile().toString()); // 清除前一次文件 textArea.setText(""); // 设定状态栏 stateBar.setText("未修改"); // 取得系统相依的换行字符 String lineSeparator = System.getProperty("line.separator"); // 读取文件并附加至文字编辑区 String text; while((text = buf.readLine()) != null) { textArea.append(text); textArea.append(lineSeparator); } buf.close(); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "开启文件失败", JOptionPane.ERROR_MESSAGE); } } } private void saveFile() { // 从标题栏取得文件名称 File file = new File(getTitle()); // 若指定的文件不存在 if(!file.exists()) { // 执行另存为 saveFileAs(); } else { try { // 开启指定的文件 BufferedWriter buf = new BufferedWriter( new FileWriter(file)); // 将文字编辑区的文字入文件 buf.write(textArea.getText()); buf.close(); // 设定状态栏为未修改 stateBar.setText("未修改"); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "入文件失败", JOptionPane.ERROR_MESSAGE); } } } private void saveFileAs() { // 显示文件对话框 int option = fileChooser.showSaveDialog(null); // 如果确认选取文件 if(option == JFileChooser.APPROVE_OPTION) { // 取得选择的文件 File file = fileChooser.getSelectedFile(); // 在标题栏上设定文件名称 setTitle(file.toString()); try { // 建立文件 file.createNewFile(); // 进行文件保存 saveFile(); } catch(IOException e) { JOptionPane.showMessageDialog(null, e.toString(), "无法建立新文件", JOptionPane.ERROR_MESSAGE); } } } private void closeFile() { // 是否已保存文件 if(isCurrentFileSaved()) { // 释放窗口资源,而后关闭程序 dispose(); } else { int option = JOptionPane.showConfirmDialog( null, "文件已修改,是否保存?", "保存文件?", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE, null); switch(option) { case JOptionPane.YES_OPTION: saveFile(); break; case JOptionPane.NO_OPTION: dispose(); } } } private void cut() { textArea.cut(); stateBar.setText("已修改"); popUpMenu.setVisible(false); } private void copy() { textArea.copy(); popUpMenu.setVisible(false); } private void paste() { textArea.paste(); stateBar.setText("已修改"); popUpMenu.setVisible(false); } private void processTextArea() { stateBar.setText("已修改"); } public static void main(String[] args) { new JNotePadUI(); } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值