#
编程语言的基本要素
## 标识符和关键字
在编程过程中出现的单词统称为标识符。
标识符出现的位置包括:包的命名、类文件的命名、变量的命名、方法的命名......
关键字:Java 保留的一些单词。
标识符的命名规范:
* 只能出现Unicode字符(建议用英文的大小写字母)、下划线\_、美元符$、数字
* 数字不能作为开头字符
* 自定义的标识符不能出现关键字
demo1、demo\_1、~~demo-1~~、~~1demo~~、$1demo、~~class~~
**分隔符**
* 花括号 {}:定义代码块,逻辑上是一个整体,包含有类的主体、方法主体、静态代码块的主体、条件/循环结构的执行体。
* 分号 ;:语句的结束,在 Java 中必须要用 ; 号表示语句的结束。可以出现在一行或者多行。
* 方括号 \[\] :用于数组中。
* 圆括号 \(\) :在方法中声明形式参数,在调用方法时传入实际的参数,用于在表达式运算时的优先级。
* 空格:在编写 Java 代码的过程中,一般只会出现3类空格的情况:单个空格、Tab制表位、回车换行。
* 圆点:用于对象或者类与其成员之间的分隔,表示调用类/对象的属性或者方法。
> 在 Java 中,只要看到首字母大写的单词,这个单词所表现的就是 类,在变量或者方法的命名中,一般采用驼峰命名法则,Java 大小写敏感。
## 注释
注释是编写代码非常非常重要的环境,一般好的程序,注释写的代码量都会比程序多。
> 注释是不会被程序执行的语句。
注释可能出现的位置:
* 类、方法、属性的上部分(一般采用文档注释)
* 方法体内的业务逻辑操作(一般性注释)
单行注释、多行注释、文档注释
```java
/**
* 这是一个定义圆的类
* 此处是文档注释
**/
public class Circle {
/**
* 定义圆的半径
*/
double r;
/**
* 定义圆的周长
*/
void zc(int k) {
// 从控制台打印输出圆的周长值,此处是单行注释
System.out.println("该圆的周长是:" + (2 * 3.14 * r));
}
void mj() {
/*
从控制台打印输出圆的面积
作者:xxx
此处是多行注释
*/
System.out.println("该圆的面积是:" + (3.14 * r * r));
}
public static void main(String[] args) {
Circle c1 = new Circle();
c1.r = 2.0;
c1.zc();
c1.mj();
}
}
```
> 查看 [JDK 帮助文档](http://tool.oschina.net/apidocs/apidoc?api=jdk_7u4),借助 JDK 中 src.zip 中的 Java 源码学习。
## 变量
向内存中写入数据,在内存中标注其存储的位置。
**定义变量的语法:**
```
[修饰符] 数据类型 变量名;
```
**变量赋值:**
```
变量名 = 值;
```
**合并在一起:**
```
数据类型 变量名 = 值;
```
> 在一个 Java 文件中,能定义多个类,但是只能一定一个 public 修饰的类。
```java
public class Demo1 {
public static void main(String[] args) {
// 定义变量
int x;
x = 10;
double y = 3.14;
// int x = 10;
System.out.println(x);
System.out.println(y);
String s1 = "Tom";
String s2 = "Helen";
String s3 = "Tom";
String s4 = "Hello World";
String s5 = "Hello ";
String s6 = "World";
String s7 = "Hello " + "World";
Student tom = new Student();
tom.name = "tom";
tom.age = 20;
tom.sex = true;
tom.school = "南通大学";
tom.listen();
}
}
class Student {
String name;
int age;
boolean sex;
String school;
void listen(){
System.out.println(name + "在上课。");
}
}
```
## 数据类型
**在 Java 中一共有 8 种基本数据类型**
数值型
* 整型:byte\(-128-127\)、short\(15次方\)、**int**\(31次方\)、long\(63次方\)
* 浮点型:float\(38次方\)、**double**\(308次方\)
字符类型:表示的单个字符(Unicode编码字符)
* char,用单引号
* 在字符中,除了单个字母外,还可以使用转义字符
布尔类型:只有两个值 真和假 true false
* boolean : true/false
> 在实际的开发过程中,我们使用到的基本数据大部分情况下,整数型使用 int 类型,浮点型使用 double 类型。
**引用数据类型**
类类型和数组,在后续学习面向对象介绍。
## 运算符
### 算术运算符
```
有:+ - * / % ++ --
++:自增
--:自减
```
实例
```java
int i = 10;
int j = 20;
System.out.println(i + j); // 30
System.out.println(i++); // 10
System.out.println(i); // 11
System.out.println(++i); // 12
```
### 赋值运算符
```
有:= += -+ *= /= %=
```
实例
```java
int i = 10;
int j = 20;
i = j + 5; // 25
i += 5; // i = i + 5; 30
System.out.println(i); // 11
```
### 比较运算符
```
有:> < >= <= == !=
```
> 比较运算符连接的表达式返回的结果是:boolean
### 逻辑运算符
```
有:与 && 或 || 非 !
```
与:只要有一个为假,那么整个表达式就是假;
或:只要有一个是真,那么整个表达式就是真;
### 三目运算符
```
expression ? true-值 : false-值
```
实例
```java
int age = 10;
String ageStr = age > 18 ? "成年" : "未成年";
```
### 运算符的优先级
![](https://gss2.bdstatic.com/-fo3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike80%2C5%2C5%2C80%2C26/sign=59a3e1017d3e6709aa0d4dad5aaef458/63d9f2d3572c11df57c9a205612762d0f703c2f8.jpg)
> 如果不了解优先级,可以使用\(\)强制优先级。
>
> 赋值运算符优先级是最低的。
## 流程控制
在 Java 甚至在绝大多数的编程语言中,流程控制语句就以下三类:
* 顺序结构
* 分支选择结构(判断)
* 循环结构
### 分支选择结构
**if 结构**
语法:
```
if (logic expression) {
true : statement;
}
```
```java
public static void main(String[] args) {
int age = Integer.valueOf(args[0]);
if (age > 18) {
System.out.println("我已经成年了。");
}
}
```
**if-else 结构**
语法:
```
if (logic expression) {
true : statement;
} else {
false : statement;
}
```
**if-else if 结构**
```java
if (age > 0 && age <= 18) {
System.out.println("我是少年。");
} else if (age <= 30) {
System.out.println("我是青年。");
} else if (age <= 50) {
System.out.println("我是中年。");
} else{
System.out.println("我是老年。");
}
```
**switch 结构**
> 多个离散值的分支选择结构
```java
public static void main(String[] args) {
int color = Integer.valueOf(args[0]);
switch(color) {
case 1 : {
System.out.println("赤");
break;
}
case 2 : {
System.out.println("橙");
break;
}
case 3 : {
System.out.println("红");
break;
}
case 4 : {
System.out.println("绿");
break;
}
case 5 : {
System.out.println("青");
break;
}
case 6 : {
System.out.println("蓝");
break;
}
case 7 : {
System.out.println("紫");
break;
}
default: {
System.out.println("没有找到颜色");
break;
}
}
}
```
> 在 JDK1.7 之后,switch后面的分支表达式是可以输入 字符串 的,之前只支持基本数据类型中的整型和字符型。
>
> **在 case 语句中,最后一句务必写上 break;**
>
> 在实际开发过程,switch 使用频率是比较小的,一般都会使用 if-else 结构替代。
### 循环结构
循环结构可以在满足特定循环条件的情况下,反复的执行某一段代码。
循环结构中可能包含的内容有:
* 初始化语句(init\_statement) :一条或者多条语句构成,用于做一些循环之前的初始化工作。
* 循环条件(test\_expression):是一个 boolean 类型的表达式,用于控制循环是否可以被执行或者结束。
* 循环体(body\_statement) :如果条件允许,循环体会被反复执行。
* 迭代语句(Iteration\_statement):在一次循环体结束完成之后,对循环条件进行求值,通常用于控制循环条件中的变量,使得循环在合适的时候结束。
**while 结构**
语法:
```
[init_statement];
while (test_expression) {
body_statement;
iteration_statement;
}
```
实例
```java
int i = 1;
int sum = 0;
while (i <= 10) {
sum = sum + i;
i = i + 1;
// sum += i++;
}
System.out.println(sum);
```
**do-while 结构**
```
do {
body_statement;
iteration_statement;
} while (test_xepression)
```
> 在一般的开发过程中,不会使用 do-while 循环的。
**for 结构**
语法
```
for (init_statement; test_exprssion; iterator_statement) {
body_statement;
}
```
实例
```java
int sum = 0;
for (int i = 1; i <= 10; i++) {
sum = sum + i;
}
System.out.println(sum);
```
> for 循环一般用在 迭代次数 是固定的循环中