一、Java程序的基本结构

一个Java应用程序是由若干个类组成的。
通常将类的属性称之为类的全局变量(成员变量),将方法中的属性称之为局部变量。全局变量声明在类体中,局部变量声明在方法体中。全局变量和局部变量都有各自的应用范围。

main()方法是类体中的主方法。该方法从“{”号开始,至“}”号结束。public、static和void分别是main()方法的权限修饰符、静态修饰符和返回值修饰符,Java程序中的main()方法必须声明为public static void。String[] args是一个字符串类型的数组,它是main()方法的参数。main()方法是程序开始执行的位置。
在Java语言中可以通过import关键字导入相关的类。

二、基本数据类型(与C++基本相同)

1、整数类型:
整数类型——byte
使用byte关键字来定义byte型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。byte型是整型中所分配的内存空间是最少的,只分配1个字节;取值范围也是最小的,只在-128和127之间,在使用时一定要注意,以免数据溢出产生错误。
整数类型——short
short型即短整型,使用short关键字来定义short型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。系统给short型分配2个字节的内存,取值范围也比byte型大了很多,在-32768和32767之间,虽然取值范围变大,但是还是要注意数据溢出。
整数类型——int
int型即整型,使用int关键字来定义int型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。int型变量取值范围很大,在-2147483648和2147483647之间,足够一般情况下使用,所以是整型变量中应用最广泛的。
整数类型——long
long型即长整型,使用long关键字来定义long型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。而在对long型变量赋值时结尾必须加上“L”或者“l”,否则将不被认为是long型。当数值过大,超出int型范围的时候就使用long型,系统分配给long型变量8个字节,取值范围则更大,在-9223372036854775808和9223372036854775807之间。
2.浮点类型:
浮点类型——float
float型即单精度浮点型,使用float关键字来定义float型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。在对float型进行赋值的时候在结尾必须添加“F”或者“f”,如果不加,系统自动将其定义为double型变量。float型变量的取值范围在1.4E-45和3.4028235E-38之间。
浮点类型——double
double型即双精度浮点型,使用double关键字来定义double型变量,可以一次定义多个变量并对其进行赋值,也可以不进行赋值。在给double型赋值时,可以使用后缀“D”或“d”明确表明这是一个double类型数据,但加不加并没有硬性规定,可以加也可以不加。double型变量的取值范围在4.9E-324和1.7976931348623157E-308之间。
3.字符类型:
字符类型——char
char型既字符类型,使用char关键字进行声明,用于存储单个字符,系统分配两个字节的内存空间。在定义字符型变量时,要用单引号括起来,例如‘s’表示一个字符,且单引号中只能有一个字符,多了就不是字符类型了,而是字符串类型,需要用双引号进行声明。
4.布尔类型:
布尔类型——boolean
布尔类型又称逻辑类型,只有两个值“true”和“false”,分别代表布尔逻辑中的“真”和“假”。使用boolean关键字声明布尔类型变量,通常被用在流程控制中作为判断条件。

三、变量与常量

1、标识符和关键字
标识符可以简单地理解为一个名字,用来标识类名、变量名、方法名、数组名、文件名的有效字符序列。

int i = 100;
 System.out.println(i);// 在控制台输出信息


变量名i就是标识符,标识符由程序员所起。
命名规则:
Java语言的标识符由字母、数字、下划线和美元符号组成,第一个字符不能为数字。
Java语言使用Unicode标准字符集,最多可以识别65535个字符。因此,Java语言中的字母可以是Unicode字符集中的任何字符,包括拉丁字母、汉字、日文和其他许多语言中的字符。
标识符不能是Java的关键字和保留字。
在Java语言中标识符是区分大小写的,如果两个标识符的字母相同但是大小写不同,就是不同的标识符。
关键字:
int public this finally boolean abstract
continue float long short throw throws
return break for static new interface
if double default byte do case
strictfp package super void try switch
else catch implements private final class
extends volatile while synchronized instanceof
char protecte importd transient implements dafaule

