Java笔记
百知教育学习 - 胡鑫喆 - Java数据类型与运算符
01_编码规范
- 提高可读性
- 书写格式
- 层级之间必须缩进(teb:一个制表位)
- 同级代码左侧对齐
- 一行只写一句代码
- 代码注释(作用:解释说明、屏蔽些许代码)( 注释量一般不能低于代码量)
- 单行注释:
//+内容
- 多行注释:
/* +内容+ */
(多行注释不能嵌套多行注释,可以嵌套单行注释) - Javadoc注释:
/ ** + 内容 + */
(和普通多行注释一样,但能把注释抽取成API文档(应用编程接口),格式是HTML格式(即网页形式) ,但这种注释只能出现在 类,函数,属性等前边(即写在最后边无用))
- 单行注释:
package a1;
/** Hello 类 这是我写的第一个Java类*/
public class Hello{
/** 主函数Java的入口函数*/
public static void main(String[] args){
System.out.println("hello world");
}
/** dafasfasffsafaadssssssfafds */
}
- 标识符的命名
-
标识符:包,类,常量等的名字统称为标识符
-
语法规定:
- 可以有:字母(英文字母,汉字等),数字,_ , $(货币符号组成,但不能以数字开头
- 不能与关键字(单词被编程语言赋予了特殊含义),保留字(goto,const),true,false,null重名
- 区分大小写
- 没有长度限制
-
约定俗成:
- 望文生义,见名知义(能理解)
- 类名有一个或多个单词组成,每个单词首字母大写(pascal)
- 函数名,变量名有一个或多个单词组成,首单词首字母小写,拼接词首字母大写(camel)
- 包名全小写,连接只可以使用特殊字符 . ,并且不以 . 开头或结尾
- 常量全大写,多个单词拥 _ 连接
-
02_变量的概念
-
变量
- 概念:计算机内存中的一块存储空间,时存储数据的基本单元
- 声明(数据类型 变量名):int a; 赋值:a=1;
- 先声明再赋值:数据类型 变量名(变量名 = 值)
- 声明并赋值:数据类型 变量名=值
- 多种同类型变量的声明与赋值:数据类型 变量1,变量2,变量3=值3,值4,值5;
-
初级语言:汇编语言,程序员直接操作地址
-
中级语言:C语言 程序员通过指针等操作地址
-
高级语言:Java,C# 使用逻辑方式访问地址,不再使用物理方法访问地址
- 不用考虑地址,虚拟机会自动分配
- Java是个强类型语言:变量的类型和变量中所存储的数据类型必须一致
- Javascript是个弱类型语言:只需用 var 便可定于全部变量
03_基本数据类型
- Java数据类型
- 基本数据类型(简单数据类型或原始数据类型)
- 整数类型(负数二进制转换成十进制时:取反加一)
字面值:int a=10;(10就叫做 int 类型的字面值)
计算机默认的整数是 int 类型的字面值
所以在定义 long l=3000000000000L后边的L不可缺少- byte类型
- 字节:1个字节
- 范围:-128~127
- short类型
- 字节:2字节
- 范围:-32768~32767
- int类型
- 字节:4字节
- 范围:-2147483648~2147483647
- long类型
- 字节:8字节
- 范围:-9223372036854775808~9223372036854775807
- byte类型
- 字符型类型:
- char 类型
- 字节:2字节
- 取值范围:0~65535
- 字符编码:Unicode字符集(万国码)
- Unicode字符集支持 ASKII编码(美国标准信息交换码)
- Unicode中每个字符都对应一个十进制整数,从而可以使用多种方式赋值
- 字符赋值:char c1=’ A ’ (通过 ’ ’ 描述为字符赋值)等价于 char c1=65(通过十进制数65在字符集中对应的字符赋值)等价于 char c1= ’ \u0041 ’ (通过十六进制数41在字符集中所对应的的字符赋值)
- 16进制 —>2B一个字节
- ‘A’ 65
- ‘a’ 97
- ‘0’ 48
- ’空格‘ 32
- 转义字符:
- \ + 字符
- 打印 ’ :char c= ’ ’ ‘(错误) char c=’ ’ '(正确)
- 常见转义字符:
- \n :换行符
- \t :缩进
- \ :反斜线
- ’ :单引号
- ‘’ :双引号
- \ + 字符
- char 类型
- 浮点型类型(2E3==2 * 10 ^ 3)
- float类型(默认double类型)
- 字节:4字节
- 范围:
- 正数:1.4E-45~3.4E38
- 负数:-3.4E+38~1.4E-45
- double类型
- 字节:8字节
- 范围:
- 正数:4.9E-324~1.7E+308
- 负数:1.7E+308~4.9E-324
- float类型(默认double类型)
- 布尔
- boolean类型(不能参加数学计算)
- 字节:1字节(Java字节数不确定,虚拟机没有对布尔类型做出规定,虚拟机是个规范)
- 取值:true/false (没有其他的字面值)
- 描述:仅可描述‘’真‘’或者‘’假‘’
- boolean类型(不能参加数学计算)
- 整数类型(负数二进制转换成十进制时:取反加一)
- 引用数据类型(对象数据类型)
- string类型
- 取值范围:任何 “ ” 之间的字面值
- 字符编码:Unicode字符序列
- string类型
- 基本数据类型(简单数据类型或原始数据类型)
04_类型转换与类型提升
- 类型转换
- 自动类型转换:
- 两种类型互相兼容
- 目标类型大于原类型:
- 强制类型转换:(直接一刀把不要的东西切掉)
- 两种类型相互兼容
- 目标类型小于源类型
- 强制类型转换规则:
- 整数长度足够,数据完整
- 整数长度不够,数据截断
- 小数强转整数,数据截断(去掉小数点后边内容)
- 字符整数互转,数据完整(按照ASKII码表转换)
- boolean的取值为true/false,不可与其他类型转换
- 类型提升
- 自动类型提升:
- byte a=1;byte b=2;byte c=a+b;(错误)a+b自动提升为 int 类型,所以错误
所以需写成:byte c=(byte) (a+b) - 进行算术运算时:
- 两个操作数有一个为 double ,计算结果提升为 double
- 如果操作数中没有 double,有一个为 float,计算结果提升为 float
- 如果操作数中没有 float,有一个为 long,计算结果提升为 long
- 如果操作数中没有 long,有一个为 int,计算结果提升为 int
- 如果操作数中没有 int,均为 short 或 byte,计算结果仍然提升为 int
- 特殊 :任何类型与 string 相加(+)时,实为拼接,其结果自动提升为 string
- byte a=1;byte b=2;byte c=a+b;(错误)a+b自动提升为 int 类型,所以错误
- 自动类型提升:
- 自动类型转换:
05_基本运算符
-
算数运算符:两个操作数进行计算
- 加法 + :求和
- 减法 - :求差
- 乘法 * :求积
- 除法 / :求商(4/5=0; 4/5.0=0.8)
- 取模 %:求余
-
算数运算符:一元运算符(只有一个操作数)
- a+=b不会发生类型转换,但a=a+b,会发生类型转换
- 递增 ++ :变量值+1
- 递减 – :变量值 -1
a++和 ++a的区别
- a的值全部 +1
package a1;
public class text{
public static void main(String[] args){
int a=10,b=10;
a++;++b;
System.out.println(a);
System.out.println(b);
}
}
- a++式子的值为a + 1 之前的值
++a式子的值为a + 1 之后的值
package a1;
public class text{
public static void main(String[] args){
int a=10,b=10;
//System.out.println(a);
System.out.println(a++);
//System.out.println(b);
System.out.println(++b);
}
}
- 关系运算符
- 大于 >
- 小于 <
- 大于等于 >=
- 小于等于 <=
- 等于 ==
- 不等于 !=
- 逻辑运算符:两个Boolean类型的操作数或者表达式进行逻辑比较
-
&& 与(并且) 两个操作数,同时为真,结果为真
-
|| 或(或者) 两个操作数,有一个为真,结果为真
-
! 非(取反) 意为“不是”,真即是假,假即是真
-
- 三元运算符
- ? : 布尔表达式?结果1:结果2 当布尔表达式为真,返回结果1,反之返回结果2
06_位运算符
- && 和 || 统称为短路运算符(判断第一个即可出结果时,后边那个就不在判断)&和 | 为非短路运算符,全部判断(即挨个判断)
- & 按位求与
- int a=26,b=20;a&b=16 (按照2进制计算 a=11010,b=10100;所以a&b=10000,转换为十进制为16 (只有在全为1的时候才为1))
- | 按位求或
- int a=26,b=20;a | b=30 (按照2进制计算 a=11010,b=10100;所以a | b=11110,转换为十进制为30 (只要在有为1的时候就为1))
- ^ 异或
- int a=26,b=20;a ^ b=14 (按照2进制计算 a=11010,b=10100;所以a ^ b=01110,转换为十进制为14(数相同时为0,不同时为1))
- ~ 按位求反
- int a=26;转换成2进制为a=11010,补全成一个字节,所以a=00011010;按位取反,所以变成了 11100101,1作为符号位,所以a= -1100101,转换为10进制为 -27**
- a=a>>1 右移运算符
- int a=26;转换成2进制为a=11010,补全成一个字节,所以a=00011010;整体向右移动一位 ,最后一位去掉,添一个符号位(该符号位与原来相同);所以a=13(二进制右移一位 等价于 十进制数除以2)
- a=a<<1 左移运算符
- int a=26;转换成2进制为a=11010,补全成一个字节,所以a=00011010;整体向左移动一位 ,最后一位后边添0,所以a=52(二进制左移一位 等价于 十进制数乘以2)
- a=a>>>1
- 右移最高位只补0,不管原来为什么(原来为正数:不变;原来为负数:变为正数)
- & 按位求与