一、Java编程风格与命名规范
1. 格式规范
a) 缩进嵌套的代码
b) 断开很长的句子
c) 使用空白
d) 不要直接使用Tab控制符
2. 命名规范
a) JAVA源文件的命名
JAVA源文件名必须和源文件中所定义的类的类名相同。且不能为关键字
b) Package的命名
Package名的第一部分应是小写ASCII字符,并且是顶级域名之一,通常是com、edu、gov、mil、net、org或由ISO标准3166、1981定义的国家唯一标志码。Package名的后续部分由各组织内部命名规则决定,内部命名规则指定了各组件的目录名,所属部门名、项目名等。
c) Class/Interface的命名
Class名应是首字母大写的名词, 而且大写中间单词的首字母。命名时应该使其简洁而又具有描述性。异常类的命名,应以Exception结尾。Interface的命名规则与Class相同。
d) 常量的命名
常量名的字母应全部大写,不同单词之间通过下划线连接,并且名字组合应该赋予含义。
e) 变量的命名
普通变量
普通变量名的首字母小写,其它每个单词的首字母大写。命名时应该使其简短而又有特定含义,简洁明了的向使用者展示其使用意图。
约定变量
所谓约定变量,是指那些使用后即可抛弃(throwaway)的临时变量。通常i、j、k、m和n代表整型变量;c、d和e代表字符型变量。
f) 方法的命名
方法名的第一个单词应是动词,并且首字母小写,其它每个单词首字母大写。
g) 方法参数的命名
选择有意义的名称作为方法的参数名。可能的话,选择和需要赋值的字段一样的名字。
详见Java编程风格与命名规范-ZZ
二、 语法基本元素
1. 关键字
a) 定义:被JAVA语言赋予了特殊含义的单词。
b) 特点:关键字中所有字母都为小写。
c) 注意:goto和const作为保留字存在,目前并不使用。
2.
标识符
a)
含义:标识符就是给类,接口,方法,变量等起名字时使用的连续字符序列。
b)组成规则:① 英文大小写字母A~Z和a~z ② 数字字符0~9 ③ $和 _
c)注意事项:① 不能以数字开头 ② 不能是Java中的关键字 ③ 区分大小写
④ 不能有空格
3.
数据类型、常量和变量
a) 基本数据类型
byte、short、int、long、float、double、char、boolean
b) 引用数据类型
数组、类、接口。
分类
不同类型
关键字
字节数
取值范围
默认值
整数型
字节型
byte
1个字节
-27~27-1(-128~127)
0
短整型
short
2个字节
-215~215-1(-32768~32767)
0
整型
Int(默认)
4个字节
-231~231-1
0
长整型
long
8个字节
-263~263-1
0
文本型
字符型
char
2个字节
0~216-1(从0~65536)
‘\u0000’
浮点型
单精度浮点型
float
4个字节
大约±3.40282347E+38F
(有效位数为6~7位)
0.0f
双精度浮点型
Double
(默认)
8个字节
大约±1.79769313486231570E+308
(有效位数为15位)
0.0d
逻辑型
布尔型
boolean
1个字节
True/false
false
级别从低到高为:(byte-->short),char (这两个平级)--> int-->
float--> long--> double
补充:不同的字符所占的字节是不同的。详见输入输出章节之字符编码。
0x 0
c) 数据类型转换
不同的基本数据类型之间进行运算时需要进行类型转换,除boolean类型外所有的基本数据类型都需要考虑类型转换,其主要应用在算术运算和赋值运算时。
自动类型转换:除boolean型外,其他数据类型系统自动从低级别到高级别转换;
强制类型转换:把一个高级别的数赋给一个低级别的的变量。
Ø溢出处理:待补充
补充:同种类型之间才可以进行强制装换。错误举例:String a = (String)2;
正确举例:String a = integer.toString(2)或int i =
integer.parseInt(s);
d) 变量
所有局部变量在使用前都得初始化。详见类与对象部分。
e)
常量
在程序执行的过程中其值不可以发生改变的量,Java中常量可分为字面值常量和自定义常量。 eg. final double PI =
3.14;
字符串常量 用双引号括起来的内容
整数常量 所有整数 12,23,默认为int,长整型加字母‘L ’
小数常量 所有小数
12.34,56.7,默认为都double,float加字母‘F’
Ø字符常量 用单引号括起来的内容‘a’,‘A’,‘0’和转义字符常量”\n”
布尔常量 较为特殊,只有true和false
空常量
null (数组部分讲解)
符号常量 用一个标识符来表示的常量,修饰符final,eg.#definePI3.14
f)
引用方法
含义
\b
退格
\t
水平制表符Tab
\n
换行
\f
表格符
\r
回车
\'
单引号
\"
双引号
\\
反斜线
表:常用转义字符
整型常量的三种进制表示形式
十进制整数,如12, -314, 0。
八进制整数,要求以0开头,如012
十六进制数,要求0x或0X开头,如0x12
十进制数形式,必须含有小数点,例如:
f) 浮点类型常量两种表示形式
3.14 314.0 时 .314
科学记数法形式,如
3.14e2 3.14E2 314E2
g) 转义字符的用法
System.out.println(“Hello\nWorld”);
System.out.println(“Hello”+”\n”+”World”);
4.
运算符和表达式
表达式是由运算符与操作数组合而成的,运算符指明对操作数的运算方式。组成表达式的Java操作符有很多种。运算符按照其要求的操作数数目来分,可以有单目运算符、双目运算符和三目运算符,它们分别对应于1个、2个、3个操作数。运算符按其功能来分,有算术运算符、赋值运算符、关系运算符、逻辑运算符、位运算符和其他运算符。
优先级
运算符
含义描述
1
() ,.,[]
强制运算、方法调用
2
++ ,--, + ,~(位取反), !(逻辑取反)
一元运算、字符串相加
4
* , / , %
算术运算 乘除、取余
5
+ , -
算术运算 加减(正负)
7
,<= ,>= ,
比较运算、类运算
8
= = , ! = ,.equals()
比较运算
9
&
逻辑(位)运算 与
10
^
位运算 异或
11
|
逻辑(位)运算 或
12
&&
逻辑 与(短路)
13
||
逻辑 或(短路)
14
?: eg. (关系表达式)?表达式1:表达式2;
三元 条件运算
a) 算术运算符
(* , / ,
% , + , -)
%:任何整数模2不是0就是1,所以只要改变被模数就可以实现开关运算。
+:加法运算符,连接符。举例:123+321+hello=444hello;hello+123+321=hello123321;hello+(123+321)=hello444;
++,--:自增自减运算。举例:int a=5;print(4++);//5 print(++4);//7
* , /:注意小数类型计算问题。1/2*2=0,1/2*2.0=0,1/2.0*2=1.0。整型与整型运算得整型,整形与浮点型运算得浮点型,结果取取决于第一次遇到浮点型的位置。
b) 赋值运算符
(= , *= ,
/= , %= , += , -=)
c) 比较运算符
(,<=
,>= ,= = ,
! =)boolean
bo=(i==j);
特点:该运算符的特点是:运算完的结果,要么是true,要么是false。
待补充:==与.equals()区别:
d) 逻辑运算符
(&, | ,
^ , ! ,&&, ||)
逻辑运算符除了 ! 外都是用于连接两个boolean类型表达式。
&:只有两边都为true结果是true。否则就是false。
|:只要两边都为false结果是false,否则就是true。
^:异或:和或有点不一样。
u
两边结果一样,就为false;
u
两边结果不一样,就为true。
& 和 &&区别:
u
&:无论左边结果是什么,右边都参与运算(建议短路与);
u
&&: 短路与,如果左边为false,那么右边不参数与运算。
| 和|| 区别:
u
|:两边都运算(建议短路或);
u
||:短路或,如果左边为true,那么右边不参与运算。
三、
流程控制
在Java中,流程控制分为三种基本结构:顺序结构、分支结构和循环结构。
If判断:
else If判断:
If判断(嵌套):
switch判断:
if (表达式) {
//语句1;
}else{
//语句2;
}
类比:
(关系表达式)?
表达式1:表达式2;
注:else语句可用
Continue代替;
if (表达式1) {
//语句1;
}
else if (表达式2) {
//语句2;
…
}
else {
//语句3;
}
If (表达式1) {
if(表达式2) {
//语句1;
} else {
//语句2;
}
} else {
//语句3;
}
switch (表达式) {
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
…
default:
语句3;
}
while循环:
do-while循环:
for循环:
while(表达式) {
//循环体;
}
do{
//循环体;
} while(表达式);
for(初始化;条件;迭代) {
//循环体;
}
1.
循环语句
a)
循环是相同动作的集合.
b)
循环次数确定的情况,通常选用for循环;
循环次数不确定的情况,通常选用while或do-while循环。
c)
初始情况不满足循环条件时,while循环一次都不会执行;
do-while循环不管任何情况都至少执行一次。
d)
for 循环,若变量在判断条件内初始化,则作用域为循环体(大括号)内。
e)
嵌套循环判断条件:内层循环一圈,外层循环一次。
2.
判断语句
a)
多重if与switch选择结构比较
相同点:都是用来处理多分支条件的结构
不同点:switch选择结构只能处理等值条件判断的情况;多重if选择结构没有switch选择结构的限制,特别适合某个变量处于某个连续区间时的情况。
b)
else If 顺序进行判断,当前面条件不满足时才进行下一步,条件满足,跳过剩余结构,结束判断语句。
c)
switch 后面的小括号中的变量应该是int、short、byte、char、枚举类型、String。
d)
switch 可进行语句合并,以进行连续区间判断。(省去语句和break)
3.
跳转语句
a)
break:结束判断语句,执行完判断体后的语句后,终止离自己最近的外层循环。
do {
Stringtitle = input.next();
if (title.equals("exit")) {
break;
}
} while (true);// 跳出死循环
b)continue:结束判断语句,终止本次循环,不执行判断体后面语句,进入下一次循环。
publicstaticvoidmain(String[] args) {
inti = 0;
do {
i++;
if (i == 3) {
// break; // 输出12
continue; // 输出1245
}
System.out.println(i);
}
while (i<5);
}
c)
return:结束当前方法的执行并退出,并返回值到调用该方法的语句处。
for (inti = 0; i<10; i++) {
if (i % 2 != 0)
return;
System.out.print(i);
} // 运行结果:0
4.
flag 或index标记的用法
循环内判断用flag标记返回判断结果。
返回函数返回值时,用flag传递返回值。
需要交互输入的函数最好放在测试类的main中,否者传递返回值会很麻烦。
四、
数组
数组是一个变量,存储相同数据类型的一组数据
步骤
举例
解释
声明
int[ ] a;
告诉计算机数据类型是什么
分配空间
a = new
int[5];
告诉计算机分配几个连续的空间
赋值
a[0] = 8;
向分配的格子里放数据
引用
a[0] = a[0]
* 10;
引用数据进行计算
1.
数组的常用操作
a)
声明数组并分配空间
数据类型[ ] 数组名 = new 数据类型[大小];
b)
数组的初始化(声明的同时赋值)
方法1: 边声明边赋值。
int[ ] scores = {89, 79, 76};
int[ ] scores = new int[ ]{89, 79, 76};
方法2:动态地从键盘录入信息并赋值。
Scanner input = new Scanner(System.in);
for(int i = 0; i < 30; i ++){
scores[i] = input.nextInt();}
创建数组并赋值的方式在一条语句中完成。
所有的数组下标默认从0开始,而且访问时不可超出定义的上限,否则会产生越界错误。
for 遍历 (逆序输出)
c)
数组的遍历
for (intk = array.length - 1; k>= 0; k--) {// 逆序输出
System.out.print(array[k]+"\t");
}
for增强型函数
for (inttemp : array) {// 用for增强型函数对数组进行顺序输出
System.out.println(temp);
}
对数组进行增添,修改,删除
数组的增添举例:
String[] phones = new String[] {"iPones4S", "iPones5", null};
// null 不用加双引号
intindex = -1;// 增加监视器
for (inti = 0; i
if (phones[i] == null) {
index = i;
break;
}
}
if (index != -1) {
phones[index] = "iPones6";
} else {
System.out.println("数组已满");
}
System.out.println(Arrays.toString(phones));
注释:数组的修改与删除类似
d)
数组的排序
冒泡排序
for (intm = 0; m
for (intn = 0; n
if (array[n] >array[n + 1]) {
inttemp = array[n];
array[n] = array[n + 1];
array[n + 1] = temp;
}
}
}
e)使用Arrays 类操作数组
方法名称
说明
Arrays.
boolean
equals(array1,array2)
比较array1和array2两个数组是否相等
sort(array)
对数组array的元素进行升序排列
String
toString(array)
将一个数组array转换成一个字符串
void
fill(array,val)
把数组array所有元素都赋值为val
copyOf(array,length)
把数组array复制成一个长度为length
的新数组,返回类型与复制的数组一致
int
binarySearch(array, val)
查询元素值val在数组array中的下标
(要求数组中元素已经按升序排列
注释:import java.util.*;
2.
二维数组
一、
数组的初始化
String[][] str = newString[5][];
int[][] scores = newint[][] { { 90, 85, 54 }, { 76, 80 },{ 87 }
};
int[][] scores = { { 90, 85, 54 }, { 76, 80 }, { 87 }
};
二、
数组的遍历
publicclassCase5 { // 二维数组的遍历
publicstaticvoidmain(String[] args) {
int[][] scores = newint[][] { { 90, 78, 54 },
{ 76 , 80 }, { 87 }
};
for (inti = 0; i
for (intj = 0; j
System.out.println(scores[i][j]);
}
}
}
}