2.声明变量:
在程序设计中,变量的使用是一个十分重要的环节,定义一个变量,就是要告诉编译器(compiler)这个变量属于哪一种数据类型,这样编译器才知道需要配置多少空间,以及能存放什么样的数据。变量都有一个变量名,变量名必须是合法的标识符,内存空间内的值就是变量值。在声明变量时可以是不给予赋值,也可以是直接赋给初值。
3.声明常量:
在程序运行过程中一直不会改变的量称为常量(constant),通常也被称为“final变量”。常量在整个程序中只能被赋值一次。在为所有对象共享的值时,常量是非常有用的。
4.变量的有效范围:
变量的有效范围是指程序代码能够访问该变量的区域,若超出变量所在区域访问变量则编译时会出现错误。在程序中,一般会根据变量能够访问的区域将变量分为“成员变量”和“局部变量”。

四、运算符(与C++类似)

1.赋值运算符:

赋值运算符即“=”,是一个二元运算符(即对两个操作数进行处理),其功能是将右方操作数所含的值赋值给左方的操作数,语法如下所示:

变量类型 变量名 = 所赋的值;

2.算术运算符:

Java中的算术运算符主要有+(加号)、-(减号)、*(乘号)、/(除号)和%(求余),它们都是二元运算符。

3.自增和自减运算符:

自增、自减运算符是单目运算符,可以放在操作元之前,也可以放在操作元之后。操作元必须是一个整型或浮点型变量。放在操作元前面的自增、自减运算符,会先将变量的值加1(减1),然后再使该变量参与表达式的运算;放在操作元后面的自增、自减运算符,会先使变量参与表达式的运算,然后再将该变量加1(减1) 。

4.比较运算符:

比较运算符属于二元运算符,用于程序中的变量和变量之间、变量和常量之间以及其他类型的信息之间的比较。比较运算符的运算结果是boolean型,当运算符对应的关系成立时,运算结果是true,否则结果是false。比较运算符通常用在条件语句中来作为判断的依据。

5.逻辑运算符:

逻辑运算符包括&&(&)(逻辑与)、||(|)(逻辑或)和!(逻辑非),返回值为布尔类型的表达式,操作元也必须是boolean型数据。和比较运算符相比,逻辑运算符可以表示更加复杂的条件,例如连接几个关系表达式进行判断。在逻辑运算符中,除了“!”是一元运算符之外,其余的都是二元运算符。

6.位运算符:

位运算符用于处理整型和字符型的操作数,对其内存进行操作,数据在内存中以二进制的形式表示,例如int型变量7的二进制表示是00000000 00000000 00000000 00000111,-8的二进制表示是111111111 111111111 1111111 11111000,最高位是符号位,0表示正数,1表示负数。

7.三元运算符:

三元运算符是Java中唯一一个三目运算符,其操作元有三个,第一个是条件表达式,其余的是两个值,条件表达式成立时运算取第一个值,不成立时取第二个值,示例代码如下所示:

boolean b = 20 < 45 ? true : false;

8.运算符优先级:

java 怎么定义一个全局变量 java定义全局变量的关键字_Java

五、类型转换

1.隐式类型转换:
Java中8种基本类型可以进行混合运算,不同类型的数据在运算过程中,首先会自动转换为同一类型,再进行运算。数据类型根据占用存储空间的大小分为高低不同的级别,占用空间小的级别低,占用空间大的级别高,自动类型转换遵循低级到高级转换的规则。
2.显式类型转换:
当把高精度的变量的值赋给低精度的变量时,必须使用显式类型转换运算(又称强制类型转换)。语法如下所示:
(类型名)要转换的值

六、代码注释和编码规范

1.代码注释:
通过在程序代码中添加注释可提高程序的可读性,注释中包含了程序的信息,可以帮助程序员更好地阅读和理解程序。在Java源程序文件的任意位置都可添加注释语句。注释中的文字Java编译器并不进行编译,所有代码中的注释文字并不对程序产生任何影响。Java语言提供了3种添加注释的方法,分别为单行注释、多行注释和文档注释。
2.编码规范:
在学习开发的过程中要养成良好的编码规范,因为规整的代码格式会给程序的开发与日后的维护提供很大方便。总结的编码规范如下:
每条语句要单独占一行
每条命令都要以分号结束
声明变量时要分行声明
Java语句中多个空格看成一个
不要使用技术性很高、难懂、易混淆判断的语句
对于关键的方法要多加注释

