DAY_02
1 Java的编码规范
- 严格区分大小写
- 一条语句以分号;结尾
- 一个语句块
- Java中允许包括任意的换行和空格
- 编写代码,先分析(采用什么语句语法需要什么格式),再写结构(写出大致框架,为防止括号不匹配问题),填充内容(填充条件内容)
- 任何编程语言标点符号都是英文(半角)
2标识符
概念:标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。简单来说就是给包、类、变量、方法命名的规则
规则:
1.不能以数字开头
2.由美元符号$、大小写字母a-z A-Z、下划线_、普通数字0-9组成
3.严格区分大小写
4.不能和关键字重合(Java中有50个关键字,关键字就是赋予固定特殊含义的小写单词)
5.不能和JDK中已经存在类或者接口重名(System、Math、Random、Scanner、String、Arrays等很多,后续在编程中注意)
6.ture、false、null不是关键字,也不能作为标识符
7.应该使用有意义的名称,达到见名知意的目的
3阿里编程规约
3.1命名规约
1.代码中的命名均不能以下划线_或者美元符号$考试,也不能以下划线_或者美元符号$结束。下图可以看到使用阿里规约扫描时提示命名不能以_或$开始
2.包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一有且仅有一个自然语义的单词。包名统一使用单数形式。但是类名如果有复数含义,类名可以使用复数形式。如下图所示
补充:类名,接口名统一使用【大驼峰命名法】
3.方法名、参数名、成员变量、局部变量都统一使用第一个首字母大写其他单词首字母大写风格【小驼峰命名法】
正例: localValue / getHttpMessage() / inputUserId
4.常量名全部大写,单词间用下划线隔开,力求语义表达完整清楚不要嫌名字长
正例: MAX_STOCK_COUNT //最大库存量
反例: MAX_COUNT
5.类型与中括号紧挨相连来表示数组
数据类型 [] 数组名称
正例: int [] arr
6. 抽象类命名使用 Abstract或Base 开头;
异常类名使用Exception结尾;
测试类命名以它要测试的类的名称开始,以Test结尾, UserDAO类创建测试类;如 UserDAOTest
4Java50个关键字
break | ||||
case | const | |||
continue | ||||
float | ||||
go to | ||||
long | native | |||
new | ||||
throws | ||||
try | while |
Java关键字
基本数据类型(8个)
整型:byte(1字节) shrot(2字节) int(4字节) long(8字节)
浮点型:float(4字节) double(8字节)
布尔型:boolean(falise/ture 理论上占用1bit,1/8字节,实际处理按1byte处理)
字符型:char(2字节)
和包相关(2个)
声明包:package
导包 :import
访问控制修饰符(3个)
公有的:public 同一个项目中都可以访问
受保护的:protected 同一个包+不同包的子类
对象可以访问
默认不写 static void 方法名() 同一个包中可以访问
私有的:private 本类中可以访问
流程控制(10个)
分支语句:if else switch case default
循环语句: while do for
结束语句: break continue
保留字(2个)
goto const
异常(5个)
捕获异常: try catch finally
结论:分有return和没有return的情况讨论
无return:没有抛出异常的时候会执行try不会执行catch,而finally无论如何都要执行;抛出异常的时候,程序会尝试捕捉异常Exception,捕捉成功不会再尝试捕捉其他异常,直接执行finally,执行后面的程序.
抛出异常: throw throws
区别:throws:用来声明一个方法可能产生的所有异常,不做任何处理而是将异常往上传,由方法的调用者来处理。
用在方法声明后面,跟的是异常类名
可以跟多个异常类名,用逗号隔开
throws表示出现异常的一种可能性,并不一定会发生这些异常
throw:则是用来抛出一个具体的异常类型。
用在方法体内,跟的是异常对象名
只能抛出一个异常对象名
表示抛出异常,由方法体内的语句处理
throw则是抛出了异常,执行throw则一定抛出了某种异常
修饰符(6个)
static 静态 静态方法中不能直接访问非静态变量
class 类
interface 接口
enum 枚举类
final 最终的 一般用于定义常量
abstract 抽象的
和对象相关(4个)
new 新建一个对象
use:类名 对象名 = new 类名()
this 当前类对象
use:智能在方法内部使用,表示对"调用方法的那个对象"的引用
super 父类对象
instanceof 测试某个对象的数据类型
和方法相关的(2个)
void 返回值类型,没有返回结果
return 返回一个具体的值 //返回结果的值和定义的数据类型一致
类与类、类与接口之间的关系(2个)
extends java中是单继承 一个子类只有一个父类
implements 多实现
其他(6个)
synchronized 同步锁、多线程
assert 断言,用来进行程序调试
native 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的
strictfp 用来声明FP_strict(单精度或双精度浮点数)
transient 对象序列化时,若某个属性不能被序列化使用 static 或者 transient
volatile 表明两个或者多个变量必须同步地发生变化 多线程
5 变量
概念
计算机语言中能储存计算结果或能表示值的抽象概念。
变量可以通过变量名访问。
变量通常是可变的
变量名在有效的范围内必须是唯一的
声明
格式: 数据类型 变量名 = 值;
分类
成员变量(全局变量) | 局部变量 | |
定义的位置 | 类里面,方法外面 | 方法中,注意方法的参数也是局部变量 |
作用域 | 整个类中 | 方法中 |
初始值 | java系统会提供默认值 | 必须手动赋值才可以使用 |
内存位置 | 堆,和对象的生命周期一致 | 栈、和方法的生命周期一致 |
具体如下图所示
Java提供的默认值
整型:byte short Int long 0 |
浮点型: float double 0.0 |
布尔型: Boolean false |
字符型:char \u0000(空格) |
引用数据类型 null |
使用细节
细节1:在同一个范围内变量名唯一
细节2:java是强类型的语句,必须指明变量的数据类型
细节3:变量定义的值必须和数据类型匹配
细节4:局部变量必须赋值才能使用
6基本数据类型
整型 byte short int long
数据类型 | 字节个数 | 取值范围 | 默认值 | 封装类 |
byte | 1 (8位) | -27~27-1 | 0 | Byte |
short | 2(16位) | -2^15 ~ 2^15 -1 | 0 | Short |
int | 4(32位) | -2^31 ~ 2^31 -1 | 0 | Integer |
long | 8(64位) | -2^63~ 2^63 -1 | 0 | Long |
细节1:赋值的时候不要超过值范围
细节2:声明long类型的时候超过Int的取值范围则必须添加L或者l
细节3:值超过long的范围时使用Big Integer大数据方法解决
细节4:java中规定,低于int类型的数据类型在进行运算的时候都会自动转换成int类型再进行运算
浮点型 float double
数据类型 | 字节个数 | 取值范围 | 精度问题 | 默认值 |
float 单精度浮点类型 | 4(32位) | 1.4E-45 ~ 3.4028235E38 | 小数点后保留7位 | 0.0f |
double 双精度浮点类型 | 8(64位) | 4.9E-324 ~ 1.7976931348623157E308 | 小数点后保留15位 | 0.0 |
float a = 3.5f; // 明float类型变量需要在值的后面添加f或者F
Float.MAX_VALUE > Integer.MAX_VALUE true
原因: int 和 float 都是4个字节,32位,每一位表示的含义不同
int类型首位为符号位,0表示正数、1表示负数
但在计算机中负数存储的是补码,不是原码。补码=反码(原码的第一个符号位不变,其他取反得到反码)+1,使用补码运算后可以让符号位直接参与运算,这就是使用补码的好处。所以int的有效位数加起来是32位
float类型包含了1位符号位,8位阶码和23位尾数,folat的有效位是尾数加一也就是24位,但int有效位是32位。
float实际有效位会比int少在互相转换的过程中会出现一定的精度损失问题,简但来说当一个int型数字转成float后可能就不再是原本的数字,损失了一定的精度
double的存储规则跟float相似,double包含1个符号位,11个阶码位和52个尾数位,所以double的有效位是53位可以完整保留int
布尔类型 boolean
数据类型 | 字节个数 | 取值范围 | 默认值 | 编码格式 |
boolean | 1字节(1位) | true false | false | unicode编码 |
int age=20;
if(age>=18){
}
字符型 char
数据类型 | 字节个数 | 取值范围 | 默认值 |
char | 2字节(16位) | \u0000 ~ \uffff | \u0000 |
转义字符 | 含义 |
\n | 换行 |
\t | tab 4个空格 |
\" | 输出" |
\’ | 输出’ |
\b | 退格 |
\\ | \ |
\r | 将鼠标移动到下一行的开头位置 |
7 数据类型转换
自动类型转换(小 -> 大)
小类型向大类型的转换JVM会自动完成,不需要编写额外的代码
强制类型转换(大 -> 小)
大类型向小类型的转换需要编写额外代码进行强制类型转换
| \ |
| \r | 将鼠标移动到下一行的开头位置 |
7 数据类型转换
自动类型转换(小 -> 大)
小类型向大类型的转换JVM会自动完成,不需要编写额外的代码
强制类型转换(大 -> 小)
大类型向小类型的转换需要编写额外代码进行强制类型转换