基本语法
注释的作用
-
注释是对代码的解释和说明,其目的是让程序员能够更加快速的理解代码。它是编写程序时,写程序的人给一个语句、程序段等的解释或提示,能提高程序代码的可读性。我认为添加注释,是为了程序更容易理解与维护,特别是维护,更是对自己代码负责的一种体现。 注释在编译的时候不会生成到 class 字节码文件当中,它只在 java 源文件中保留。
注释的三种方式
-
第一种:单行注释,语法格式如下:
// 单行注释,两个正斜杠后面的内容被注释
-
第二种:多行注释,语法格式如下:
/* * 这里的注释信息为多行注释: * 第 1 行注释信息 * 第 2 行注释信息 */
-
第三种:javadoc 注释,语法格式如下:
/** * 这里的信息是 javadoc 注释 * @author 作者名字 * @version 版本号 * @since 自从哪个版本号开始就存在了 */
注意:对于 javadoc 注释来说,这里的注释会被 JDK bin 目录下的 javadoc.exe 命令解析并生成帮助文档(生成帮助文档后期做项目的时候大家会接触到的)。
注释应该怎么写
-
编写注释是程序员最基本的素质,养成编写注释的好习惯,要有编写注释的意识。当然,写注释也是有技巧的,不是所有位置都写,不是把写的代码原版翻译过来,老程序员往往在写注释的时候,不多不少,能够做到恰到好处,几句话就可以描述清楚程序的核心功能。
-
通常要在类和接口上写注释,这一部分注释是必须的。在这里,我们需要使用 javadoc 注释,需要标明:创建者,创建时间,版本,以及该类的作用。在方法中,我们需要对入参,出参,以及返回值,均要标明。对常量,我们需要使用多行注释,进行标明该常量的用途。在关键算法上,添加注释并且按照顺序依次标明,写明白该方法为什么这么做。
-
记住:注释的作用不在于表示代码的含义,而在于表示代码的功能。希望在以后的课程当中通过慢慢的培养,能够写一手漂亮的注释,当然,目前大家只需要掌握注释有哪几种,分别写到什么符号里就行了。
为 HelloWorld 提供注释
/** * 我的第一个 Java 程序问世了 * @author 南阳道人 * @version 1.0 * @since 1.0 */ public class HelloWorld { /** * 这是程序的入口 * @param args 参数 */ public static void main(String[] args) { // 向控制台输出一段话 System.out.println("Hello,World!"); } }
public class 和 class 的区别
-
定义 public class 的类,只能定义一个,并且要求此类名必 须和 java 源文件名保持一致。
-
一个 java 源文件可以定义多个 class。
-
在实际的开发中,虽然一个 java 源文件可以定义多个 class,实际上这是不规范的, 比较规范的写法是一个 java 源文件中只定义一个 class。
标识符都可以标识什么
-
在 java 源程序当中,标识符可以用来标识:
-
类名, 例如:Student 学生类、User 用户类、Product 商品类、Order 订单类等。
-
接口名,例如:Runable 可运行的、Comparable 可比较的等。
-
变量名,例如:name 名字、age 年龄、birth 生日、length 长度等。
-
方法名,例如:login 登录、logout 登出、eat 吃、drink 喝等。
-
常量名,例如:LOGIN_SUCCESS、ACCESS_TOKEN 等。
标识符命名规则
-
标识符只能由数字、字母、下划线“_”、美元符号“$”组成,不能含有其它符号。
-
标识符不能以数字开始。
-
java 关键字和保留字不能作为标识符。
-
标识符严格区分大小写。
-
标识符理论上没有长度限制。
标识符命名规范
-
见名知意:看到这个单词就知道它表示什么,增强程序的可读性,例如:Student 则表示学生类型,User 则表示用户类型。
-
遵循驼峰命名方式:可以很好的分隔单词,每个单词之间会划清界限,同样也是增强程序的可读性,例如:getName 则表示获取名字。
-
类名、接口名首字母大写,后面每个单词首字母大写,这是遵守驼峰命名方式的。
-
变量名、方法名首字母小写,后面每个单词首字母大写,这也是遵守驼峰命名方式的。
-
常量名全部大写,单词和单词之间使用“_”衔接,为了表示清楚含义,不要怕单词长,例如:INT_MAX_VALUE 则表示 int 类型最大值。
关键字
关键字 | 含义 |
---|---|
byte | 字节类型 |
short | 短整形 |
int | 整形 |
long | 长整形 |
float | 浮点型(单精度) |
double | 浮点型(双精度) |
boolean | 布尔型 |
char | 字符型 |
abstract | 表明类或者成员方法具有抽象属性 |
assert | 断言,用来进行程序调试 |
break | 提前跳出一个块 |
case | 用在switch语句中,表示一个分支 |
catch | 用在异常处理中,用来捕捉异常 |
class | 声明一个类 |
const | 保留关键字,没有具体意义 |
continue | 回到一个块的开始 |
default | 表示默认 |
do | 用在do-while循环结构中 |
else | 用在条件语句中 |
enum | 枚举 |
extends | 继承 |
final | 最终的 |
finally | 用在异常中,用来声明一个肯定会被执行的语句 |
for | 一种循环结构 |
if | 条件语句 |
implements | 表面一个类实现了给定的接口 |
import | 导入的包 |
instanceof | 用来测试一个对象是否是指定类型的实例对象 |
interface | 接口 |
native | 用来声明一个方法是由计算机相关的语言实现的 |
new | 用来创建新的实例对象 |
package | 包 |
private | 访问控制方式:私有的 |
protected | 访问控制方式:受保护的 |
public | 访问控制方式:公共的 |
return | 从成员方法中返回数据 |
static | 静态的 |
strictfp | 用来声明FP_strict表达式算数规范 |
super | 表明当前对象的父类型的引用或者构造方法 |
switch | 分支语句结构 |
synchronized | 表明一段代码需要同步执行 |
this | 当前 |
throw | 抛出一个异常 |
throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
rty | 尝试一个可以抛出异常的程序块 |
变量
-
分类
-
成员变量
-
局部变量
-
静态成员变量(静态变量)
-
public class Test { int x = 20; // 实例变量(成员变量) static int y = 200; // 静态变量 public static void sum(int a, int b){ // 局部变量 a 和 b int firstNum = 100; // 局部变量 } }
-
-
赋值
-
数据类型 变量名 = 值;
-
基本数据类型
-
通过上表我们可以看出八种基本数据类型中 byte 占用 1 个字节,short 占用 2 个字节,int 占用 4 个字节,long 占用 8 个字节,float 占用 4 个字节,double 占用 8 个字节,boolean 占用 1 个字节,char 占用 2 个字节。
-
那么字节是什么呢,这个大家要知道 1 个字节是 8 个比特位,1 个比特位是什么,1 个比特位就是一个 1 或 0,或者说 1 个比特位就是 一个二进制位。也就是说 1 个字节是由 8 个 1 和 0 组成的二进制数字串。
引用数据类型
-
String(字符串),枚举,自定义引用......
基本数据类型转换
-
基本数据类型之间是存在固定的转换规则的,现总结出以下 6 条规则,无论是哪个程序, 将这 6 个规则套用进去,问题迎刃而解:
-
八种基本数据类型中,除 boolean 类型不能转换,剩下七种类型之间都可以进行转换;
-
如果整数型字面量没有超出 byte,short,char 的取值范围,可以直接将其赋值给 byte,short,char 类型的变量;
-
小容量向大容量转换称为自动类型转换,容量从小到大的排序为:byte < short(char) < int < long < float < double,其中 short 和 char 都占用两个字节,但是 char 可以表示更大 的正整数;
-
大容量转换成小容量,称为强制类型转换,编写时必须添加“强制类型转换符”,但 运行时可能出现精度损失,谨慎使用;
-
byte,short,char 类型混合运算时,先各自转换成 int 类型再做运算;
-
多种数据类型混合运算,各自先转换成容量最大的那一种再做运算;
运算符概述
-
运算符是指对操作数的运算方式。组成表达式的 Java 操作符有很多种(什么是操作数和操作符,例如 1+2,其中 1 和 2 都是操作数,+是操作符,操作符和操作数联合起来构成表达式)。 运算符按照其要求的操作数数目来分,可以有单目运算符(1 个操作数)、双目运算符(2 个 操作数)和三目运算符(3 个操作数)。运算符按其功能来分,有算术运算符、赋值运算符、 关系运算符、逻辑运算符、位运算符、条件运算符、字符串连接运算符和其他运算符。常见的 运算符如下所示:
-
算术运算符
-
算术运算符包括:
-
+(两个数字求和)
-
-(两个数字相减)
-
*(两个数字乘积)
-
/(两 个数字相除)
-
%(两个数字取模或者求余)
-
++(单目运算符,对数字自加 1)
-
--(单目 运算符,对数字自减 1)
-
关系运算符
-
关系运算符主要是完成数据和数据之间的比较,比如:5>3,结果是 true(真),5>10, 结果是 false(假)。
-
关系运算符都有哪些:>、>=、<、<=、==、!=。
逻辑运算符
-
逻辑运算符主要包括逻辑与(&),逻辑或(|),逻辑异或(^),短路与(&&),短路 或(||)。所有逻辑运算符的特点是操作数都是布尔类型,并且最终的运算结果也是布尔类型。 逻辑运算符的基本运算规则如下表所示:
-
赋值运算符
-
赋值运算符: =、+=、-=、=、/=、%=。
-
赋值类的运算符包括基本赋值运算符(=)和扩展的赋值运算 符(+=、-=、*=、/=、%=)。
条件运算符
-
条件运算符属于三目运算符。
-
它的语法结构是:布尔表达式?表达式 1:表达式 2。
-
运行原理:先判断布尔表达式的结果是 true 还是 false,如果是 true,则选择表达式 1 的结果作为整个表达式的结果,反之则选择表达式 2 的结果作为整个表达式的结果。
字符串连接运算符
-
在 java 语言中所有的字符串都使用半角双引号括起来的,字符串属于引用数据类型,不属于基本数据类型的范畴。
-
怎么定义一个字符串的变量呢?例如:String name = “jack”;
-
在 java 编程中对字符串的操作是非常频繁的,例如字符串的连接操作,此时就需要使用“+”字符串连接运算符了。 实际上“+”运算符在 java 语言中有两个作用,作用一是对数字进行求和运算,作用二就是字符串连接运算,那么它在什么时候是进行求和,什么时候又进行字符串连接呢?大家可以 这样进行区分,当“+”运算的时候,两边的操作数都是数字的话,一定会进行求和运算,只 要其中有一个操作数是字符串类型,那么一定会进行字符串拼接运算,字符串拼接之后的结果还是字符串类型。需要注意的是,当一个表达式当中有多个“+”,并且在没有小括号的前提下,遵循自左向右的顺序依次执行。
-
public class Test{ public static void main(String[] args){ // 定义一个字符串 String s = "张三"; // 定义一个整形 int i = 100; // 进行拼接 String val = s+i; System.out.println(val); } } 结果:张三100
控制语句框架
控制语句概述
-
控制语句即用来实现对程序流程的选择、循环、转向 和返回等进行控制。
-
Java 语言中共有 8 种控制语句,可以分为“选择语句”,“循环语句”, “转向语句”,“返回语句”四类。
-
那么,这 8 种控制语句分别是什么呢?
-
if 语句、switch 语 句。
-
for 循环、while 循环、do..while 循环。
-
break 语句、continue 语句、return 语句。
-
其中 if 和 switch 语句属于选择语句,for、while、do..while 语句属于循环语句,break 和 continue 语句属 于转向语句,return 属于返回语句。
-
if分支语句
-
if 语句的编写方式归纳为以下四种
-
switch分支语句
-
switch 语句和 if 语句一样,都属于选择语句(分支语句)
-
for循环语句
-
对以上 for 循环语法结构进行说明:初始化表达式最先执行,并且在整个循环当中初始化表达式只执行一次,布尔表达式结果是 true 或者 false,true 表示循环可以继续执行,false 表 示循环结束,循环体当中的代码就是需要反复执行的代码,更新表达式一般是用来更新某个变量的值,更新操作之后可能布尔表达式的结果就不再是 true 了。
-
使用 for 循环实现 1~100 所有数字的求和:
public class Test(){ public static void main(String[] args){ int sum = 0; for (int i=1;i<=100;i++){ sum+=i; } System.out.println("sum = " + sum); } } 结果:sum = 5050
while循环语句
-
循环语句除了 for 循环之外还有 while 和 do..while,接下来我们先来看一下 while 循环,首先学习 while 循环的语法结构。
-
通过上图可以看出 while 循环的语法结构非常简单,它的执行顺序以及原理是这样的,先 判断布尔表达式的结果,如果是 true,则执行循环体,循环体结束之后,再次判断布尔表达式 的结果,如果是 true,再执行循环体,循环体结束之后,再判断布尔表达式的结果,直到结果 为 false 的时候,while 循环结束。如果起初第一次判断布尔表达式结果的时候就是 false,那么 while 循环体执行次数就为 0 了。
-
do…while循环语句
-
do..while 循环是 while 循环的变形,它们的区别在于 do..while 循环可以保证循环体执行次 数至少为 1 次,也就是说 do..while 循环的循环体执行次数是 1~N 次,而 while 循环的循环体执行次数为 0~N 次。
-
为什么 do..while 循环可以保证至少执行一次呢,它和 while 循环的区别在哪里呢?
-
实际上是因为在开始执行 while 循环的时候,最先执行的是条件判断,只有条件为 true 的时候才会执行循环体,既然是这样,那么条件就有可能false,这个时候就会导致循环体执行次数为 0 次。而 do..while 循环最先执行的不是条件判断,它会先执行循 环体,然后再进行条件判断,这样就可以保证循环体至少执行一次。
-
-