七、语句

1.复合语句:
同C语言或其他语言相同,Java语言的复合语句是以整个块区为单位的语句,所以又称块语句。复合语句由开括号“{”开始,闭括号“}”结束。
在前面的学习中已经接触到了这种复合语句。例如在定义一个类或方法时,类体就是以“{ }”作为开始与结束的标记,方法体同样也是以“{ }”作为标记。对于复合语句中的每个语句都是从上到下地被执行。复合语句以整个块为单位,可以用在任何一个单独语句可以用到的地方,并且在复合语句中还可以嵌套复合语句。
2.条件语句:
if条件语句:
if条件语句是一个重要的编程语句,它用于告诉程序在某个条件成立的情况下执行某段程序,而在另一种情况下执行另外的语句。
使用if条件语句,可选择是否要执行紧跟在条件之后的那个语句。关键字if之后是作为条件的“布尔表达式”,如果该表达式返回的结果为true,则执行其后的语句;若为false,则不执行if条件之后的语句。if条件语句可分为简单的if条件语句、if…else语句和if…else if多分支语句。
switch多分支语句:
switch语句中表达式的值必须是整型或字符型,常量值1~常量值n必须也是整型或字符型。switch语句首先计算表达式的值,如果表达式的值和某个case后面的变量值相同,则执行该case语句后的若干个语句直到遇到break语句为止。此时如果该case语句中没有break语句,将继续执行后面case里的若干个语句,直到遇到break语句为止。若没有一个常量的值与表达式的值相同,则执行default后面的语句。default语句为可选的,如果它不存在,而且switch语句中表达式的值不与任何case的常量值相同,switch则不做任何处理。
3.循环语句:
while循环语句:
while语句也称条件判断语句,它的循环方式为利用一个条件来控制是否要继续反复执行这个语句,语法如下所示:
while(条件表达式) {
执行语句
}
当条件表达式的返回值为真时,则执行{}中的语句,当执行完{}中的语句后,重新判断条件表达式的返回值,直到表达式返回的结果为假时,退出循环。
do…while循环语句:
do…while循环语句与while循环语句类似,它们之间的区别是while语句为先判断条件是否成立再执行循环体,而do…while循环语句则先执行一次循环后,再判断条件是否成立。也就是说do…while循环语句中大括号中的程序段至少要被执行一次,语法如下所示:
do {
执行语句
}
while(条件表达式);
与while语句的一个明显区别是do…while语句在结尾处多了一个分号(;)。
for循环语句:
for循环是Java程序设计中最有用的循环语句之一。一个for循环可以用来重复执行某条语句,直到某个条件得到满足。
for循环语句—基本:
语法如下所示:
for(表达式1;表达式2;表达式3) {
语句序列
}
表达式1:初始化表达式,负责完成变量的初始化。
表达式2:循环条件表达式,值为boolean型的表达式,指定循环条件。
表达式3:循环后操作表达式,负责修整变量,改变循环条件。
for循环语句—增强:
foreach语句是for语句的特殊简化版本,但是foreach语句并不能完全取代for语句,然而任何foreach语句都可以改写为for语句版本。foreach并不是一个关键字,习惯上将这种特殊的for语句格式称之为foreach语句。foreach语句在遍历数组等方面为程序员提供了很大的方便,语法如下所示:
for(元素变量x : 遍历对象obj) {
引用了x的java语句;
}

八、字符串

1.创建字符串:
声明字符串:
在Java语言中字符串必须包含在一对“ ”(双引号)之内。例如:
“23.23”、“ABCDE”、“你好”
这些都是字符串常量,字符串常量是系统能够显示的任何文字信息,甚至是单个字符。
创建字符串:
String类即字符串类型,并不是Java的基本数据类型,但可以像基本数据类型一样使用,用双引号括起来进行声明。在Java中用String类的构造方法来创建字符串变量。几种常用的构造方法如下:
String():一个String对象,使其表示一个空字符序列。
String(char a[]):用一个字符数组a创建String对象。
String(char a[], int offset, int length)
提取字符数组a中的一部分创建一个字符串对象。参数offset表示开始截取字符串的位置,length表示截取字符串的长度。

