文章目录
- 一 数据类型
- 1 基本数据类型
- 2 引用数据类型
- 3 字符串类型变量:
- 4 常量
- 5 变量的命名规则
- 6 类型转换
- 7 运算符
- 8 JDK中常用的包
- 9 java.lang.Object类的方法
一 数据类型
Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型。
1 基本数据类型
- “字节”是byte,“位”是bit ;
- 1 byte = 8 bit ;
- Java中采用unicode编码,2个字节(16位)来表示一个字符,无论是汉字还是数字,字母,或其他语言都可以存储。而char 在Java中也是2个字节,所以可以存储中文,int是4个字节所以也可以。
public static void main(String[] args) {
int a='男';
char ch='男';
}
类型 | 内存占用 | 数据范围 |
byte | 1个字节 | -128~127 |
short | 2个字节 | -32768~32767 即:-215~215-1 |
int | 4个字节 | -231~231-1 |
long | 8个字节 | -263~263-1 |
float | 4个字节 | 1.4013E-45~3.4028E+38 |
double | 8个字节 | 4.9E-324~1.7977E+308 |
char | 2个字节 | 0~65535 |
boolean | 1个字节 | true, false |
整数型 byte short int long
浮点型 float double
字符型 char
布尔型 boolean
注意:
- Java中有一个
BigInteger
类,可以对任意精度的整数进行计算.但是需要用方法调用的方式来实现运算。abs(),add(),divide(),multiply(),pow(),toString()
例题:BigInteger
String s1=input.next();
String s2=input.next();
BigInteger num1=new BigInteger(s1);
BigInteger num2=new BigInteger(s2);
System.out.println(num1.add(num2));
-
BigDecimal
可以支持任何精度的定点数。
2 引用数据类型
字符串、数组、类、接口、lambda
注意:
- 浮点型可能只是一个近似值,并非精确的值。
- 数据范围与字节数不一定相关,例如float数据范围比long更加广泛,但是float是4字节,long是8字节。
- 浮点数当中默认类型是double。如果一定要使用float类型,需要加上一个后缀F。
- 如果是整数,默认为int类型,如果一定要使用long类型,需要加上一个后缀L。推荐使用大写字母后缀。
3 变量
创建变量
数据类型 变量名;
变量名 = 数据值;
或
数据类型 变量名 = 数据值;
对于浮点型,要么后面加F,float num1 = 2.5F
;要么使用强制类型转换float num1 = (float)2.5
。
long num = 300000000L;
float num1 = 2.5F;
float num2 = 2.5 //错误的,2.5是双精度类型,转成浮点型会造成精度损失
3 字符串类型变量:
String name = "rock";
System.out.println(name);
转义字符:
\n | 换行 |
\t | 水平制表符 |
\’ | 单引号 |
\" | 双引号 |
\ | 反斜杠 |
字符串的+操作,表示字符串拼接:
String a = "hello";
String b = "world";
System.out.println(a+b);
可以与整数进行拼接:
String a = "hello";
int b = 10;
System.out.println(a+b);//hello10
注意:
(1) 对于float和long类型,要在数据之后加F和L
(2) 对于byte和short类型,右侧数据不能超过左侧数据范围
(3) 变量一定要赋值后才能使用。
(4) 变量不能超过作用域的范围:从定义变量的一行开始,到所属的大括号{}结束
(5) 可以一个语句建立多个变量(不推荐)
int a,b,c;
int a=3, b=4, c=5;
4 常量
(1) 字面值常量
- 字符串常量:双引号
’’ ‘’
引起来的部分,”hello”
,字符串可以为空 - 整数常量:100
- 浮点数常量: 有小数点 0.0
- 字符常量:单引号
‘ ’
引起来的字符,字符不能为空,且只能有一个(空格也可以) - 布尔常量:true false
- 空常量:null 代表没有任何数据,不能用来打印输出
//System.out.println(null) 报错
(2) final关键字修饰的常量
final int a =10;
a=20;//编译出错
常量在程序运行过程中不能进行修改
5 变量的命名规则
关键字: 全是小写字母
标识符: 字母大小写、数字、$、下划线_ , 不能以数字开头。
命名规范:
类名:大驼峰式。GetNum
方法名/变量名:小驼峰式. getNum
注释:
//单行注释
/* 多行注释
多行注释
*/
/** 文档注释 */
6 类型转换
(1) 自动类型转换:
容量小的数据类型可以自动转换成容量大的数据类型,数据范围从小到大。
long num=100; //右侧为默认的int类型,左侧为long类型
注:
long转float可能存在精度损失
(2) 强制类型转换:(可能发生精度损失、数据溢出)
int num = (int) 100L; // >>> num=100
int num = (int) 3.5; // >>> num = 3
byte/short/char可以进行数学运算,运算时会先提升为int类型
boolean不能发生数据类型转换,false/true
byte a=3;
byte b=5;
byte c = a+b;//编译时报错: a+b在运算时会提升为int类型
a+=b;//相当于a=byte(a+b),其中隐含了强制类型转换
注:
- 整型常量赋值给byte, short, char等类型变量,不需要进行强制类型转换的前提是不超出其表述范围,否则必须进行强制转换。
-
a+=b
;//相当于a=byte(a+b),其中隐含了强制类型转换
7 运算符
(1) 算数运算符
+ | 加法,字符串连接 |
- | 减 |
* | 乘 |
/ | 除 |
% | 取模运算,两个数字相除取余) |
++,- - | 自增、自减 |
对于运算中的不同类型,结果将会是数据范围大的哪个
+符号在遇到字符串(String)的时候,表示连接、拼接的含义。
“a” + “b” >>>”ab”
任何数据类型与字符串进行连接的时候,结果都会变成字符串
%操作也能针对double类型进行操作
String str1 = “java”;
System.out.println(str1 + 99 + 21 ) >>>java9921
System.out.println(str1 + (99 + 21) )
>>>java120 //改变优先级
自增自减运算(应用于变量)
int x = 50;
int y = 10;
int result = ++x + y-- ;
System.out.println(result) >>>61
System.out.println(x) >>>51
(2) 赋值运算符(增量赋值运算符)
= | 等于号 |
+= | 加等于 |
-= | 减等于 |
*= | 乘等于 |
/= | 除等于 |
%= | 取模等 |
(3)比较运算符(关系运算符)
== | 判断两边数据是否相等 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
!= | 不等于 |
运算结果都为布尔值(boolean类型):true/false
(4) 逻辑运算符
&& | 短路与 |
|| | 短路或 |
! | 取反 |
注意:
- &&:符号左边是false时,右边不再计算
- ||:左边时true时,右边不再计算
(5) 位运算符(按二进制位运算)
位运算符: | |
& | 与 |
| | 或 |
~ | 非 |
^ | 异或 |
注意:
对于位运算符 & 和 | ,当操作数为boolean的时候,也表示逻辑运算,但是不支持短路求值。
(5) 移位运算符
移位运算符 | |
<< | 最左侧位舍弃,最右侧补0 |
>> | 最右侧位舍弃,最左侧位补符号位(正数补0,负数补1) |
>>> | 无符号右移:最右侧舍弃,最左侧补0 |
没有无符号左移<<<:
只有右移时才会产生补零还是补1的问题,而左移时,无需考虑符号位,右侧都是补零,所以<<<和<<的概念是相同的,没必要再整一个无符号左移。
注意:
1).左移n位,相当于原数字*2的n次方,2<<3 =8
2).右移n位,相当于原数字/2的n次方,8>>3 = 1
3).计算机的移位效率要高于计算乘除,当乘除2的n次方时,可以用移位运算代替
4).移动负数位,或移位位数过大都没有意义
(6)条件运算符(三元运算符)
数据类型 变量名 = 布尔类型表达式? 结果1 :结果2
//结果1,结果2要与数据类型一致
int max = a>b ? a : b; //选取最大值
(7)枚举
enum Gender{
男,女
}
Gender gender = Gender.男;
(8) 关键字
定义访问权限修饰符 | private, protected, public |
定义类,函数,变量修饰符 | abstract, final, static, synchronized |
定义类间关系 | extends, implements |
建立实例,引用实例,判断实例 | new, this, super, instanceof |
异常处理 | try, catch, finally, throw, throws |
用于包 | package , import |
其他 | native, strictfp, volatile, assert |
注意:
private、protected不能修饰外部类。
8 JDK中常用的包
-
java.lang
:这个是系统的基础类; -
java.io
:这里面是所有输入输出有关的类,比如文件操作等; -
java.nio
:为了完善 io 包中的功能,提高 io 包中性能而写的一个新包; -
java.net
:这里面是与网络有关的类; -
java.util
:这个是系统辅助类,特别是集合类; -
java.sql
:这个是数据库操作的类。
9 java.lang.Object类的方法
(1) equals()
:比较对象的地址值是否相等,如果子类重写,则比较对象的内容是否相
等;
(2) hashCode()
获取哈希码
(3) toString()
把数据转变成字符串
(4) getClass()
获取类结构信息
(5) finalize()
垃圾回收前执行的方法
(6) clone()
克隆
(7) wait()
多线程中等待功能
(8) notify()
多线程中唤醒功能
(9) notifyAll()
多线程中唤醒所有等待线程的功能