1.注释
程序中的注释,用来说明某段代码的作用,其增强了代码的
可读性
, 让程序员快速的理解代码的含义和系统设计思路,同时便于系统交付后对代码日常维护以及后续迭代升级。
Java
中的注释,分为三种:
单行注释
多行注释
文档注释(后续课程讲解)
1.单行注释
单行注释是最常用的注释方式,其注释内容从
"//"
开始到本行末尾。
例如:
//类名:Test01
//作用:单行注释测试类
public class Test01 {
//main方法是程序的执行入口,且写法是固定的
public static void main(String[] args){
//向控制台中输出指定字符串内容
System.out.println("hello world");
//下面一句代码被注释掉了,不会被执行
//System.out.println("hello Java");
} //main方法结束
}//Test01类定义结束
2.多行注释
多行注释以
"/*"
开始,到
"*/"
结束,其可以注释一行,也可以注释多行
例如:
/*
类名:Test02
作用:多行注释测试类
*/
public class Test02 {
/* main方法,固定写法,程序入口 */
public static void main(String[] args){
/* 向控制台中输出 */
System.out.println("hello world");
/* 下面多行代码被会被注释掉了,不会执行 */
/*
int a = 1;
System.out.println(a);
*/
} /* main方法结束 */
} /* Test02类定义结束 */
注意
:
多行注释不能嵌套,否则会报错
下面的写法是
错误的
,编译会报错。
/*
/*多行注释里面又嵌套了多行注释,编译报错*/
*/
public static void test(){
//...
}
3.文档注释
格式:
/**
文档注释内容
*/
后续再给大家补充讲解!
4.困惑解答
思考:
Java
源代码中如果添加了注释,会不会导致字节码文件会臃肿变
大?
回答:不会的。因为
源代码文件:
Xxxx.Java
通过编译生成
字节码文件:
Xxxx.class
的过程中,编译器会忽略掉源码中的注释部分。
5.小结
注释是一个程序员必须要具备的编程习惯,初学者写程序可以养成习惯:
先把实现思路用注释写下来,然后再补全代码。
2.关键字
关键字概述
:
被
Java
语言赋予特定含义的单词
关键字特点
:
组成关键字的字母全部小写,常用的代码编辑器对关键字都有高亮显示
常见关键字
:
public static void class
Keywords in Java
:
注意:
- const 和 goto 是Java中的保留字(暂时没用,后续可扩展使用)
- true 和 false 不是关键字,是boolean类型的字面值,但是也不能直接使用true和false来做标识符
3.标识符合法标示符
非法标示符
在Java中,给类、方法、变量起的名字,就是标识符,其可以用来标识 这个类、方法、变量
命名规则
:
- 标示符可以由字母、数字、下划线_ 、美元符号$组成
- 标示符开头不能是数字
- 标识符中的字符大小写敏感
- 标识符的长度没有限制
- 标示符不能使用Java中的关键字或保留字
案例
:
命名约定:
采用驼峰命名法,具体如下,
- 类和接口 :不管是1个还是多个单词,每个单词的首字母都大写(大驼峰) public class Account{ } public interface AccountBase{ }
- 方法和变量 :首字母小写,第二个单词开始每个单词的首字母大写 (小驼峰) public void getStudentName(){ } int personNum = 1;
- 常量 :全部字母大写,如果是多个单词,单词与单词间使用下划线分隔 public static final int MAX_NUM = 10;
- 尽量使用有意义的名字,尽量做到见名知意。 int numOfStudnet = 10; String userName = "tom";
4.常量
概念:
在程序运行过程中,其值不可以发生改变的量,称为常量。
分类:
常量可以分为
2
大类:
字面值常量
和
自定义常量
(
面向对象部分讲解
)
。
字面值常量:
- 字符串常量 用双引号括起来的多个字符(可以包含0个、一个或多个) 例如""、"a"、"abc"、"中国"等
- 整数常量 整数 例如:-10、0、88等
- 小数常量 小数 例如:-5.5、1.0、88.88等
- 字符常量 用单引号括起来的一个字符 例如:'a'、'5'、'B'、'中'等
- 布尔常量 布尔值,表示真假,只有两个值true和false
- 空常量 一个特殊的值,空值,值为null
注意
:
- 除空常量外,其他常量均可使用输出语句直接输出
- 大家可以好好揣摩下 字面值常量 这个词,这个字面值是固定、不可改变的,即常量值
案例
:
public class Test04 {
//输出各种常量值
public static void main(String[] args) {
System.out.println(10); // 输出整数常量
System.out.println(5.5); // 输出小数常量
System.out.println('a'); // 输出字符常量
System.out.println(true); // 输出boolean常量值
true
System.out.println("欢迎来到杰普软件"); // 输出字符串
常量
}
}
5.变量
变量的定义有
2
种格式,分别如下:
格式
1
数据类型 变量名
;
变量名
=
数据值
;
格式
2
数据类型 变量名
=
数据值
;
(推荐用法)
变量一定是要求先声明、再赋值、再使用
示例:
public class Test04 {
public static void main(String[] args) {
// 第一种定义格式
int a; //变量声明
a = 10; //变量赋值
System.out.println(a); //变量使用
// 第二种定义格式:声明变量的同时就进行赋值
int b = 20;
System.out.println(b);
}
}
理解
:
数据类型:
Java
是强类型语言
,每个常量或变量都有对应的数据类型 (后面章节专门介绍)
变量名:就是一个标识符,用来标识内存上的一块空间
数据值:即变量值,该值会存储到变量名标识的那块空间中
内存基础知识
:
理解变量内存结构之前,我们需要补充一点内存区域的基础知识,大家
了
解即可
,详见下表:
程序执行流程
:
1.
执行
java
命令,系统会把编译生成的
class
文件内容装入内存中的方法区
2.
接下来找到里面的
main
方法(程序入口)
3.
再在方法栈空间申请一块区域(存储方法中变量)来保证
main
方法的执行
4.
最后顺序执行
main
方法中的代码
5.
遇到
main
方法的
"}"
或
return
语句,方法执行结束,
main
方法函数帧内存释放
变量内存
:
注意事项
:
1.
变量名是标识符中的一种,用来标识一块内存区域
2.
变量定义后没有赋初值,不能直接使用,编译报错
3.
变量值的类型应该跟变量的类型一致(先这么记,后续会补充)
6.数据类型
1 概述
Java
是强类型语言,对于每一种数据都定义了明确的数据类型,不同类型
变量在内存中对应的空间大小不同。
分类
:
Java
数据类型可以分为
2
大类:
基本数据类型
和
引用数据类型
(面向对象部分讲解)。
基本数据类型
:
可以分为
4
大类
8
种,具体如下:
○整数型 byte short int long
○浮点型 float double
○字符型 char
○布尔型 boolean 值只有
true
和
false
思考:为什么数据类型有这么多种呢?
○不同据类型占用的内存空间是不同的
○不同的内存空间,所存储的数据的大小范围是不一样的
说明:
e+38
表示是乘以
10
的
38
次方,同样,
e-45
表示乘以
10
的负
45
次方。
小结
:
定义变量时,我们应该根据变量可能的取值范围,来选择合适的数据类型。
2 字节
比特位 :
bit
,是计算机存储信息的最小单位,存放一位二进制数,即
0
或 1。
字节:
byte
,是计算机
存储容量的最小单位
,通常用大写字母
“B”
表示,
1byte == 8bits
。
大家可看下自己硬盘中存储的文件,就是以字节为单位存储的:
计算器存储容量的单位,常见的还有
KB
、
M
、
G
、
T
,换算过程如下:
1KB (Kilobyte
千字节
) = 1024B
,其中
1024=2^10 ( 2
的
10
次方
)
1MB (Megabyte
兆字节 简称
“
兆
”) = 1024KB
1GB (Gigabyte
吉字节 又称
“
千兆
”) = 1024MB
1TB (Trillionbyte
万亿字节 太字节
) = 1024GB
3 进制
概念
:
进制就是进位制,是人们规定的一种进位方法,二进制逢
2
进
1
,八进制是 逢8
进
1
,十进制逢
10
进
1
,十六进制逢
16
进
1
。
不同进制形式:
- 二进制 0b|B开头,由0和1组成
- 八进制 0开头,0、1...6、7组成
- 十进制 常见整数,0、1...8、9组成
- 十六进制 0x或0X开头,0、1...8、9、a、b、c、d、e、f组成,大小写不区分
public class Test06 { public static void main(String[] args) { byte b1 = 0b01100001; //二进制 byte b2 = 97; //十进制 byte b3 = 0141; //八进制 byte b4 = 0x61; //十六进制 //打印出来结果全是97,为什么? System.out.println(b1); System.out.println(b2); System.out.println(b3); System.out.println(b4); }
4 进制转换
1. 任意进制转换为10进制
结果值 = 系数*基数的权次幂相加
系数:每一位上的数据
基数:
X
进制,基数就是
X
权:最右边那位对应
0
,每左移一位加
1
案例
:
变量内存理解
:
2. 十进制转换为其他进制
除积倒取余
,具体计算过程如下:
16
进制也是一样的换算方式。
3.十进制到二进制的快速转换
对于不太大的正整数,我们可以采用一种快捷的方式来获取其
2
进制形
式,具体可参考下图:
上图运算步骤解析
:
- 拆解正整数,将其分解为2的指数倍相加
- 找出2的指数倍 对应的 二进制1
- 根据变量类型确定占用的字节数及比特位,组合得到最终的二进制形式
4. 二进制转换为8、16进制
2
进制转化为
8
进制
从最低位开始,每
3
位分一组,不足
3
位的话高位补
0
将得到的数字组合到一起,最前面以
0
开头
案例:
2
进制转换为
16
进制
从最低位开始,每
4
位分一组,不足
4
位的话高位补
0
将得到的数字组合到一起,最前面以
0x
开头
案例:
5 原反补码
学习这个知识点之前,我们先来看一个题目。
题目:
写出
10
的二进制形式
答案:
0b 0 0(23
个
) 0000 1010
解读:
10
对应的类型为
int
,在计算机底层占
4
字节,需要
32
个比特位表示
其中最高位为符号位,
0
表示正数,
1
表示负数
剩下的
31
位,其中
23
位都为
0
,低
8
位为
0000 1010 = 8 + 2 = 10
连到一起,结果为正整数
10
思考:
如何表示
-10
的二进制形式呢?
如果要表示负整数的二进制形式,则必须学习原码、反码、补码。
计算机运算时都是以补码方式进行
原码:
就是二进制定点表示法,即最高位为符号位,
“0”
表示正,
“1”
表示负,其
余位表示数值的大小
10
的原码:
0
0
(
23
)
0000 1010
-
10
的原码:
1
0
(
23
)
0000 1010
反码:
正数的反码与其原码相同
负数的反码,在原码的基础上,保留符号位,其他位逐位取反
10
的反码: 跟
10
的原码相同
0 0
(
23
)
0000 1010
-
10
的反码: 拿到
-
10
的原码,
1 0
(
23
)
0000 1010
保留符号位其他位取反
1 1
(
23
)
1111 0101
补码:
正数的补码与其原码相同
负数的补码是在其反码的末位加
1
10
的补码: 跟
10
的原码相同
0 0
(
23
)
0000 1010
-
10
的补码: 拿到
-
10
的反码,
1 1
(
23
)
1111 0101
在反码基础上加
1
1 1
(
23
)
1111 0110
验证:
小结
:
大家理解掌握了上述推导过程后,记下几个整形的取值范围即可:
7.类型转换
1 隐式类型转换
赋值过程中,小数据类型值或变量可以直接赋值给大类型变量,类型会
自动进行转换
- byte、short、char类型的数据在进行算术运算时,会先自动提升为int, 然后再进行运算
- 其他类型相互运算时,表示范围小的会自动提升为范围大的,然后再
2 显式类型转换
赋值过程中,大类型数据赋值给小类型变量,编译报错,此时必须通过强
制类型转换实现。
格式
:
数据类型 变量名
= (
目标数据类型
)(
数值或变量或表达式
)
;
8.控制台输入
Scanner类用来控制台获取输入,Scanner 类在 java.util中。
一般程序代码开始需要引入所有需要用到的包和类
使用Scanner如下所示:
import java.util.Scanner;
Scanner sc=new Scanner(System.in);
int age=sc.nextInt();