2.连接字符串:
连接多个字符串:
使用“+”运算符可完成对多个字符串连接的功能。“+”运算符可以连接多个运算符并产生一个String对象。
连接其他数据类型:
字符串也可同其他基本数据类型进行连接。如果将字符串同这些数据类型数据进行连接,会将这些数据直接转换成字符串。

3.获取字符串信息:
获取字符串长度:
使用String类的length()方法可获取声明的字符串对象的长度。
语法如下:
str.length();
其中,str为字符串对象。
字符串查找:
String类提供了两种查找字符串的方法,即indexOf()与lastIndexOf()方法。这两种方法都允许在字符串中搜索指定条件的字符或字符串。indexOf()方法返回的是搜索的字符或字符串首次出现的位置,lastIndexOf()方法返回的是搜索的字符或字符串最后一次出现的位置。
(1)indexOf(String s)
(2)lastIndexOf(String str)
获取指定索引位置的字符:
使用charAt()方法可将指定索引处的字符返回。
语法如下:
str.charAt(int index)
str:任意字符串。
index:整型值,用于指定要返回字符的下标。

4.字符串操作:
获取子字符串:
通过String类的substring()方法可对字符串进行截取。这些方法的共同点就是都利用字符串的下标进行截取,并应明确字符串下标是从0开始的。
substring()方法被两种不同的方法重载,来满足不同的需要。
(1)substring(int beginIndex)
(2)substring(int beginIndex, int endIndex)
去除空格:
trim()方法返回字符串的副本,忽略前导空格和尾部空格。
语法如下:
str.trim()
其中,str为任意的字符串对象。
字符串替换:
replace()方法可实现将指定的字符或字符串替换成新的字符或字符串。
语法如下:
str.replace(char oldChar,char newChar)
oldChar:要替换的字符或字符串。
newChar:用于替换原来字符串的内容。
replace()方法返回的结果是一个新的字符串。如果字符串oldChar没有出现在该对象表达式中的字符串序列中,则将原字符串返回。
判断字符串的开始与结尾:
startsWith()方法与endsWith()方法分别用于判断字符串是否以指定的内容开始或结束。这两个方法的返回值都为boolean类型。
startsWith()方法
该方法用于判断当前字符串对象的前缀是否是参数指定的字符串。
语法如下:str.startsWith(String prefix)
其中,prefix是指作为前缀的字符。
endsWith()方法
该方法用于判断当前字符串是否是以给定的子字符串结束。
语法如下:str.endsWith(String suffix)
其中,suffix是指作为后缀的字符串。
判断字符串是否相等:
判断字符串是否相等有equals()、equalsIgnoreCase()两种方法,而又有各自的规则,使用不好就会出错,所以一定要区分好什么时候用哪种方法。
String类的startsWith()方法与endsWith()方法分别用于判断字符串是否以指定的内容开始和结尾。这两个方法的返回值都为boolean类型。
按字典顺序比较两个字符串:
compareTo()方法为按字典顺序比较两个字符串,该比较基于字符串中各个字符的Unicode值,按字典顺序将此String对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此String对象位于参数字符串之前,则比较结果为一个负整数;如果按字典顺序此String对象位于参数字符串之后,则比较结果为一个正整数;如果这两个字符串相等,则结果为0。
语法如下:
str.compareTo(String otherstr)
其中,str、otherstr是参加比较的两个字符串对象。
字母大小写转换:
字符串的toLowerCase()方法可将字符串中的所有字符从大写字母改写为小写字母,而toUpperCase()方法可将字符串中的小写字母改写为大写字母。
字符串分割:
split()方法根据指定的分割符对字符串进行分割,并将分割后的结果存放在字符串数组中。split()方法提供两种重载形式。
split(String sign)方法
该方法根据指定的分割符对字符串进行完全分割。
split(String sign,int limit)方法
该方法根据给定的分割符对字符串进行拆分,并限定拆分的份数。

