关键字 & 标识符
关键字的概念与特征
概念: Java 关键字是事先定义好的对 Java 的编译器有特殊的意义, 他们用来表示一种数据类型, 或者表示程序的结构等, 关键字不能用作变量名, 方法名, 类名, 包名和参数.
特征:
完全小写
在增强版记事本中 (例如 Notepad++) 有特殊颜色
标识符的概念与规则
什么是标识符?
凡是可以由自己命名的地方都称为标识符.
例: 项目名 , 包名 , 类名 . 方法名
2. 命名规范
1 不可使用 java 关键字和保留字, 但是可以包含关键字和保留字.
2 可以使用 26 个字母大小写, 数字 0-9,$ 和_.
3 可以使用数字, 但不可放在首位.
4 长度理论上没有限制, 但命名最好能反映出其作用, 遵循 "驼峰形式", 见命知意
5 包名全部小写, 类名全部大驼峰式
6 变量名, 方法名首字母小写, 如果名称由多个单词组成, 每个单词的首字母都要大写
7 常量 (特指被 final 修饰的常量) 名全部大写, 如果是单个字母, 需要大写, 如果是多个单词, 需要用下划线分开. 并且都大写
例: 写一个 Ajax 的项目实例,
项目名: ajaxtest 包名: com.liu.Ajax 类名: AjaxDemo
常量 & 变量
常量的概念: 在程序运行期间. 固定不变的量.
常量的分类:
1. 字符常量: 凡是用单引号引起来的单个字符, 就做字符常量. 例如:,'b',9','中
2. 字符串常量: 凡是用双引号引起来的部分, 叫做字符串常量. 例如:"abc","Hello","123"
3. 整数常量: 直接写上的数字, 没有小数点. 例如: 100,200,0,-250
4. 浮点数常量: 直接写上的数字, 有小数点. 例如: 2.5,-3.14,0.0
5. 布尔常量: 只有两种取值 true | false
基本数据类型:
类型 字节数 二进制位数
- byte (字节型) 1 8
- short(短整型) char (字符型) 2 16
- int (整型) float (单精度浮点数) 4 32
- long (长整型) double(双精度浮点数) 8 64
注意事项:
Java 中的默认类型: 整数类型是 int , 浮点类型是 double
数据范围与字节数不一定相关, 例如 float 数据范围比 long 更加广泛, 但是 float 是 4 字节, 1ong 是 8 字节.
浮点型可能只是一个近似值, 并非精确的值.
浮点数当中默认类型是 double. 如果一定要使用 float 类型, 需要加上一个后缀 F.
字符串不是基本类型, 而是引用类型
如果是整数, 默认为 int 类型, 如果一定要使用 long 类型, 需要加上一个后缀 L. 推荐使用大写字母后缀.
变量: 程序运行期间, 内容可以改变的量.
创建一个变量并且使用的格式:
数据类型 变量名称; // 创建了一个变量
变量名称 = 数据值; // 赋值, 将右边的数据值, 赋值交给左边的变量
一步到位的格式:
数据类型 变量名称 = 数据值; // 在创建一个变量的同时, 立刻放入指定的数据值
注意事项:
1. 如果创建多个变量, 那么变量之间的名称不可以重复.
2. 对于 float 和 long 类型来说, 字母后缀 F 和 L 不要丢掉.
3. 没有进行赋值的变量, 不能直接使用; 一定要赋值之后, 才能使用.
作用域 : 从定义变量的一行开始, 一直到直接所属的大括号结束.
数据类型转换
当效据类型不一样时, 就会发生数据类型转换
自动类型转换(隐式)
1. 特点: 代码不需要进行特殊处理, 自动完成
2. 规则: 数据范围从小到大
- long num1 = 100;
- System.out.println(num1)
- // 左边是 long 类型, 右边是默认的 int 类型, 左右不一样
- // int-->long, 符合了数据范围从小到大的要求
强制类型转换(显式)
1. 特点: 代码需要进行特殊的格式处理, 不能自动完成
2. 格式: 范围小的类型范围小的变量名 =(范围小的类型)原本范围大的数据
- int num=(int)100L;
- System.out.print1n(num);
- // 左边是 int 类型, 右边是 long 类型, 不一样
- // 格式范围小的类型 范围小的变量名 =(范围小的类型) 原本范围大的数据 ;
注意事项:
1. 强制类型转换一般不推荐使用, 因为有可能发生精度损失, 数据溢出.
2.byte / short / char 这三种类型都可以发生数学运算, 例如加法 "+".
3.byte/short/char 这三种类型在运算的时候, 都会被首先向上提升成为 int 类型, 然后再计算. 符合 ASCII 编码表.
例 3:
- byte num4 = 40;// 注意! 右侧的数值大小不能超过左侧的类型范围
- byte num5 = 50;
- // 当 byte + byte, 会先向上提升称为 int 类型, 所以结果就是 --> int + int , 返回类型也应该是 int
- int result1 = num4 + num5;
- System.out.println(result1);//90
运算符 : 进行特定操作的符号. 例如:+
表达式: 用运算符连起来的式子叫做表达式. 例如: 20+5 . 又例如: a+b
四则运算: 加 + 减 - 乘 * 除 /
取模(取余数):%
只有对于整数的除法来说, 取模运算符才有余数的意义.
- int x = 10;
- int y = 3;
- int resultl = x / y ;
- System.out.println(result1);//3
- int result2 = x % y ;
- System.out.println(result2);// 余数, 模, 1
算术运算符
四则运算当中的加号 "+" 有常见的三种用法:
1. 对于数值来说,+ 就是加法.
2. 对于字符 char 类型来说, 在计算之前, char 会被提升成为 int, 然后再计算.
char 类型字符, 和 int 类型数字, 之间的对照关系表: ASCII,Unicode
3. 对于字符串 String 来说,+ 代表字符串连接操作. () 小括号的优先级最高
例 3:
- String str = "Java";
- //String + int --> String
- System.out.println(str2+20);//Java20
自增运算符:++
例如: a++; 先使用 a 值, 再执行 a = a + 1 ;
- int a = 1;
- int b = 2;
- b = a++; // 在这一步, a 的值还没有改变, 所以是将 a=1 的值赋给了 b, 然后再进行改变.
- System.out.println("a:"+a); //a:2
- System.out.println("b:"+b); //b:1
自减运算符:- -
例如: ++a; 先执行 a = a + 1 ; 再使用 a 值.
- int a = 1;
- int b = 2;
- b = --a;
- System.out.println("a:"+a);
- System.out.println("b:"+b);
a++ : 在变量值被使用之后才增加的值
++a : 在变量值在被使用之前增加它的值
- - 操作符的工作原理与此相同, 只是它所执行的是减值操作而非增值操作.
赋值运算符
赋值运算符是指为变量或常量指定数值的符号. 如可以使用 "=" 将右边的表达式结果赋给左边的操作数.
Java 支持的常用赋值运算符, 如下表所示:
比较运算符
比较运算符用于判断两个数据的大小, 例如: 大于, 等于, 不等于. 比较的结果是一个布尔值( true 或 false ).
Java 中常用的比较运算符如下表所示:
注意事项:
1, > , <,>= , <= 只支持左右两边操作数是数值类型
2, == , != 两边的操作数既可以是数值类型, 也可以是引用类型
逻辑运算符
主要用于进行逻辑运算, 连接两个 Boolean 值, 代表两个条件.
Java 中常用的逻辑运算符如下表所示:
我们可以从 "投票选举" 的角度理解逻辑运算符:
1, 与: 要求所有人都投票同意, 才能通过某议题
2, 或: 只要求一个人投票同意就可以通过某议题
3, 非: 某人原本投票同意, 通过非运算符, 可以使其投票无效
4, 异或: 有且只能有一个人投票同意, 才可以通过某议题
当使用逻辑运算符时, 我们会遇到一种很有趣的 "短路" 现象 >> 如果根据左边已经可以判断得到最终结果, 那么右边的代码将不再执行, 从而节省一定的性能.
譬如:( 1> 2 ) && ( 1 <3 ) 中, 如果能确定左边 1> 2 运行结果为 false , 则系统就认为已经没有必要执行右侧的 1 <3 啦.
条件运算符
条件运算符 ( ? : ) 也称为 "三元运算符".
一元运算符: 只需要一个数据就可以进行操作的运算符. 例如: 取反!, 自增 ++, 自减 --
二元运算符: 需要两个数据才可以进行操作的运算符. 例如: 加法 +, 赋值 =
三元运算符: 需要三个数据才可以进行操作的运算符.
语法形式: 布尔表达式 ? 表达式 1 : 表达式 2
运算过程: 如果布尔表达式的值为 true , 则返回 表达式 1 的值, 否则返回 表达式 2 的值
例如 :
因为, 表达式 8>5 的值为 true , 所以, 返回: 8 大于 5
方法 ♦ ♦
所谓方法, 就是用来解决一类问题的代码的有序组合, 是一个功能模块.
一般情况下, 定义一个方法的语法是:
访问修饰符 返回值类型 方法名(参数列表){
方法体
}
其中:
1, 访问修饰符: 方法允许被访问的权限范围, 可以是 public,protected,private 甚至可以省略 , 其中 public 表示该方法可以被其他任何代码调用
2, 返回值类型: 方法返回值的类型, 如果方法不返回任何值, 则返回值类型指定为 void; 如果方法具有返回值, 则需要指定返回值的类型, 并且在方法体中使用 return 语句返回值
3, 方法名: 定义的方法的名字, 必须使用合法的标识符
4, 参数列表: 传递给方法的参数列表, 参数可以有多个, 多个参数间以逗号隔开, 每个参数由参数类型和参数名组成, 以空格隔开
根据方法是否带参, 是否带返回值, 可将方法分为四类:
无参无返回值方法
如果方法不包含参数, 且没有返回值, 我们称为无参无返回值的方法.
方法的使用分两步:
第一步, 定义方法
例如: 下面代码定义了一个方法名为 show , 没有参数, 且没有返回值的方法, 执行的操作为输出 "welcome to imooc."
注意 :
1, 方法体放在一对大括号中, 实现特定的操作
2, 方法名主要在调用这个方法时使用, 需要注意命名的规范, 一般采用第一个单词首字母小写, 其它单词首字母大写的形式
第二步, 调用方法
当需要调用方法执行某个操作时, 可以先创建类的对象, 然后通过 对象名. 方法名(); 来实现
例如: 在下面的代码中, 我们创建了一个名为 hello 的对象, 然后通过调用该对象的 show( ) 方法输出信息
运行结果为: welcome to imooc.
无参带返回值方法
如果方法不包含参数, 但有返回值, 我们称为无参带返回值的方法.
例如: 下面的代码, 定义了一个方法名为 calSum , 无参数, 但返回值为 int 类型的方法, 执行的操作为计算两数之和, 并返回结果
在 calSum( ) 方法中, 返回值类型为 int 类型, 因此在方法体中必须使用 return 返回一个整数值
调用带返回值的方法时需要注意, 由于方法执行后会返回一个结果, 因此在调用带返回值方法时一般都会接收其返回值并进行处理. 如下: 第 6 行
运行结果为: 两数之和为: 17
不容忽视的 "小陷阱":
1, 如果方法的返回类型为 void , 则方法中不能使用 return 返回值!
2, 方法的返回值最多只能有一个, 不能返回多个值
3, 方法返回值的类型必须兼容, 例如, 如果返回值类型为 int , 则不能返回 String 型值
带参无返回值方法
有时方法的执行需要依赖于某些条件, 换句话说, 要想通过方法完成特定的功能, 需要为其提供额外的信息才行.
例如, 现实生活中电饭锅可以实现 "煮饭" 的功能, 但前提是我们必须提供食材, 如果我们什么都不提供, 那就真是的 "巧妇难为无米之炊" 了.
我们可以通过在方法中加入参数列表接收外部传入的数据信息, 参数可以是任意的基本类型数据或引用类型数据.
我们先来看一个带参数, 但没有返回值的方法:
上面的代码定义了一个 show 方法, 带有一个参数 name , 实现输出欢迎消息.
调用带参方法与调用无参方法的语法类似, 但在调用时必须传入实际的参数值
例如:
运行结果为: 欢迎您, 爱慕课!
很多时候, 我们把定义方法时的参数称为形参, 目的是用来定义方法 需要传入参数的个数和类型; 把调用方法时的参数称为实参, 是传递给方法真正被处理的值.
一定不可忽视的问题:
1, 调用带参方法时, 必须保证实参的数量, 类型, 顺序与形参一一对应
2, 调用方法时, 实参不需要指定数据类型, 如
3, 方法的参数可以是基本数据类型, 如 int,double 等, 也可以是引用数据类型, 如 String, 数组等
第 10 行, Array.toString()方法将数组转换为字符串输出
4, 当方法参数有多个时, 多个参数间以逗号分隔
带参带返回值方法
如果方法既包含参数, 又带有返回值, 我们称为带参带返回值的方法.
例如:
下面的代码, 定义了一个 show 方法, 带有一个参数 name , 方法执行后返回一个 String 类型的结果
调用带参带返回值的方法:
运行结果为: 欢迎您, 爱慕课!
来源: https://www.cnblogs.com/xiaozhongfeixiang/p/11502971.html