DAY_02

1 Java的编码规范

  1. 严格区分大小写
  2. 一条语句以分号;结尾
  3. 一个语句块
  4. Java中允许包括任意的换行和空格
  5. 编写代码,先分析(采用什么语句语法需要什么格式),再写结构(写出大致框架,为防止括号不匹配问题),填充内容(填充条件内容)
  6. 任何编程语言标点符号都是英文(半角)

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个关键字

abstract

assert

boolean

break

byte

case

catch

char

class

const

continue

default

do

double

else

enum

extends

final

finally

float

for

go to

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

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会自动完成,不需要编写额外的代码

强制类型转换(大 -> 小)

大类型向小类型的转换需要编写额外代码进行强制类型转换