5.格式化字符串:

日期和时间字符串格式化:

在应用程序设计中,经常需要显示时间和日期。如果想输出满意的日期和时间格式,一般需要编写大量的代码经过各种算法才能实现。format()方法通过给定的特殊转换符作为参数来实现对日期和时间的格式化。

使用format()方法对日期进行格式化时,会用到日期格式化转换符,常用的日期格式化转换符如下所示。

java 怎么定义一个全局变量 java定义全局变量的关键字_字符串_02


使用format()方法对时间进行格式化时,会用到时间格式化转换符,时间格式化转换符要比日期转换符更多、更精确,它可以将时间格式化为时、分、秒、毫秒。常用的时间格式化转换符如下表所示。

java 怎么定义一个全局变量 java定义全局变量的关键字_java_03


在程序设计过程中,经常需要对常规类型的数据进行格式化,例如格式化为整数,格式化为科学计数表示等,在Java中可以使用常规类型的格式化转换符来实现,下表列出了常规类型的格式化转换符。

java 怎么定义一个全局变量 java定义全局变量的关键字_java 怎么定义一个全局变量_04


6.正则表达式:

判断是否符合正则表达式的方法:

为了检查输入的数据是否满足某种格式,从JDK1.4开始可以使用String类的matches()方法进行判断。语法如下所示:

boolean matches(String regex)

regex:指定的正则表达式

返回值:返回boolean类型

该方法用于告知当前字符串是否匹配参数regex指定的正则表达式。返回值是boolean类型,如果当前字符串与正则表达式匹配,则该方法返回true,否则返回false。

正则表达式是由一些含有特殊意义的字符组成的字符串,这些含有特殊意义的字符称为元字符,下表列出了正则表达式的部分元字符。

java 怎么定义一个全局变量 java定义全局变量的关键字_java 怎么定义一个全局变量_05


在使用正则表达式时,如果需要某一类型的元字符多次输出,逐个输入就相当麻烦,这时可以使用正则表达式的限定元字符来重复次数。下表列出了常用限定符及其含义。

java 怎么定义一个全局变量 java定义全局变量的关键字_字符串_06


方括号中元字符的含义:

在正则表达式中还可以用方括号把多个字符括起来,方括号中各种正则表达式代表不同的含义。下表列出了方括号中元字符及其含义。

java 怎么定义一个全局变量 java定义全局变量的关键字_java_07


7.字符串生成器:

StringBuilder类:

StringBuilder类,即字符串生成器,新创建的StringBuilder对象初始容量是16个字符,可以自行指定初始长度,也可以动态地执行添加、删除和插入等字符串的编辑操作,大大提高了频繁增加字符串的效率。如果附加的字符超过可容纳的长度,则StringBuilder对象将自动增加长度以容纳被附加的字符。

StringBuilder类的常用方法:

StringBuilder类的构造方法有很多,主要是参数上的区别,这里我们主要介绍几种在编程中经常会用到的方法。

StringBuilder append(String str)方法

StringBuilder append(StringBuffer sb)方法

StringBuilder insert(int offset, String str) 方法

StringBuilder delete(int start, String end)方法

String toString() 方法

九、数组

