黑马程序员技术交流社区
标题:
java基础语法部分1
[打印本页]
作者:
fmi110
时间:
2015-8-15 12:36
标题:
java基础语法部分1
sa
/*
1、关键字
定义:被java语言赋予了特殊含义的单词。main不是关键字。goto const是保留字
特点:字母均为小写
用于定义数据类型的关键字:class interface byte short char int float long
double boolean void
用于定义数据类型值: true false null
用于定义访问权限修饰符:public protected private
用于定义定义类,函数,变量修饰符的关键字:abstract final static synchronized
用于定义类与类之间的关系:extends implements
用于定义新建实例和引用实例,判断实例的关键字:new this super instanceof
用于异常处理的:throws throw try catch finally
用于包的关键字:package import
其他修饰符: native strictfp transient volatile assert
2、java中的常量分类
1 整数常量
2 小数常量
3 boolean型常量:true false
4 字符常量:单引号括起的单数字或字母或符号,如'a' '\t'
5 字符串常量:双引号标识的一个或多个字符,"h","hello woer"
5 null常量:只有一个数值,null
3、java中的8中基本数据类型
byte 1字节 char 2字节 short 2字节 int 4字节
float 4字节 long 8字节 double 8字节 boolean
PS:整数的默认类型是 int 小数的默认类型是 double
long l = 1234355654; //错误,超出int范围
long l = 1234355654L;//正确,加L使编译器知道数据类型是long
float f = 2.3;// 错误,默认小数数double
float f = 2.3f;//正确 ,加标识f
3种引用数据类型: 类 class 接口 interface 数组[]
常见错误: 1 定义long型数据,赋值时未加标识L
2 定义float,赋值或初始化没添加f,编译器识别为double型
3 定义变量后,未初始化即使用
int a; System.out.println(a);
4 使用不存在的变量或在变量作用域之外使用变量
4、类型转换
1 自动类型转换
int a = 3;
byte b = 2;
a = a + b;
运算时,b自动转换为int型 再与a相加
2 强制类型转换
运算时,数据类型不一致,需要进行手动强制转换
int a = 3;
byte b = 2;
b = (byte)(a + b);
(a+b)运算时,自动转换为int型,要将结果赋给byte型,必须强制转换
PS:1 非数值类型不能进行数学运算,如
int a = 2; boolean n = true;
a = a + n;//错误
2 char类型数据可以直接与int类型相加,但char类型数据会自动提升为int型
byte a = 0;
char b = 'a';
byte result = a + b;// 错误: 不兼容的类型: 从int转换到byte可能会有损失
____________________________________________________
int a = 97;
char b = 'a';
boolean res = (a==b);//true
总结:表达式的数据类型的自动提升;
1 所有的byte short char型自动提升为int型
2 提升等级 double -> float -> int,表达式中如果存在等级高的类型,则结果为等级高的类型
int a = 2;
float f = 2.1f;
long l = 2L;
double d = 2.0;
l = l + f;//错误: 不兼容的类型: 从float转换到long可能会有损失
f = f + l;
d = d + l;
f = f + d;//错误
PS: 表达式中只有常量与常量的运算时不会自动提升
class Test
{
public static void main(String[] args)
{
byte b = 3 + 7;
byte a = 3 + 'a';
System.out.println(b+"..."+a);
byte b1 = 3;
byte b2 = 7;
byte b3 = b1 + b2;//错误
}
}
输出结果:10...100
错误原因:涉及到编译器编译程序时候的细节,之所以byte b = 3 +7;,没有报错,是因为3和7都是
常量,编译器知道结果是10,并且在byte范围之内,因此就自动进行了强转,所以不会报错。 而b = b1
+ b2;中b1和b2都是变量,编译器编译程序是一行一行编译的,它根本不知道b1和b2到底是多少,两个
byte类型的数据相加时,首先都会被提升为int类型,他们的和也是int类型,其值可能会超过byte的范
围,因此就会报错。
5、b = a++;(假设数据都是整型)语句在计算机中的实际执行:
说明:计算机中的实际操作为:当执行b = a++;语句时,先把a放在一个临时内存空间中,然后将a自
加1,再将临时内存空间中的a赋值给b,因此b还是原来的a的值。
代码表现: int temp = a; //将a的值存至临时内存
b = temp; //a的值赋给b
a = a + 1; //变量a加1
6、short s = 3; 则语句 s += 4;和语句 s = s + 4; 的区别:
1 在执行s+=4;语句时,编译器在编译的时候,默认进行了强制类型转换,也就是将int类型的数
据转换成short类型的数据。
2 在执行s = s + 4;语句时,编译器在编译的时候,默认并没有强制类型转换。 所以,s是short类
型,4是int类型,s会自动提升为int类型,相加的和也是int类型,赋值给short类型的变量肯定会损失精
度。 这时候就需要进行强制类型转换:s = (short)(s + 4);。
*/
复制代码
作者:
xtqiubing5856
时间:
2015-8-15 12:44
这是新学到的知识吗
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2