JAVA基础-语言

java语言的三种架构

J2EE:Java 2 Platform Enterprise Edition 企业版 --->JAVAEE

J2SE: Java 2 Platform Standard Edition 标准版 --->JAVASE

J2ME:Java2 Platform Micro Edition 小型版 --->JAVAME

标识符

1.在程序中自定义一些名称
2.由26个字母组成;0-9;_ 和$

3.数字不能开头

4.严格区分大小写,类名首字母大写较好

注释
1. 单行注释 //
2. 多行注释 
/*
这是
注释
*/
3.java特有注释
/**
文档注释。 


*/
4. 单行注释中可以有单行和多行注释;
5. 多行注释中可以有单行注释,但不能有多行注释;
6. 多行注释可以在程序出现错误的时候逐步缩小错误的范围;

7. java编译器编译的时候去掉了注释;

负数的二进制

1.把负数转变为补码(取反再加一)表示,比如-6 ,6的二进制为0110,取反1001,加1为1010

变量

1. System.out.println('你'+1);//unicode国际标准码表

2. byte b=4;//b是一个字节

byte b = 4 ;//将一个4字节的整数截取后赋值给b
byte b1 = 3 ;
byte b2 = 4 ;


b = 3 + 4 ; //ok,常量,能确定范围
b = b1 + b2 ; //error ;b1,b2为变量,不能确定范围,有可能超出b的范围;demo.java:12: 错误: 不兼容的类型: 从int转换到byte可能会有损失

还有为什么,编译器会这样要求,那如果两个int相加,就不会超出int范围吗??
而两个int类型进行相加运算  java内部机制会默认int运算,一旦超出这个范围,他自动底层有强制转换过程,保留自己原有位置、高位全舍弃  这就是byte和int的区别,int属于默认类型,他就没有byte上面那样的问题
byte和short类型“变量”,相加不能确定结果,无法检查,也不是默认类型,所以byte、short类型相加的时候,都会自动提升到int类型的

3.

按位与:a&b是把a和b都转换成二进制数然后再进行与的运算;

逻辑与:a&&b就是当且仅当两个操作数均为 true时,其结果才为 true;只要有一个为零,a&&b就为零。

 
例如: 
a&b  9&8 
1001 
1000

结果是1000 
a&&b  9&&8 结果是1

4.


3<<2 相当于3*2(2) = 12;3>>1 相当于3/2 = 1

无符号右移:数据进行右移时,高位出现的空位,无论原高位是什么,空位都用0补;

把一个二进制数右移N位,规则为:
除符号位外,全部右移N位,
如果数字是一个无符号数值,则用0填补最左边的N位,
如果数字是一个有符号数值,则用1填补最左边的N位,
也就是说如果数字原先是一个正数,则右移之后在最左边补N个0;如果数字原先是个负数,则右移之后在最左边填补N个1。


例子:
0000 0010 >> 1 = 0000 0001 
0000 1010 >> 2 = 0000 0010
1000 0010 >> 1 = 1100 0001  
1000 1010 >> 3 = 1111 0001

5.两个数交换; 

a = a ^ b;

b = a ^ b;   // b = (a ^ b) ^ b 一个数异或同一个数两次, 结果还是这个数;相当于b= a;了

a = a ^ b;  //  b = (a ^ b) ^ b 

2.比较他们的字节数

备注:1字节(Byte)=8位(Bit)

3.转换中的知识点

*java中整数类型默认的int类型;小数类型默认的double;

*char 可以当做一中特殊的整数类型;

*int无法转换为boolean;

*小数类型转为整数类型,小数可能被舍弃,所有出现精度损失,所以需要强制转换;

*boolean 类型不能转换成任何其它数据类型;

byte b2 = 120;
//没报错的原因:
//编译时候,进行检查,看赋值大小是否超过变量的类型所容纳的范围
//如果超过,报错:从int转换到byte可能会有损失,如果没超过,编译通过
float f3 = 100L; 这种情况,整数部分,可以直接赋值给float整数部分
float f1 = 100.9; 这种情况,因为默认的是double,如果这样转换,有可能失去小数点,必须强制转换
long l3 = 1000.9f; 小数转为整数,小数可能丢失,需要强制转换
double d2 = 10.9d;
int i2 = d2; //错误: 不兼容的类型: 从double转换到int可能会有损失
char c1 = 'a';
int i3 = c1; //自动转换

int i4 = 100;
//char c2 = i4;// 错误: 不兼容的类型: 从int转换到char可能会有损失

4.四则运算中

/*
1、如果两个操作数中有一个是double类型,另一个就会转换为double类型;
2、否则,如果有一个操作数是float,另一个就会转化为float;
3、否则,如果有一个操作数是long,另一个就会转换为long;
4、否则,两个操作数都将转换为int类型。 
*/

*面试陷阱

byte b1 = 10;
byte b2 = 11;
//错误: 不兼容的类型: 从int转换到byte可能会有损失
//否则,两个操作数都将转换为int类型。
byte b3 = b1 + b2 //错误
byte b3 = (byte)(b1 + b2); //正确

*面试陷阱2:

short s1 = 1; 
s1 = s1 + 1; //错误: 不兼容的类型: 从int转换到short可能会有损失

short s2 = 1; 
s2 += 1; // 等同于short s2 = (short)(s2 + (short)1); //正确

5.最后是从小到大顺序图一张

 



猜你喜欢

转载自blog.csdn.net/big_bit/article/details/78290509