一、数据类型:
数据类型:
java是一种强类型的语言,针对每一种数据都定义了明确的数据类型。
1.分类:
A:基本数据类型
B:引用数据类型
2.基本数据类型:4类8种
A:整数 占用字节数
byte 1
short 2
int 4
long 8
B:浮点数
float 4
double 8
C:字符
char 2
D:布尔
boolean 1
3.注意:
整数默认是int类型;
浮点数默认是double类型;
长整形后缀用L或l表示;
单精度浮点数用F或者f标记,建议使用F。
4.使用变量的时候需要注意的问题:
A:作用域
变量定义在那个大括号内,它就在这个大括号内有效。
并且,在同一个大括号内不能同时定义同名的变量。
B:初始化值
没有初始化值的变量不能直接使用。
你只要在使用前给值就行,不一定非要在定义的时候立即给值。
推荐在定义的时候给值。
定义变量的格式:
a:数据类型 变量名 = 初始化值;
b:数据类型 变量名;
变量名 = 初始化值;
C:在一行上建议只定义一个变量
可以定义多个,但是不建议。
5.数据类型转换之默认转换
一般来说,我们在运算的时候,要求参与运算的数据类型必须一致。
注意:
boolean类型不能转换为其他的数据类型。
默认转换:
A:byte,short,char->int->float->double
B:byte,short,char相互之间不转换,他们参与运算首先转换成int类型。
6.数据类型转换之强制转换
从大的到小的数据类型。
格式:
目标数据类型 变量 = (目标数据类型)(被转换的数据);
注意:不要随意的去使用强制转换,因为它隐含了精度损失问题。
思考题1:请问下面这个有没有问题
double d = 12.345;
float f = d;
有问题,可能损失精度
思考题2:看看下面两个定义有没有区别呢?
float f1 = (float)12.345
float f2 = 12.345f;
f1其实是通过一个double类型转换过来的。
而f2本身就是一个float类型。
7.几个小问题
(1)在定义long或者float类型变量的时候,要加L或者F;
整数默认是int类型,浮点数默认是double
byte:short在定义的时候,他们接受的其实是一个int类型的值。
这个是自己做了一个数据监测的,如果不在他们的范围内,就报错。
(2).byte值的问题
byte b1 = 127;
byte b2 = (byte)128; //-128
byte b2 = (byte)129; //-127
byte b2 = (byte)130; //-126
128:10000000
-128:10000000(这里的1即是符号位,也是数值位)
(3).数据类型转换之默认转换
byte,short,char — int — long — float — double
long:8个字节
float:4个字节
原因:A:他们底层的存储结构不同。
B:float表示的数据范围比long的范围要大
long:2^63-1
float:3.4+10^38>2*10^38>2*8^38=2*2^114
(4).面试题:java语言中的字符char可以存储一个中文汉字吗?为什么呢?
可以,因为java语言中的字符占用两个字节。
java语言采用的是Unicode编码。
二、变量
1.变量概述
就是在程序的执行过程中,其值是可以在一定范围内发生改变的量。
1.组成规则:
A:必须对其进行限定。
如何限定?数据类型
B:我们在运算的时候,不可能是拿着空间去运算,我们真正运算
时使用的是该空间中的值,我们就给该空间起了一个名字。
C:即使你有数据类型了,有变量名了,但是如果没有值,这个空间
是一个垃圾空间,没有任何意义。
2.定义变量的格式是:
数据类型 变量名 = 初始化值;
2.面试题
byte b1 =3,b2 = 4,b;
b = b1 + b2; //这个是类型提升,所以有问题
b = 3 + 4; //常量,先把结果计算出来,然后看是否在byte的范围内,如果在就不报错
那句是编译失败的呢?为什么呢?
b = b1 + b2;是有问题的。因为变量相加,会首先看类型问题,最终把结果赋值的也会考虑类型问题。
常量相加,首先做加法,然后看结果是否在赋值的数据类型范围内,如果不是,才报错。
byte b = 130;有没有问题,如果我想让赋值正确,
可以怎样做?结果是什么呢?
可能会损失精度,因为byte的范围是-128到127,而130不再此范围内,所以报错。
byte b = (byte)130;
分析过程:
A:获取130的二进制:
00000000 00000000 00000000 10000010
这是130的原码,也是反码,还是补码
B:做截取操作,截成byte类型的了
10000010
这个结果是补码
C:已知补码求原码
符号位 数值位
补码 1 0000010
反码 1 0000001
原码 1 1111110
结果是:-126
练习;byte b = 300;
三、位运算符
1.基本用法
&,|,^,~,<<(左移),>>(右移),>>>(无符号右移)
注意:1.要做位运算,首先要把数据转换成二进制(补码)
2.当两边是逻辑表达式时,做的是逻辑运算,
当两边是数据时,做的是位运算符。
3.^的特点:
一个数据对另一个数据位异或两次,该数本身不变。
class OperatorDemo{
public static void main(String[] args){
//&,|,^,~
int a = 3;
int b = 4;
System.out.println(3 & 4);
System.out.println(3 | 4);
System.out.println(3 ^ 4);
System.out.println(~3);
}
}
/*
分析:因为是位运算,所以我们必须先把数据换算成二进制。
3的二进制:11
00000000 00000000 00000000 00000011
4的二进制:100
00000000 00000000 00000000 00000100
&位与运算:有0则0.
结果:00000000 00000000 00000000 00000000
结果:0
|位或运算:有1则1
结果:00000000 00000000 00000000 00000111
结果:7
^位异或运算:相同则0,不同则1
结果:00000000 00000000 00000000 00000111
结果:7
~按位取反运算符:0变1,1变0
结果:(补码)11111111 111111111 11111111 11111100,求原码
11111111 111111111 11111111 11111011
10000000 00000000 00000000 00000100
结果:-4
2.位异或运算符的特点
^的特点:
一个数据对另一个数据位异或两次,该数本身不变。
class OpratorDemo2{
public static void main(String[] args){
int a = 10;
int b = 20;
System.out.println(a^b^b);//10
System.out.println(a^b^a);//20
}
}
3.面试题
请自己实现连个整数变量的交换。
class OperatorDemo{
public static void main(String[] args){
int a = 10;
int b = 20;
//方式1:使用第三方变量(开发中用)
int c = a;
a = b;
b = c;
//方式2:用位异或实现(面试用)
//结论:
//左边:a b a
//右边:a ^ b
a = a ^ b;
b = a ^ b;
a = a ^ b;
//方式3:
a = a + b;
b = a - b;
a = a - b;
//方式4:一句话搞定
b = (a+b) - (a=b);
}
}
四、生成API文档
1.jdk中主要的包:
java.lang
包含一些java语言的核心类,如String,Math,Integer
,System和Thread,提供常用功能。
java.awt
包含构成抽象窗口工具集的多个类,
这些类被用来构建和管理应用程序的图形用户界面(GUI)。
java.net
包含执行与网络相关的操作的类
java.io
包含能提供多种输入/输出功能的类
java.util
包含一些实用工具类,如定义系统特性,
实用与日期日历相关的函数。
实用与日期日历相关的函数。
2.生成自己项目的API文档
需要特殊的注释:
/*/
使用JAVADOC生成API文档
-解决问题:代码和文档的分离
常见的java注释标签:
@Author作者
@version版本
@param参数
@return返回值含义
@throws抛出异常描述
@deprecated废弃。建议用户不使用该方法。
如何生成API文档:
单击项目右键--->Export--->java--->javadoc