基本规范
语法主体
概述:java是一种强语言类型,区分大小写,自定义常量通常全部大写,必须声明变量的数据类型并为其初始化赋值,语句可以跨行,以英文分号(;)结尾,以成对的大(花)括号区分功能代码块,用小括号传递参数(可以是简单的数据,也可以是条件语句等)。
关键字:系统定义的具有特殊作用的字符,全部小写。
PS:常见的关键字按照功能划分有以下几种(不用死记,开始做到在代码中看到时,知道代表什么就行,以后会在用的时候解释):
用于成员或类型的权限声明:public、private、protected;
成员或类型的状态声明:static、final,class;
类的类型声明:abstract、class、interface、 extends、implements;
用于对象的操作:new、 this、 super;
控制语句关键词: if、else、 for、while、do-while、switch、case、default;
其它关键词: try、catch、finally、return、void、package、import等。
标识符:用于给变量、常量、函数、语句块等命名作区分,以建立起名称与使用之间的关系,通常由数字、字母、_ 、$组成,不能以数字、$等开头。
注释:分为单行注释和多行注释两种,单行注释以双斜线(//)开头,多行注释以 /* 开头,以 */ 结尾,可以跨越多行,并在中间的任意位置添加注释内容,注释会被编译器忽略。
PS:运算符、数据类型等下边单独记录,其它的如预留关键字等一般没必要掌握,最多知道有这么个概念就行。
命名规范
类名:包括接口类+枚举类,使用大驼峰命名法,每个单词的首字母大写,不包含下划线。例如:MyClass, Person, Car;
方法名和变量名:使用小驼峰命名法,第一个单词的首字母小写,后续单词的首字母大写,不包含下划线。例如:myMethod(), firstName, age.
常量名:使用全大写字母,并用下划线分隔单词。例如:MAX_VALUE, PI, DEFAULT_TIMEOUT;
包名:使用小写字母,多个单词之间可以使用点(.)分隔。一般将网址名倒置,例如:com.example.myproject;
类型(泛型)参数:使用单个大写字母表示,如T, E, K, V;
布尔类型的变量和方法:通常以"is"或"has"开头,使用小驼峰命名法。例如:isActive(), hasPermission();
变量名:应使用描述性的名称,可以简洁明了地表达变量的含义。避免使用单个字符或缩写作为变量名,除非是在循环中使用的索引变量;
方法名:以动词开头,能够准确描述方法的操作。例如:calculateTotal(), printMessage();
数据与转换
数据类型
概述:Java总体上分为基本数据类型和引用数据类型,其中,引用数据类型可以理解为常说的"对象",对象是类的实例化(以后专门说)。基本数据类型在概念上与C语言中的基本数据类型相似,用于存储简单的数据值,有固定的内存大小。
引用数据类型:即对象,在java中一切都可以是对象,包括基本数据类型也有对应的包装类,常用的内置引用数据类型有 String (字符串类型)、数组(“对应数据类型+[]”表示)、集合List、Map等,Java中最顶级的类 Object,所有类或直接或间接继承于它。
基本数据类型:三大类八种,数值型:byte、short、int、long、float、double,字符型:char,布尔型:booblean。注意将 char 和 string 区分开,它们的相同点都是用英文引号("")括起来,但 char 只能表示一个字符(可以是单个字母、数字、符号等),可以大致理解成 cha r是 String 的基本单位。
基本数据类型内存大小(单位字节)及取值范围(感觉java中不是重点,拿不准直接用大的)。
类型转换
概述:java的数据类型转换基本上分为两种,即自动数据类型转换(也叫隐式类型转换)和强制数据类型转换,自动类型转换一般只用于基本数据类型,是在运算时,当类型不同时,将较小的数据类型自动转换为较大的数据类型进行运算,一般不会造成精度丢失。强制数据类型转换则相反,一般用于将较大的数据类型转换为较小的数据类型,可能会出现精度丢失问题,可用于基本数据类型和引用数据类型之间。
自动转换规则:按照数据大小排序为【 double > float > long > int > char > short > byte 】,每种数据类型可以自动向前转换,但不能向后自动转换。其中 char 类型会根据符号在 ASCII 码表中对应的数值转换成对应数字参与运算。
强制转换方法:一般分为两种方法,一种是显式转换,一种是包装类转换。前者主要用于基本数据类型间的强制大转小。后者会先将要转换的数据转换成对应其本身基本数据类型的包装类对象,在调用类对象提供的方法就行强制转换,常用于基本数据类型与 String 类型之间的相互转换,后边再详细介绍。
// 自动类型转换(隐式类型转换)
int x = 5;
double y = x; // int自动转换为double, y=5.0
long e = 100L;
float f = e; // long自动转换为float, f=100.0
// 显示转换,出现精度丢失问题,会舍弃小数位(具体的内部运算较复杂,记住精度问题即可)
double m = 3.54;
int n = (int)m; // double显式转换为int, n=3
float j = 3.14f;
byte k = (byte)j; // float显式转换为byte, k=3
// 整数转换超范围,先转成2进制数,舍弃高位,只保留对应的低位再转成十进制数
long a = 999999;
byte b = (byte)a; // long显式转换为byte, b=63
// String字符串7用int对应包装类提供的方法转换成int数字7
String c = '7';
int number = Integer.parseInt(c);
流程与运算
运算符号
算术运算符号:加【+】、减【-】、乘【*】、除【/】、取余(模)【%】,主要对数值型的数据进行算术运算。
赋值运算符号:【=】【+=】【- =】【* =】【/ =】【% =】,其中,如“a+=b”、“a/=b”,相当于“a=a+b”、“a=a/b”,其它的以此类推。
自增自减符号:【++】或【--】,每一次只会自增自减1。当自增自减符号作为一行代码多个运算中的一部分时,符号在变量前优先计算,符号在变量后则最后计算。如下
int x = 5;
int y = ++x;
// 先递增x,然后将新的值赋给y,结果:x = 6, y = 6
int a = 5;
int b = a++;
// 先将旧的值赋给y,然后再递增x,结果:a = 6, b = 5
关系运算符号:等于【==】、大于等于【=>】、小于等于【<=】、小于【<】、大于【>】、不等于【!=】,其运算结果一定是布尔型boolean,即非 true 则 false。
逻辑运算符号:与【 & 】、或【 | 】、非【 ! 】、异或【^】,用于多条件判断,结果布尔型boolean。
PS:与:同真才真、或:一真就真、非:变假为真、异或:一真一假才是真。(真即true,假即false)
短路逻辑运算符号:【&&】在第一个操作数为 false 时停止计算直接返回 false否则才计算第二个值并进行与运算。【||】则是第一个操作数为 true 时停止计算直接返回 true,否则才会计算第二个数操作数。
三元(目)运算符:格式为:【关系表达式 ? 表达式1 : 表达式2】,含义是:若表达式为真,则输出表达式1结果为1,否则输出表达式2结果,相当于不嵌套的【if - else】。
拼接运算符号:【+】,除了可以用于数值数学计算外,还可用于字符串的拼接。
流程语句
概述:根据功能,可以分为顺序语句、分支语句、循环语句三类。其中顺序语句表现为程序自上而下执行,无特殊控制语句。分支语句主要包含【 if - else】、【 switch 】两种,循环语句主要包括【 for 】、【 while 】、【 do - while】三种,它们的基本使用方法如下,此外,还支持相互嵌套。
PS:记住大概结构和用的关键字(不同语言控制语句类型大致相同但结构表示和用的关键字有所差异)即可,复杂嵌套用到的地方再逐步分析逻辑。
// if语句:用于基于条件的结果决定是否执行某个代码块
if (condition) {
// 如果条件为真,则执行此处的代码
} else {
// 如果条件为假,则执行此处的代码
}
// switch语句:根据表达式的值选择执行的代码块
switch (expression) {
case value1:
// 如果表达式的值等于value1,则执行此处的代码
break;
case value2:
// 如果表达式的值等于value2,则执行此处的代码
break;
default:
// 如果表达式的值与前面的case都不匹配,则执行此处的代码
}
// for循环:在指定的条件下,按照一定的步长重复执行某个代码块
for (int i = 0; i < n; i++) {
// 执行循环体内的代码,重复执行n次
}
// while循环:在给定条件为真时重复执行某个代码块
while (condition) {
// 当条件为真时,重复执行此处的代码
}
// do-while循环:类似于while循环,但至少会执行一次代码块
do {
// 先执行此处的代码一次,之后如果while判断为真则继续执行,否则不再执行。
} while (condition);