数组概述:
数组是具有相同数据类型的一组数据的集合。例如,球类的集合——足球、篮球、羽毛球等;电器集合——电视机、洗衣机、电风扇等。在程序设计中,可以将这些集合称为数组。数组中的每个元素具有相同的数据类型。在Java中同样将数组看作是一个对象,虽然基本数据类型不是对象,但是由基本数据类型组成的数组则是对象。在程序设计中引入数组可以更有效地管理和处理数据。可根据数组的维数将数组分为一维数组、二维数组……
1.一维数组的创建和使用:
创建一维数组:
数组作为对象允许使用new关键字进行内存分配。在使用数组之前,必须首先定义数组变量所属的类型,即声明数组,声明一维数组有两种形式,语法如下所示:
数组元素类型 数组名字[ ];
数组元素类型[ ] 数组名字;
数组元素类型:决定了数组的数据类型,它可以是Java中任意的数据类型,包括基本数据类型和非基本数据类型。
数组名字:为一个合法的标识符
符号“[ ]”:指明该变量是一个数组类型变量,单个“[ ]”表示要创建的数组是一维数组
初始化一维数组:
数组可以与基本数据类型一样进行初始化操作,数组的初始化可分别初始化数组中每个元素。数组的初始化有两种形式。
两种方法初始化一维数组,示例代码如下所示:
int arr[] = new int[]{1,2,3,5,25}; //第一种初始化方式
int arr2[] = {34,23,12,6}; //第二种初始化方式
数组的初始化方式是:把数据类型包括在大括号之内,中间用逗号分开数组元素的值,系统自动为数组分配一定的空间。第一种初始化方式,创建5个元素的数组,其值依次为1、2、3、5、25;第二种初始化方式,创建4个元素的数组,其值依次为34、23、12、6。

2.二维数组的创建及使用:
二维数组的创建:
声明二维数组的方法有两种,语法如下所示:
数组元素类型 数组名字[ ][ ];
数组元素类型[ ][ ] 数组名字;
数组元素类型:决定了数组的数据类型,它可以是Java中任意的数据类型,包括基本数据类型和非基本数据类型。
数组名字:为一个合法的标识符
符号“[ ]”:指明该变量是一个数组类型变量,两个“[ ]”表示要创建的数组是二维数组。
二维数组初始化:
二维数组的初始化同一维数组初始化类似,同样可以使用大括号完成二维数组的初始化。语法如下所示:
type arrayname[][] = {value1,value2…valuen};
type:数组数据类型
arrayname:数组名称,一个合法的标识符
value:数组中各元素的值

3.数组的基本操作:
遍历数组:
遍历数组就是获取数组中的每个元素。通常遍历数组都是使用for循环来实现。遍历一维数组很简单,也很好理解。
遍历二维数组要比遍历一维数组要麻烦一些,需使用双层for循环,还要通过数组的length属性获得数组的长度。
填充替换数组元素:
数组中的元素定义完成后,可通过Arrays类的静态方法fill()来对数组中的元素进行替换。该方法通过各种重载形式可完成任意类型的数组元素的替换。fill()方法有两种参数类型。
对数组进行排序:
通过Arrays类的静态sort()方法可实现对数组排序,sort()方法提供了许多种重载形式,可对任意类型数组进行升序排序。语法如下所示:
Arrays.sort(object)
object:指进行排序的数组名称
返回值:排序后的数组
复制数组:
Arrarys类的copyOf()方法与copyOfRange()方法可实现对数组的复制。copyOf()方法是复制数组至指定长度,copyOfRange()方法则将指定数组的指定长度复制到一个新数组中。
数组查询:
Arrays类的binarySearch()方法,可使用二分搜索法来搜索指定数组,以获得指定对象。该方法返回要搜索元素的索引值。binarySearch()方法提供了多种重载形式,用于满足各种类型数组的查找需要。binarySearch()方法有两种参数类型。
(1)binarySearch(Object[].Object key)
(2)binarySearch(Object[].,int fromIndex , int toIndex,Object key)

4.数组排序算法:
冒泡排序:
在程序设计中,经常需要将一组数列进行排序,这样更加方便统计与查询。程序常用的排序方法有冒泡排序、选择排序和快速排序等。本节将介绍冒泡排序方法,它以简洁的思想与实现方法而备受青睐,是广大学者最先接触的一个排序算法。
冒泡排序是最常用的数组排序算法之一,它排序数组元素的过程总是小数往前放,大数往后放,类似水中气泡往上升的动作,所以称作冒泡排序。
直接选择排序:
直接选择排序方法属于选择排序的一种,它的排序速度要比冒泡排序快一些,也是常用的排序算法,是初学者应该掌握的。
反转排序:
顾名思义,反转数组就是以相反的顺序把原有数组的内容重新排序。反转排序算法在程序开发中也经常用到。