java基础语法
关键字和保留字
- 关键字(keyword)
关键字中所有字母都是小写
true、false、null 不算关键字 但基本当作关键字来用 - 保留字(reserved word)
现有java版本没用,但以后可能会作为关键字用,自己命名标识符的时候要避开
goto、const
标识符
- 凡是自己可以起名字的地方都叫标识符。如:类名、变量名、方法名
- 标识符的命名规则:
- 由26个字母、下划线、$组成
- 数字不能开头
- 不可以使用关键字和保留字,但能包含
- 标识符命名规范:
包名:多单词组成所有字母小写
类名、接口名:多单词组成,所有单词首字母大写
变量名、方法名:多单词组成,第一个单词首字母小写,第二个单词开始每个单词首字母大写
常量名:所有字母都大写
变量
变量要声明且显示赋值过才能使用。
基本数据类型
整型
声明long型变量必须以L或l结尾。不加会被认为是int,因为整型常量默认类型是int型
long l = 123123; //int转long 可以
long l1 = 2345545455443434343343; //报错 int存不下这么大的数
long l2 = 2345545455443434343343l; //对
浮点类型
float型后面一定要加f,浮点型常量默认类型为double型。
float f1 = 12.3;//报错 double转float需要强制类型转换
float f2 = 12.3f;//对
float的存储需求虽然是4字节,但表示数值的范围比long还大。因为float和double存的时候采用二进制系统表示,即一部分是存10的几次方,一部分存的是具体的值。
有时候精度不准确,如果不允许有任何舍入误差,要用BigDecimal类。
字符型
字符型的表示方式:
- 声明一个字符
char c1 = '1'
char c2 = '中'
- 转义字符
char c5 = '\n' //换行符
char c4 = '\t' //tab 制表符 4个空格
注意:
char型+char型 是会做运算
用+的时候考虑好是想让char做运算还是 两个char连接
布尔型
java的boolean类型只有false和true。不能用0和1
- 直接用unicode值来表示
char c6 = '\u0043'
基本数据类型转换
自动提升类型
当容量小的数据类型的变量与容量大的数据类型的变量做运算时,结果自动提升为容量大(表示数的范围的大和小)的数据类型。
byte、char、short–>int–>long–>float–>double
当byte、char、short 三种类型的变量做运算时,结果为int型
强制类型转换
可能损失信息的转换要通过强制类型转换来完成。
强制类型转换语法格式:
double x = 9.9
int nx =(int) x
Math.round、ceil等方法返回的结果是long类型,由于存在丢失信息的可能性,还是要用显示的强制类型转换转成int。
double x =9.9;
int nx = (int) Math.round(x);
引用数据类型
字符串 String
String
- 拼接
String 可以和8种基本数据类型做运算,且运算只能是连接运算:+(连接符号),运算结果仍然是String类型
char c='a';
int num = 10;
String str = "hello";
System.out.println(c+num+str); //107hello char和int是97+10 = 107
join方法
可用多个字符串放在一起,用一个界定分隔符
String all =
String.join("/","S","M","L","XL");
//all: "S/M/L/XL"
repeat方法
String repeated = "Java".repeat(3);//repeated
:"JavaJavaJava"
- 子串
substring
String greeting = "Hello";
String s = greeting.substring(0,3);// 第二个参数是不想复制的第一个位置
- 不可变字符串
String类没有提供修改字符串中某个字符的方法。 修改字符串内容的方法:提取要保留的子串,再与希望替换的字符拼接。
greeting = greeting.substring(0,3)+"p!";
不可变字符串的优点:编译器可以让字符串共享。
- 检测字符串是否相等
equals方法
检测两个字符串是否相等
equalsIgnoreCase
检测两个字符串是否相等,不区分大小写
不要用==检测两个字符串是否相等,这个运算符只能够确定两个字符串是否放在同一个位置 - 空串与null串
空串是长度为0的字符串,检测是否为空串的方法
if(str.length()==0) 或if(str.equals(""))
String 变量可以放一个特殊的值,名为null,表示目前没有任何对象与该变量关联。
检查一个字符串是否为null
if(str==null)
要检查一个字符串既不是null又不是空串
if(str!=null&&str.length()!=0)//要先检查str部位null,不是null才有长度
StringBuilder和StringBuffer
StringBuffer效率低,但允许采用多线程的方式添加或删除字符。
StringBuilder效率高,是单线程。
要用许多小段的字符串来构建一个字符串的时候就要用StringBuilder。步骤如下:
StringBuilder builder = new StringBuilder();
builder.append(ch);//单个字符
builder.append(str); //string
String ans = builder.toString();//转成String
进制与进制间的转换
所有数字再计算机底层都以二进制形式存在。
整数有二进制(0b或0B开头)、八进制(以数字0开头)、十进制、十六进制(以0
x或0X开头表示)四种表示方式。
二进制
二进制的最高位表示为符号位,0表示正数,1表示负数。
二进制有三种形式:原码、反码、补码
对正数来讲,原码反码补码都一样。对负数来讲:
- 原码
- 反码
除符号位外 各个位取反 - 补码
在反码的基础上加1
计算机底层都以补码的方式来存储数据
二进制转十进制就是从右往左2的几次方相加
十进制转二进制: 除2取余的逆
二进制转八进制就是: 从低往高每三个一位
二进制转16进制就是:从低往高每四个一位
运算符
算术运算符
算数运算符:+ - + - * / % (前)++ (后)++ (前)-- (后)–
- 参与/运算的两个操作数都是整数,表示整数除法。否则,表示浮点除法。
- 取模%: 结果的符号与被模数的符号一样。即-12%5的结果是-2,而12%5的结果是2.
- 自增自减运算
自增自减运算不会改变数据本身的类型
前++: 先自增1,再运算
后++: 先运算,后自增1
赋值运算符
=
支持连续赋值 int
i1,j2 =10;
+= -= /= *= %= 不会改变变量本身的数据类型,因为他会发生强制类型转换
short s1=10;
s1 = s1+2; //编译失败
s1+=2; //成功 因为+=不会改变变量本身的数据类型
比较运算符
比较运算符== !=
< >= <= instanceof
逻辑运算符
逻辑运算符操作的都是布尔型变量
逻辑运算符:
- & 逻辑与
- | 逻辑或
- ! 逻辑非
- && 短路与 左边为false 右边的运算就不会再执行
- || 短路或 左边为true 右边的运算就不会再执行
- ^ 逻辑异或 一样为false 不一样为true
位运算符
位运算符操作的都是整型数据.
位运算符:
- << 左移
在给定的范围内,每向左移一位,相当于乘以2。左操作数是int型,移位运算符的右操作数要完成模32的运算(1<<35的值等同于1<<3等于8);左操作数是long型,移位运算符的右操作数要完成模64的运算; - >>右移 用符号位填充高位
在给定的范围内,每向右移一位,相当于除以2
- >>> 无符号右移 用0 填充高位
- & 与运算
- | 或运算
- ^ 异或运算
- ~ 取反运算 包括符号位在内
使用位运算符可以实现两个数的交换
num1 = num1^num2;
num2 = num1^num2;
num1 = num1^num2;
三元运算符
(条件表达式)?表达式1:表达式2
三元运算符的效率比ifelse高