文章目录
0.前言
- 本Java笔记是对黑马程序员的Java笔记进行了重新的排版和整理,并对部分内容进行了优化,适用于学习过Java但需要复习加巩固基础的人群查阅,其中有不对或者不全之处,欢迎指正
1. 注释
1.1 注释格式
-
注释是对代码的解释和说明文字。
-
Java中的注释分为三种:
-
单行注释:
// 这是单行注释文字
-
多行注释:
/* 这是多行注释文字 这是多行注释文字 这是多行注释文字 */
- 注意: 多行注释不能嵌套使用。
-
文档注释(暂时用不到):注释内容可以被JDK提供的工具javadoc所解析,生成一套一网页文件形式体现的该程序的说明文档,一般写在类上面
- 解析格式:
javadoc -d 文件名 -xx -yy TestComment.java
- 解析格式:
-
1.2 使用的技巧
-
如果我们要对代码进行解释,那么就可以使用注释。
-
当注释的内容比较少,一行就写完了,可以用单行注释。
-
如果注释的内容比较多,需要写在多行,那么可以使用多行注释,但是多行注释里面不允许有多行注释嵌套。
注意事项:
-
注释的内容不会参与编译和运行的,仅仅是对代码的解释说明而已。
-
所以,不管在注释当中写什么内容,都不会影响代码运行的结果。
-
类、方法的注释,要以javadoc的方式来写。
-
非javadoc注释往往是给代码的维护者看的,着重告诉读者为什么这样写,如何修改,注意什么问题等。
2. 关键字
2.1 概念
-
概念: Java赋予了特定含义的英文单词。
- 当我们在代码中写了关键字之后,程序在运行的时候,就知道要做什么事情了。
-
注意: 关键字很多,不用刻意去记。
abstract | assert | boolean | break | byte |
---|---|---|---|---|
case | catch | char | class | const |
continue | default | do | double | else |
enum | extends | final | finally | float |
for | goto | if | implements | import |
instanceof | int | interface | long | native |
new | package | private | protected | public |
return | strictfp | short | static | super |
switch | synchronized | this | throw | throws |
transient | try | void | volatile | while |
- 分类:
- 用于定义数据类型的关键字:class、interface、enum、byte、short、int、long、float、double、 char、boolean、void
- 用于定义数据类型值的关键字:true、false、null
- 用于定义流程控制的关键字:if、else、switch、case、default、while、do、for、break、continue、return
- 用于定义访问控制权限修饰符的关键字:private、protected、public
- 用于定义类、函数,变量修饰符的关键字:abstract、final、static、synchronized
- 用于定义类与类之间的关键字:extends、implements
- 用于定义建立实例以及引用实例,判断实例的关键字:new、this、super、instanceof
- 用于处理异常的关键字:try、catch、finally、throw、throws
- 用于包的关键字:package、import
- 其它修饰符关键字:native、strictfp、transient、volatile、assert
2.2 class关键字
-
class:表示定义一个类 或 创建一个类。
- 类是Java项目最基本的组成单元,一个完整的Java项目有可能会有成千上万个类来组成的。
-
细节:
- 后面跟随的就是这个类的名字,简称:类名。
- 在类名后面会有一对大括号,表示这个类的内容。
-
代码演示:
public class HelloWorld{
}
/*
解释:
- class表示定义类。
- 类名:HelloWorld
- HelloWorld后面的大括号表示这个类的范围。
*/
2.3 保留字
- Java 保留字: 现有 Java 版本尚未使用,但以后版本可能会作为关键字使用,所以自己命名标识符时要避免使用
- 保留字: byValue、cast、future、 generic、 inner、 operator、 outer、 rest、 var 、 goto 、const
3. 字面量
3.1 字面量种类
- 作用: 告诉程序员,数据在程序中的书写格式。
字面量类型 | 说明 | 程序中的写法 |
---|---|---|
整数 | 不带小数的数字 | 666,-88 |
小数 | 带小数的数字 | 13.14,-5.21 |
字符 | 必须使用单引号,有且仅能一个字符 | ‘A’,‘0’, ‘我’ |
字符串 | 必须使用双引号,内容可有可无 | “HelloWorld”,“黑马程序员” |
布尔值 | 布尔值,表示真假,只有两个值:true,false | true 、false |
空值 | 一个特殊的值,空值,不能直接打印,会报错 | 值是:null |
-
代码演示:
public class Demo { 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("欢迎来到黑马程序员"); // 输出字符串 }
-
区分技巧:
- 不带小数点的数字都是整数类型的字面量。
- 只要带了小数点,那么就是小数类型的字面量。
- 只要用双引号引起来的,不管里面的内容是什么,不管里面有没有内容,都是字符串类型的字面量。
- 字符类型的字面量必须用单引号引起来,不管内容是什么,但是个数有且只能有一个。
- 字符类型的字面量只有两个值,true、false。
- 空类型的字面量只有一个值,null。
\t
制表符:在打印的时候,把前面字符串的长度补齐到8,或者8的整数倍。最少补一个空格,最多补8个空格。
3.2 常用转义字符
转移字符 | 作用 |
---|---|
\t | 一个制表位,实现对其功能 |
\n | 换行符 |
\\ | 一个\ |
\" | 一个“ |
\' | 一个’ |
\r | 一个回车,System.out.println(“韩顺平教育\r北京”); |
代码演示:
//演示转义字符的使用
public class ChangeChar{
//编写一个main方法
public static void main(String[] args){
//\t :一个制表位,实现对齐的功能
System.out.println("北京\t 天津\t 上海");
// \n :换行符
System.out.println("jack\nsmith\nmary");
// \\ :一个\ \\
System.out.println("C:\\Windows\\System32\\cmd.exe");
// \" :一个"
System.out.println("老韩说:\"要好好学习 java,有前途\"");
// \' :一个'
System.out.println("老韩说:\'要好好学习 java,有前途\'");
// \r :一个回车
System.out.println("韩顺平教育\r北京");
// 解读
// 1. 输出 韩顺平教育
// 2. \r 表示回车
System.out.println("韩顺平教育\r北京"); // 北京平教育
System.out.println("韩顺平教育\n武汉 \r 北京");
}
}
4.变量
4.1 变量定义
-
文字定义: 变量就在程序中临时存储数据的容器。但是这个容器中只能存一个值。变量是程序的基本组成单位。
-
变量初始化: 数据类型 变量名 = 数据值;
-
格式详解:
-
数据类型: 限定了变量当中能存储什么类型的数据。
- 如果要存10,那么数据类型就需要写整数类型。
- 如果要存10.0,那么数据类型就需要写小数类型。
-
变量名: 其实就是这个容器的名字,当以后想要使用变量里面的数据时,直接使用变量名就可以了。
-
数据值: 真正存储在容器中的数据。
-
分号: 表示语句的结束,就跟以前写作文时候的句号是一样的。
-
-
4.2 数据类型
1.分类
- 基本数据类型
- 引用数据类型:类、接口、数组(面向对象的时候再深入学习)
2.基本数据类型(四类八种)
数据类型 | 关键字 | 内存占用(字节) | 取值范围 |
---|---|---|---|
整数(数值型) | byte | 1 | 记忆:负的2的7次方 ~ 2的7次方-1(-128~127) |
short | 2 | 负的2的15次方 ~ 2的15次方-1(-32768~32767) | |
int | 4 | 负的2的31次方 ~ 2的31次方-1 | |
long | 8 | 负的2的63次方 ~ 2的63次方-1 | |
浮点数(数值型) | float | 4 | 1.401298e-45 ~ 3.402823e+38 |
double | 8 | 4.9000000e-324 ~ 1.797693e+308 | |
字符型 | char | 2 | 0~65535 |
布尔型 | boolean | 1 | true,false |
-
注意事项:
- 在java中整数默认是int类型,浮点数默认是double类型。
- byte类型的取值范围:-128 ~ 127
- int类型的大概取值范围:-21亿多 ~ 21亿多
- 整数类型和小数类型的取值范围大小关系:
double > float > long > int > short > byte
-
技巧:
-
最为常用的数据类型选择:
-
在定义变量的时候,要根据实际的情况来选择不同类型的变量。
- 比如:人的年龄,可以选择byte类型。
- 比如:地球的年龄,可以选择long类型。
-
如果整数类型中,不太确定范围,那么默认使用int类型。
-
如果小数类型中,不太确定范围,那么默认使用double类型。
-
如果要定义字符类型的变量,那么使用char
-
如果要定义布尔类型的变量,那么使用boolean
-
-
3.变量初始化细节
- 代码演示:
public class VariableDemo3{
public static void main(String[] args){
//1.定义byte类型的变量
//数据类型 变量名 = 数据值;
byte a = 10;
System.out.println(a);
//2.定义short类型的变量
short b = 20;
System.out.println(b);
//3.定义int类型的变量
int c = 30;
System.out.println(c);
//4.定义long类型的变量
long d = 123456789123456789L;
System.out.println(d);
//5.定义float类型的变量
float e = 10.1F;
System.out.println(e);
//6.定义double类型的变量
double f = 20.3;
System.out.println(f);
//7.定义char类型的变量
char g = 'a';
System.out.println(g);
//8.定义boolean类型的变量
boolean h = true;
System.out.println(h);
}
}
定义过程中的细节:
-
如果要定义一个long类型的变量,那么在数据值的后面需要加上L后缀。(大小写都可以,建议大写。)
-
如果要定义一个float类型的变量,那么在数据值的后面需要加上F后缀。(大小写都可以)
-
Java各数据类型有固定的范围和字段长度,不受具体操作系统的影响,以保证java程序的可移植性。
-
bit:计算机中的最小存储单位;byte:计算机中基本存储单元,两者转换公式:1byte = 8 bit。
-
浮点数:
-
浮点数在机器中存放形式:浮点数 = 符号位 + 指数位 + 尾数位,位数部分可能丢失,造成精度损失(小数都是近似值)
-
浮点型常量有两种表现形式:
- 十进制形式:5.12 5.12F .512(必须有小数点)
- 科学计数法形式:5.12E2 5.12e-2
-
不能直接对浮点数进行相等的判断
//浮点数使用陷阱: 2.7 和 8.1 / 3 比较 double num11 = 2.7; double num12 = 8.1 / 3; System.out.println(num11); System.out.println(num12); //得到一个重要的使用点: 当我们对运算结果是小数的进行相等判断是,要小心 //应该是以两个数的差值的绝对值,在某个精度范围类判断 if(num11 == num12){ System.out.println("num11 = num12 相等"); } //正确的写法 , ctrl + / 注释快捷键, 再次输入就取消注释 if(Math.abs(num11-num12) < 0.00001){ System.out.println("差值非常小,到达我的规定精度,认为相等..."); } System.out.println(Math.abs(num11 - num12)); //细节:如果是直接查询得的的小数或者直接赋值,是可以判断相等
-
-
字符类型:
-
字符常量是用单引号括起来的单个字符
- 代码演示:
char c1 = 'a'; char c2 = '中'; char c3 = '9';
-
Java中还允许使用转义字符来将其后的字符转变为特殊字符型常量
- 代码演示:
char c4 = '\n';//'\n'表示换行符
-
字符类型数据本质是一个整数,输出的是整数在unicode码中对应的字符,因此可以直接给char赋一个整数,同时还可以进行运算,相当于一个整数
-
使用过程中的注意事项
- 变量表示内存中的一个存储区域,不同类型的变量占用的空间大小不同。
- 变量名在同一作用域内不能重复
- 在一条语句中,可以定义多个变量。但是这种方式影响代码的阅读,所以了解一下即可。
- 变量在使用之前必须要赋值。
- 变量名只能存一个值,该容器的数据/值可以在同一类型范围内不断变化。
- 变量的作用域范围。
代码演示:
public class VariableDemo2{
public static void main(String[] args){
//1.变量名不允许重复
//int a = 10;
//int a = 20;
//System.out.println(a);
//2.一条语句可以定义多个变量
//了解。
//int a = 10, b = 20, c = 20,d = 20;
//System.out.println(a);//?
//System.out.println(b);//?
//3.变量在使用之前必须要赋值
int a = 30;
System.out.println(a);
}
}
4.3 计算机中的数据存储
在计算机中,任意数据都是以二进制的形式来存储的
JDK7的特性:
二进制:0,1 ,满 2 进 1。以 0b 或 0B 开头。
十进制:0-9 ,满 10 进 1。前面不加任何前缀
八进制:0-7 ,满 8 进 1。以数字 0 开头表示
十六进制:0-9 及 A(10)-F(15),满 16 进 1。以 0x 或 0X 开头表示。此处的 A-F 不区分大小写。
ASCII码表:美国信息交换码表,仅需一个字节表示,一共128个字符,一共字节实际可以表示256个字符,但是只用了128个,只占用了一个字节的后面7位,最前面的一位统一规定为0
GB2312编码:简体中文汉字编码国家标准
BIG5编码:台湾地区繁体中文标准字符集
GBK编码:微软字符码表,可以表示汉字,而且范围广,字母使用1个字节,汉字使用3个字节
Unicode:国际标准字符集,固定大小的编码,使用两个字节来表示字符,字母和汉字统一都是占用两个字节
UTF-8编码:大小可变的编码,字母使用1个字节,汉字使用3个字节
4.4 练习
练习1
-
需求:定义5个变量记录老师的信息并打印
-
代码演示:
public class VariableTest1{ public static void main(String[] args){ //1.定义字符串类型的变量记录老师的姓名 String name = "黑马谢广坤"; //2.定义整数类型的变量记录老师的年龄 int age = 18; //3.定义字符类型的变量记录老师的性别 char gender = '男'; //4.定义小数类型的变量记录老师的身高 double height = 180.1; //5.定义布尔类型的变量记录老师的婚姻状况 boolean flag = true; //输出5个变量的值 System.out.println(name); System.out.println(age); System.out.println(gender); System.out.println(height); System.out.println(flag); } }
练习2
-
需求:将(电影名称,主演,年份,评分)四个信息选择不同类型的变量,随后打印出来。
-
代码演示:
public class VariableTest2{ public static void main(String[] args){ //1.定义字符串变量记录电影的名称 String movie = "送初恋回家"; //2.定义三个变量记录主演的名字 String name1 = "刘鑫"; String name2 = "张雨提"; String name3 = "高媛"; //3. 定义整数类型的变量记录年龄的年份 int year = 2020; //4.定义小数类型的变量记录电影的评分 double score = 9.0; //打印变量的信息 System.out.println(movie); System.out.println(name1); System.out.println(name2); System.out.println(name3); System.out.println(year); System.out.println(score); } }
练习3
-
需求:选择其中一部手机,将(手机价格,手机品牌)两个信息选择不同类型的变量,随后打印出来。
-
代码演示:
public class VariableTest3{ public static void main(String[] args){ //1.定义小数类型的变量记录手机的价格 double price = 5299.0; //2.定义字符串类型的变量记录手机的品牌 String brand = "华为"; //输出变量记录的值 System.out.println(price); System.out.println(brand); } }
4.5 标识符
- 定义:Java对各种变量、方法和类等命名时使用的字符序列称为标识符
- 业内大多数程序员都在遵守阿里巴巴的命名规则。
1.硬性要求:
- 必须由数字、字母、下划线_、美元符号$组成。
- 数字不能开头
- 不能是关键字
- 区分大小写的,长度无限制
2.命名原则
不管起什么名字,都要做到见名知意。
A.小驼峰命名法
变量名和方法名:
-
如果是一个单词,那么全部小写,比如:name
-
如果是多个单词,那么从第二个单词开始,首字母大写,比如:firstName、maxAge
B.大驼峰命名法
类名:
- 如果是一个单词,那么首字母大写。比如:Demo、Test。
- 如果是多个单词,那么每一个单词首字母都需要大写。比如:HelloWorld
C.阿里巴巴命名规范细节:
-
尽量不要用拼音。但是一些国际通用的拼音可视为英文单词。
正确:alibaba、hangzhou、nanjing
错误:jiage、dazhe
-
平时在给变量名、方法名、类名起名字的时候,不要使用下划线或美元符号。
错误:_name
正确:name
-
包名:统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。
正例: 应用工具类包名为 com.alibaba.open.util、类名为 MessageUtils(此规则参考spring 的框架结构)
-
常量名:常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。正例:MAX_STOCK_COUNT