1. 变量Variable
JAVA是一种强类型语言,每个变量都需要声明其类型。
变量是程序中最基本的存储单元。要素包括变量名,变量类型和作用域。
变量在使用前必须对其声明。
type varName [= value] [{varName}value}];
int a;
int x, y, z;
局部变量和实例变量
局部变量(local variable):方法或语句块内部定义的变量。
实例变量/成员变量/属性:
- 方法外部、类的内部定义的变量。
- 如果不自动进行初始化,它会自动初始化或该类型的默认初始值(数值型初始化为0或0.0,字符型变量初始化是16为的0,布尔型变量默认是false)
局部变量需要先初始化,即赋值
2.常量 Final
只能被初始化一次。
final int c = 34;
c = 35;
// error,不能为最终变量赋值
final int MAX_SPEED = 120;
// 常量一般用大写来区分。
// 两个单词用下划线分开。
命名规范
所有变量、方法、类名:见名知意。
变量、方法名:
- 首字母小写和驼峰原则
- run(), runRun(), age ageNew monthSalary
常量:
大写字母和下划线
类名:
首字母大写和驼峰原则:Man, GoodMan
3.运算符
① 赋值运算符=
② 算术运算符
二元运算符 + - * / %
一元运算符 ++ , –
类型提升:
整数运算:
- 如果两个操作符有一个为long,则结果为long
浮点运算:
如果一个操作符为double,则结果为double。
// operator
double d = 10.2 % 3;
// 1.99999999993
// 小数也可以取余数
int a = 3;
// 自增
int b = a++; // 先赋值,在自增
int c = ++a; // 先自增,在赋值
// b = 3 c = 5
③ 布尔表达式
逻辑与: &&
逻辑或: ||
逻辑非: !
短路的方式。从左到右计算,如果确定值则不会再计算下去。
int c = 3 / 0;
// 抛出异常,算术异常 by/zero
boolean c = 1 > 2 && (3 / 0)
// 不会抛异常,说明没有执行3/0
// 即执行了短路原则
④ 位运算符
~ 取反
& 按位与
| 按位或
^ 按位异或
以下权限管理用的较多
<< 左移运算符
右移运算符
右移一位相当于除2取商。
左移一位相当于乘2。
int m = 8;
int n = 4;
m & n;
m | n;
~m; // -9
m ^ n; // 12
int a = 3 * 2 * 2;
int b = 3 << 2;
int c = 12 / 2 / 2;
int d = 12 >> 2;
补充:
boolean b1 = ture & false;
// boolean一位
// 但没有短路的功能。
⑤ 扩展运算符
+= a+=3; a = a + 3;
-=
*=
/=
%=
⑥ 字符串连接符
+运算符两侧操作数只要有一个是字符串(String)类型,系统将自动将另一个操作数转换为字符串再进行连接。
String str = "5";
int s = 4;
s + str;
// 45
⑦ 三目条件运算符
x ? y : z
x是boolean类型表达式,先计算x的值,若为true,则整个三目运算结果位表达式y的值,否则是表达式z的值。
int a = 3;
int b = 5;
String str = "";
str = (a < b) ? "a<b":"a>b"
// 类似简单的if-else
优先级问题
记住先乘除后加减
表达式里面优先使用小括号来组织。
4. Eclipse开发环境的使用
下载地址:
http://www.eclipse.org/downloads/
windows -> show view打开一些视图。
src目录:源代码
bin目录:编译过的.class文件
// debug模式
双击加断点。使用 debug as。
F6运行到下一行。
F5进入到方法中。
F8运行完成。
5. 控制语句
顺序结构
选择结构:单选,双选,多选
循环结构
5.1 if-else语句
public class TestIf() {
public static void main(String[] args) {
double d = Math.random();// [0 ,1)
int e = (int)(d * 5); //[0, 4] 只取整数部分
int e1 = 1 + (int)(d * 6); // [1, 6]
// 单选
if (e > 3) {
System.out.println("大数!");
}
// 只有一句的时候,可以不加花括号,但建议加花括号。
}
// 双选
else {
System.out.println("小数!");
}
// 多选择结构
if (e == 6) {
} else if (e >= 4) {
} else if (e >= 2) {
} else{
}
}
5.2 Switch语句
double d = Math.random();
int e = 1 + (int)(d * 6);
switch(e) {
case(6):
...
break;
case(5):
...
break;
case(4):
...
break;
default:
...
break;
}
// 如果没有break,break后面的语句都会执行。case穿透现象
// 利用case穿透
char c = 'a';
int rand = (int) (26 * Math.random());
char c2 = (char)(c+rand);
switch(c2) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
System.out.println("元音");
break;
}
JDK7.0 新特性:Switch增强
JDK7之前:表达式结果只能是int(可以自动转化位int的byte、short、char),枚举类型。
表示结果可以是:字符串。
// 测试JDK7.0新特性Switch
String a = "gaoqi";
switch(a) {
case "mashibing":
...
break;
case "gaoqi":
...
break;
default:
...
break;
}
5.3 while循环
如何符合条件,则再来一次。
int a = 1; // 初始化
while(a <= 100) { //条件判断
System.out.println(a);// 循环体
a++; // 迭代
}
while 先判断在执行
do-while 先执行再判断
5.4 for循环
变量改名:Alt + shift + R。
也可以右键
5.5 课堂练习
// 九九循环表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i + " * " + j + " = " + i*j + "\t");
}
System.out.println("");
}
}
// 编程求 Σ1+ Σ2 + ... + Σ100
int sum = 0;
int sum2 = 0;
for (int j = 1; j <= 100; j++) {
for (int i = 1; i <= j; i++) {
sum += i;
}
sum2 += sum;
}
System.out.println(sum);
5.6 break continue
break 循环退出
continue 跳过当前这个循环,继续下一次循环。
带标签的break和continue。
JAVA不使用goto,但goto是保留字。
// 100 ~ 150 的所有质数
outer: for(int i = 101; i < 150; i++) {
for (int j = 2; j < i / 2; j++) {
if (i % j == 0)
// 类似goto的用法,跳到外部的循环
continue outer;
}
System.out.println(i + " ");
}
6. 方法
method,function
完成特定功能。复用方便。
// 设计方法的原则:方法的本意是功能块,就是实现某个功能的的语句块的集合。
设计方法的时候,最好保持方法的原子型。这样有利于我们后期的扩展。
定义:
[修饰符1 修饰符2 …] 返回值类型 方法名(形式参数列表) {
JAVA语句
}
return作用:返回值和结束方法的运行。
JAVA中只有值传递。(看之后的内存分析)
7. 递归方法的详解
递归是一种常见的解决问题的方法,即把问题简单化。
Recursion
定义递归头,用于解决:什么时候不调用自身方法。
递归头:什么时候需要调用自身方法。
8. 接收键盘的输入
Scanner类
// 构造器
Scanner s = new Scanner(System.in);
String str = s.next(); // 程序运行到next会阻塞,等待键盘输入
System.out.println("键盘输入" + str);
9. API文档
API是Application Programming Interface 应用程序编程接口。
一个API文档页面构造如下:
左上角:所有的包。
左下角:所有的类。
右边:类的介绍。
package包的概念:
- 为了解决类之间的重名问题。
- 为了管理类:合适的类位于合适的包。
包的命名规则
- 通常是类的第一句非注释性语句(打包语句package cn.bjsxt.test
)
- 包名:域名倒着写,再加上模块名,并与内部管理类。
注意事项:
- 写项目不要用默认包
- com.gao和com.gao.car,这两个包没有包含关系。
常用包
- java.lang
包含一些java语言的核心类,如String、Math、Integer、System和Thread,提供常用功能。核心包直接用。
- java.awt
包含了构成抽象窗口工具集(abstract window toolkits)的多个类,这些类被用来构建和管理应用程序的图形用户界面(GUI)
- java.net
包含执行与网络相关的操作的类
- java.io
包含能提供多种输入/输出功能的类。
- java.util
包含一些使用工具类,如定义系统特性、使用与日期日历相关的函数。
生成自己项目的API文档
使用JAVADOC生成API文档。
解决问题:代码和文档的分离
特殊的注释:
// 类
/**
* 类描述
* @Author 作者
* @version 项目版本
*/
// 方法
/**
* 解释方法作用
* @param 参数 参数介绍
* @return 返回值的定义
* @throws 抛出异常描述
* @deprecated 废弃、建议用户不再使用该方法
*/
右键export -> Java -> Javadoc。生成文档。