标识符、关键字
1)标识符( Identifier)
标识符:是对变量、类、方法、标号和其它各种用户自定义对象的命名。
标识符规则
- 是一个由字符、数字、下划线(_)和美元符号($)构成的字符串。
- 必须以字符、下划线(_)或美元符号($)开头,不能用数字开头。
- 不能是保留字。
- 不能是true、false和null(这三个不是保留字)。
- 可以有任意的长度。
正确的标识符
- google、h1n1、_start_time、$china、University
不正确的标识符
- 360safe、public、true、bill@gmail.com
汉字也可以作为标识符(但书写不便,不推荐): int 年龄 = 20;
2)Java对标识符的规范
- Java对标识符的规范
没有规范的命名不是一个科班出身的软件开发者应有的行为
- Java标识符规范:
- 类名称:Mammal
- 函数名:getAge
- 常量:MAX_HEIGHT
- 标识符起名应该尽量做到“望名知义”。
3)关键字(reserved word、keyword)
- 对编译器具有特殊意义,在程序中不能用作其他目的的字,如:class、public、static、void 等。
- Java关键字列表(共50个):
数据类型、常量和变量
1)数据类型(data types)
- 基本数据类型(primitive type)
- 布尔型——boolean
- 字符型——char
- 整型——byte、short、int、long
- 浮点型——float、double
- 引用数据类型(reference type)
- 数组——array
- 类——class
- 接口——inteface
- 枚举——enum
2)常量( constant)
- 在程序运行过程中,不许改变的变量,称为常量
- 利用关键字final声明常量,对于全局的常量(即在整个项目中都可用),通常按以下模式声明: public static final int MAX_VALUE=512;
- 如果某常量只在本类使用,则应将其定义为private的。
- 常量名字通常采用大写字母,可以使用下划线
注:在 C/C++ 语言中,使用 const 来定义常量。Java 中 const 也是保留字,但是没有用。
- Java常量包括基本数据类型常量、字符串(String)常量和null
- 布尔(boolean)常量:true, false
- char常量:‘c’, ‘\u0061’, ‘\u0051’ , ‘\u005a’
- int常量:(10)10=(0xA)16=(012)8 ,34
- long常量:34L
- double常量:1.5, 45.6, 76.4E8, -32.0
- float常量:1.5F, 45.6f, 76.4E8F, -32.0F
- String常量:”Hello World!”
- 引用数据类型常量: null
- 独立于平台
- Java中,整型的范围与运行机器无关,解决了移植时的问题
- 在C/C++中,int表示与目标机器相关的整数类型
3)变量 (Variable)
- 变量表示Java程序中的基本存储单元,总是具有某种数据类型:
- 基本数据类型
- 引用数据类型
- 变量总是具有与其数据类型相对应的值
- 每个变量均具有:名字、类型、一定大小的存储单元以及值
- 变量就是内存单元的名字,即对应内存的位置
- 数据类型决定了它所占用的内存单元数量
- 值 表示变量所占用的内存单元中所保存的数据
- 变量的读写
- 当新值被赋给变量时,老值将被取代,仅从内存中读数据不会破坏数据
- 变量的使用
- 变量在使用前应保证它有确切的值。
- 同名变量的屏蔽原则。
- 在实际开发中,一般使用变量来存储用户在程序运行时输入的数据。
4)Java应用程序读入数据
- 在运行时读取用户输入
- 使用JOptionPane类的showInputDialog方法
String firstNumber = JOptionPane.showInputDialog(“Enter :" );
- 使用Scanner类(JDK1.5以上)
Imports java.util.*; Scanner in=new Scanner(System.in); System.out.print(“What is your name?”); String name=in.nextLine();
5)浮点数据的精度
- 包含浮点数的计算是近似的,因为这些数没有以完全的准确度存储。例如:
- System.out.println(1.0 - 0.1 - 0.1 - 0.1 - 0.1 - 0.1); 显示的是0.5000000000000001而不是0.5
- System.out.println(1.0 - 0.9); 显示的是0.09999999999999998 而不是0.1
- 整数可以精确地存储。因此,整数计算得到的是精确的运算结果
- 处理精度损失——使用BigDecimal类
6)字符类型
- 字符类型使用单引号括起来
- char类型用来表示在Unicode编码表中的字符
- 由Unicode Consortium建立的一种16位编码方案,支持世界不同语言的文本交换、处理和显示。
- 一个Unicode码占两个字节,书写上用以\u开头的4位十六进制数表示,范围从‘\u0000’到‘\uFFFF’,共65536个
- 增量和减量运算也可以用于char型变量,得到后一个或前一个Unicode字符
- 特殊字符的转义序列
7)boolean类型
- 基本数据类型(同int、double一样)
- 只有两个取值:true(真)、false(假)
- 整型数据和boolean型不能相互转换
8)字符串类型(String)
- char类型只表示一个字符,要表示一个字符构成的串,就应使用字符串(String),如:
- String message = "Hello, world";
- 注意String的S要大写
- 字符串由双引号括起来
- String是Java的一个预定义类,String不是基本类型,称为引用类型。
- 任何Java类都可以作为变量的引用类型
- 字符串连接——使用“+”号连接
- 将String 和其它数据类型相加,结果是一个新的String
9)枚举数据类型
- 定义:
- enum Size{SMALL, MEDIUM, LARGE}
- 使用:
- Size s=Size.SMALL;
- //从字串转换为枚举
- Size t=Size.valueof(“SMALL”);
- 注意: 枚举类型适用于JDK 5.0及更新的版本
- 枚举类型是引用类型,枚举不属于原始数据类型,它的每个值都引用一个不同的对象。
- 两个枚举型对象比较
- Demo: EnumTest.java
10)数据类型转换
1、数值类型转换
- 隐式转换——自动转换是安全的
- double d = 3; (拓宽类型type widening)
- 显式转换——强制转换可能引起信息丢失
- int i = (int)3.0; (缩窄类型type narrowing)
- int i = (int)3.9; (截掉小数部分)
- 拓宽类型不需要明确指出,可以自动执行;缩窄类型必须明确地指明
- 错误的例子: int x = 5 / 2.0;
2、字符串转换为数值
- 字符串——int:用 Integer 类中的 parseInt 方法
- int——字符串:用 String 类中的 valueOf 方法
- 字符串——double:用 Double 类中的 parseDouble 方法
- double ——字符串:用 String 类中的 valueOf 方法
int intValue = Integer.parseInt("123"); // String 到 int String stringValue = String.valueOf(123); // int 到 String double doubleValue = Double.parseInt("123.0"); // String 到 double String doubleValue = String.valueOf(123.0); // double 到 String
注意:int/double 是基本数据类型;Integer/Double是引用类型
11)Java两种类型的变量
- 引用类型变量(Reference variables) :引用一个对象 (变量本身用于存放对象在内存中的位置,可以看成是一个指针),故又称为“对象变量”
- 原始数据类型变量,变量中仅包含数据。
运算符
1)算数运算符
- 基本与C一致
- 整数和浮点数混合运算
2)复合赋值运算符
注意:+-*/% 同 = 之间没有空格
3)自增自减运算符
4)关系运算符
注意:字符也可以进行比较。实际上是对字符的Unicode进行比较。如:('a' > 'A') = true
5)逻辑运算符(logical operator)
6)位运算符 (bit operator)
1、当操作整型数据时,可以使用位运算符(即:按位运算)
2、&运算符的其他用途
- 测试一个数的某位是否为 1
- x & 4 = 0,说明 x 的第 2 位为 0
- x & 8 !=0,说明 x 的第 3 位为 1
- 截取一个数的低4位
- 0x7B & 0x0F ==> 0x0B
- 截取一个数的高4位
- 0x7B & 0xF0 ==> 0x70
7)位移运算符
注意: 只用于整数
8)条件运算符
- 条件运算符“? :”的表达式形式为 “op1 ? op2 : op3”
- op1:布尔表达式
- 例如:
- int k= ( (i>=0) ? 1 : -1);
9)运算符规则
- 运算符优先级(从高到低)
- 运算符结合性 (Precedence of operators)
- 计算没有括号的表达式时,运算符依照优先级规则和结合方向进行运算。
- 除了赋值运算符 = ,所有的双目运算符都是左结合的(left-associative),从左到右。
- 例如: x = y = z 相当于 x = (y = z
控制结构
1)程序执行的顺序
- 三种程序基本结构
1、Sequence structure(顺序结构)
- 简单的if语句
- if ... else 语句
- if 语句的嵌套
- else 和 if 的匹配
2、Selection structure(选择结构)
switch (switch-expression) /*表达式 switch-expression必须能计算出一个char、byte、short或int型值,并且必须用括号括住它*/ { case value1: statement(s)1; break;//break语句可以立即终止整个switch语句。如果break语句没有出现,那么执行下一条case 语句 case value2: statement(s)2; break; ... ... case valueN: statement(s)N; break; default://默认情况(default)是可选的,它用来执行指定情况与switch-expression都不匹配时的操作 default-statement(s); }
3、Repetition structure(循环结构)
for循环
for (initial-action; loop-continuation-condition; action-after-each-iteration) { // loop body statement(s); }
while循环
do-while 循环
- 上述三种程序基本结构是“完备的”,再复杂的程序执行流程,都可以分解为上述三种结构的组合。
- “流程图(Flowchart)”常用于描述程序执行顺序。
编程规范
1)编程风格和文档
- 适当的注释
- 命名习惯
- 类名 类名的每个单词的首字母大写,如 TaxCalculator 类名一般是名词形式
- 常量 所有的字母都大写,两个单词间要用下划线连接 如:PI、MAX_INT_VALUE 等
- 变量和方法名 常用小写,如:area, radius;如果名字包括几个词,则把它们连成一个,第一个词的字母小写而后面的每个单词的首字母大写,例如: 变量:urrentTime、annualInterestRate ;方法:showInputDialog()、currentTimeMillis() 这种书写方式又称为骆驼(camel)式 ;变量名一般是名词形式,如 name、age、amount 等 ;方法名一般是动词形式,如 getName(), calculateAmount() 等
- 适当的缩进和空白
- 块的对齐方式
- 详见:《Java 编码规范》