java基础知识图
java的命名规范
包名: 多单词组成时所有字母都小写:xxxyyyzzz
类名、接口名: 多单词组成时,所有单词的首字母大写:XxxYyyZzz
变量名、方法名: 多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写: xxxYyyZzz
常量名: 所有字母都大写。多单词时每个单词用下划线连接:XXX_YYY_ZZZ
标识符
标识符: 用于给程序中的变量、类、方法命名的符号
使用标识符规则如下:
- 可以由字母、数字、下划线(_)和美元符号($)组成,其中数字不能打头
- 不能是Java的关键字和保留字,但可以包含
- 不能有包含空格
- 只能包含美元符号($),不能包含@、#等其他特殊符号
关键字
关键字: 具有特殊含义的单词,所有字母都是小写的
保留字
保留字: 尚未被使用的关键字,在未来的版本中可能被使用(命名标记符时要避免使用这些保留字)
byValue, cast, false, future, generic, inner, operator,
outer, rest, true, var , goto ,const,null
变量
变量: 内存中的一个存储区域,该区域有自己的名称(变量名)和类型(数据类型),该区域的数据可以在同一类型范围内不断变化。
- Java中每个变量必须先声明,后使用。
- 指定的变量只能接受类型与之匹配的值。
变量分类
在方法体外,类体内声明的变量称为成员变量。
在方法体内部声明的变量称为局部变量。
基本数据类型
整数类型
- int 是最常用的数据类型,在通常的情况下,直接给出一个整数值默认就是int类型。
- 将一个比较小的整数(在byte或short类型的表数范围内)赋给一个byte或short变量,系统会自动把这个整数值当作byte或short类型处理
- 一个巨大的数值系统不会把该数值当作long类型处理,应该在数值后面加上字母"l’或"L"为后缀。(推荐"L",因为"l"会和1搞混)
浮点型
与整数类型类似,Java 浮点类型也有固定的表数范围和字段长度,不受具体OS(操作系统)的影响。
Java 的浮点型常量默认为double型,声明float型常量,须后加‘f’或‘F’。
浮点型常量有两种表示形式:
十进制数形式:如:5.12 512.0f .512 (必须有小数点)
科学计数法形式:如:5.12e2 512E2 100E-2
字符型(char)
用于表示单个字符,字符型值必须用单引号括起来(‘ ’)
字符型有三种表示形式:
- 直接通过单个字符来指定字符值,例如‘A’,‘9’等
- 通过转义字符表示特殊字符型值,例如‘\n’,‘\t’
- 使用Unicode值来表示字符型值,格式为‘\uXXXX’,其中XXXX代表一个十六进制的整数
java中常用的转义字符
转义字符&说明 | Unicode表示方式 |
---|---|
\b(退格符) | \u008 |
\n(换行符) | \u00a |
\r(回车符) | \u008d |
\t(制表符) | \u009 |
\ "(双引号) | \u0022 |
\ '(单引号) | \u0027 |
\(反斜线) | \u005c |
布尔类型(boolean)
boolean 类型适于逻辑运算,一般用于程序流程控制:
- if条件控制语句
- while循环控制语句
- do-while循环控制语句
- for循环控制语句
- boolean类型数据只允许取值true和false,无null
引用数据类型
- 类、接口、数组、枚举、注解
- String类型属于引用类型
类型转型
自动类型装换
容量小的类型自动转换为容量大的数据类型。数据类型按容量大小排序为:
强制类型装换
从容量大的类型转换为容量小的类型需要强制装换(会造成精度损失或溢出):
public class TestChange {
public static void main(String[] args){
int a = 100;
int b = 200;
long c = a + b; //自动将int转换为long
long l1 = 1024l;
int i = (int) l1; //需要强制转换,没有产生溢出
long l = 1024L * 1024 * 1024 *4;
int j = (int) l; //会产生溢出
double pi = 3.1415926535897932384;
float f = (float) pi; //会造成精度损失
}
}
数值运算时的自动转换
多种基本类型参与的表达式运算中,运算结果会自动的向较大的类型进行转换
public class TestAutoChange {
public static void main(String[] args){
//由于有long型的直接量参与,整个表达式的结果为long
long earthAndMoon = 10 * 365 * 24 * 60 * 60 * 299792458l;
//由于有double型的直接量599.0参与,整个表达式的结果为double
double change = 800 - 599.0;
//80/100结果为0,右边都是int类型数据,运算结果也为int类型
//最终结果为0.0,因为0再赋值给double型,将0转换为0.0
double persent1 = 80/100;
//结果为0.8,右边表达式有double型直接量参与,
//运算结果为double型
double persent2 = 80.0 /100;
}
}
byte、char、short转换为int
byte、char、short三种类型实际存储的数据都是整数,在实际使用中遵循如下规则:
- int直接量可以直接赋值给byte、char、short,只要不超过其表示范围
- byte、char、short三种类型参与运算时,先一律转换成int类型再进行运算
public class Test{
public static void main(String[] args){
char ch = 65;
System.out.println(ch); // A
System.out.println(ch+2); // 67
}
}
类型提升
进行算术运算时:
- 两个操作数有一个为double,计算结果提升为double
- 如果操作数中没有double,有一个float,计算结果提升为float
- 如果操作数中没有float,有一个long,结果提升为long
- 如果操作数中没有int,均为short和byte,计算结果仍旧提升为int
- 任何类型与String相加(+)时,实为拼接,其结果自动提升为String
运算符
运算符和表达式是Java程序的基本组成要素。运算符是一种“功能”符号,用以通知 Java 进行相关的运算
算术运算符
这些运算符用于执行基本的数学运算
运算符 | 运算 | 例子 | 结果 |
---|---|---|---|
+ | 加 | a=5+5 | a=10 |
- | 减 | a=5-4 | a=1 |
* | 乘 | a=1*2 | a=2 |
/ | 除 | a=5/5 | a=1 |
% | 取模 | a=7%5 | 2 |
++ | 自增 | a=1;a++ | a=2 |
– | 自减 | a=1;a– | a=0 |
注意:
- “+”可以作为字符串连接符号
- “-”除了作为运算外,还可以作为求负的运算符
- 自增和自减只能用于操作变量,不能直接操作数值,常量伙子表达式
赋值运算符
用于为变量指定变量值
String str="java"; //为变量str赋值java
double pi=3.14;//为变量pi赋值3.14
还可以将一个变量赋值给另一个变量
String str1=str;//将str的值赋给str1
比较运算符
用于判断两个变量的大小,比较的结果是一个布尔值(true或false)
运算符 | 运算 | 例子 | 结果 |
---|---|---|---|
== | 等等于 | 4==3 | false |
!= | 不等于 | 4!=3 | true |
> | 大于 | 7>2 | true |
< | 小于 | 2<1 | false |
>= | 大于等于 | 8>=5 | true |
<= | 小于等于 | 8<=5 | false |
instanceof | 是否是类的对象 | “java” instanceof String | true |
逻辑运算符
用于操作两个布尔型的变量或常量
短路:一方条件不成立就不执行了
- &&(短路与):前后两个操作数必须为true才返回true,否则为false
- &(不短路与):作用与&&相同,但不短路
- ||(短路或):只要两个操作数中有一个为true,则返回true,否则为false
- |(不短路或):作用与||相同,但不短路
- !(非):只需要一个操作数,如果该操作数为true,返回false。如果为false,则返回true
- ^(异或):当两个操作数不同时才返回true,两个操作数相同返回false
位移运算符
<<
>>与>>>
计算机存储负数时需要进行反码与补码操作,而作用位运算时,负数已经是储存好的,不需要转化为源码后(-1,反码)再计算
&
|
^
~
查看负数要转化为源码(-1,反码)
三元运算符
格式:
表达式?表达式1:表达式2;
//表达式为true时,结果返回表达式1
//表达式为false时,结果返回表达式2
三元运算符与if-else的联系与区别:
- 三元运算符可简化if-else语句
- 三元运算符要求必须返回一个结果。
- if后的代码块可有多个语句
运算符的优先级
大部分运算符都是从左向右结合的,只有单目运算符、赋值运算符和三目运算符除外。
运算符有不同的优先级,所谓的优先级就是在表达式运算中的运算顺序。
运算符优先级
运算符说明 | 运算符 |
---|---|
分隔符 | . [] () {} , ; |
单目运算符 | ++ - - ~ ! |
强制类型转换运算符 | (type) |
乘法/除法/求余 | * / % |
加法/减法 | + - |
位移运算符 | << >> >>> |
关系运算符 | < <= >= > instanceof |
等价运算符 | == != |
按位与 | & |
按位异或 | ^ |
条件与 | && |
条件或 | II |
三目运算符 | ?: |
赋值 | = += -= *= /= ^= %= <<= >>= >>= |
程序流程控制
顺序结构
程序从上到下逐布的执行,中间没有任何判断和跳转。
分支结构
java提供了两种常用的分支结构:if语句和switch语句,其中if语句使用布尔表达式和布尔值作为分支条件来进行分支控制。switch语句则用对多个整数值进行匹配,从而实现分支控制。
if条件语句
f语句使用布尔表达式和布尔值作为分支条件来进行分支控制,有以下三种情况:
//单条件判断:条件成立执行代码块
if(条件){
//代码块
}
//双条件判断:条件成立执行代码块1,否则执行代码块2
if(条件){
//代码块1
}else{
//代码块2
}
//多条件判断:如果条件1成立执行代码块1,不成立判断条件2,条件2如果成立则执行代码块2,否则执行代码块3.
if(条件){
//代码块1
}else if(条件2){
//代码块2
}else{
代码块3
}
switch分支语句
由一个控制表达式和多个case标签组成,和if语句不同是,switch语句后面的控制表达式的数据类型只能是:byte,short,char、int四种整数类型,枚举类型和java.lang.String类型(从java7才允许),不能是boolean类型。
//控制表达式的值和case的值去进行匹配,匹配到则执行代码块,匹配不到则执行default代码块。
switch(控制表达式){
case 值1:{
//代码块
break;//跳出分支,不跳出继续往下执行(记得加上)
}
case 值2:{
//代码块
break;
}..
default{
//代码块3
}
}
循环结构
在满足循环条件的情况下,反复的执行某一段代码,这段被重复执行的代码被称为循环体。当反复执行这个循环体时,需要在适合的时候把循环条件设为false,从而结束循环,否则循环将一直循环下去,形成死循环。
循环语句可能包含如下四部分:
- 初始化语句:一条或多条语句,这些语句用于完成一些初始化的 工作,初始化语句在循环开始之前执行
- 循环语句:这是一个Boolean表达式,决定是否执行循环体
- 循环体:如果循环条件允许,这个代码块将被重复执行
- 迭代语句:在一次循环体执行结束后,对循环体条件求值之前执行,通常用于控制循环条件中的变量,使得循环在合适的时候结束
while循环语句
当循环条件符合时,反复执行代码块
int count=0;//初始化语句
while(count<10){//循环条件 count小于10执行
//代码块 循环体
count++;//迭代语句
}
do while循环语句
无论条件成不成立都会执行一遍代码块,再去判断循环条件是否true,为true继续循环,否则结束循环
int count=0;//初始化语句
do{
//代码块 循环体
count++;//迭代语句
}while(count<10);//循环条件 count小于10执行
for循环语句
for循环是更简洁的循环语句,大部分情况下,for循环可以代替while、do while循环
for(int count=0;count<10;count++){//初始化语句;循环条件;迭代语句
//代码体
}
嵌套循环语句
将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while均可以作为外层循环和内层循环。
实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n=mn次。
break语句
某些时候需要在某种情况下出现强行终止循环,而不是等到循环条件为false时才跳出循环,就可以用break来完成。直接终止循环体。只能用于 switch语句和循环语句中。
continue语句
continue语句和break语句类似,区别是continue只是忽略本次循环执行下次循环,不会终止循环。只能用于循环语句。
return语句
return关键字并不是专门用于结束循环的,return的功能是结束一个方法。不管你有多少层循环,在这个方法内都直接结束。