黑马程序员技术交流社区
标题:
技术帖
[打印本页]
作者:
13297026005
时间:
2019-3-29 19:33
标题:
技术帖
与数据类型转换相关的错误及其错误原因汇总
package
cn.itcast.Practice;
public class
DingYi {
public static void
main(String[] args){
int
a =
10
;
int
b =
20
;
long
l =
1000
;
double
d =
3.14
;
//float f = 3.1;Error:(9, 19) java: 不兼容的类型: 从double转换到float可能会有损失
float
f=
3.1F
;
// byte b = 1;Error:(11, 14) java: 已在方法 main(java.lang.String[])中定义了变量 b。
// long l2 = 1000000000000;整数太大,默认是integer类型,超出了integer范围,更正加L。
long
l2 =
1000000000000L
;
/* int num;
System.out.println(num);Error:(15, 28) java: 可能尚未初始化变量num*/
int
num=
0
;
System.
out
.println(num);
byte
c=
56
;
//编译器的优化:当我们把常量赋值个byte,short的时候,编译器获取判断常量值是否在对应类型的范围之内,
// 如果在则不会报错可以直接赋值。如果超过了范围则会报错。
// 编译的时候,编译器会进行语法检查,但是在这个过程中不会去计算有变量参与的运算。
byte
dd=
5
;
// byte g=c+d;Error:(20, 17) java: 不兼容的类型: 从double转换到byte可能会有损失。
//byte/short/char这三种类型都可以发生数学运算.在运算的时候都会先被提升为int类型再进行计算.
}
}
与变量作用范围相关错误及其原因案例
package
cn.itcast.day;
public class
BianLiangFanWei {
public static void
main(String[] args) {
/* {
int cc = 20;
System.out.println(cc);
}
int cc = 10;
System.out.println(cc);*/
//上面程序没有问题,第一个cc在大括号之后作用范围就结束了。重新定义没有问题。
/* int a=20;
{
int a=30;
}
System.out.println(a);*/
//第一个int cc作用范围没结束,又定义int cc,重复定义报错。
int
a=
10
;
{
System.
out
.println(a);
}
//大括号在a的作用范围不报错。
}
}
与if...else相关报错及其原因案例
package
cn.itcast.Practice;
public class
Breakcontinue {
public static void
main(String[] args) {
for
(
int
i=
1
;i<
10
;i++){
if
(i%
2
==
0
){
continue
;
}
else
{
break
;
}
// System.out.println(i);Error:(11, 13) java: 无法访问的语句
}
// 答案:因为最后的输出语句永远执行不到,这个时候编译的时候就会报错
}
}
package
cn.itcast.Practice.Stringliti;
public class
IfElse {
public static void
main(String[] args) {
int
a=
10
;
int
b;
if
(a%
2
==
0
){
b=
0
;
}
else if
(a%
2
==
1
){
b=
1
;
}
System.
out
.println(b);
//Error:(12, 28) java: 可能尚未初始化变量b
//会在编译的时候报错.因为在编译的时候编译器看到了if...else if语句.它认为有可能两个判断都不成立.这样的话b就可能出现没有赋值直接使用的情况.
}
}
与重载相关的特殊案例
package
cn.itcast.Practice;
//重载字符会先执行char类型的方法,如果没有就转换成int类型执行int类型的方法,没有int类型方法然后依次是long,double方法。
public class
ChongZaiTeLie {
public static void
main(String[] args) {
sayHello
(
'a'
);
}
public static void
sayHello(
byte
arg){
System.
out
.println(
"Hello byte"
);
}
public static void
sayHello(
short
arg){
System.
out
.println(
"Hello short"
);
}
/*public static void sayHello(int arg){
System.out.println("Hello int");
}*/
/*public static void sayHello(long arg){
System.out.println("Hello long");
}*/
public static void
sayHello(
char
arg){
System.
out
.println(
"Hello char"
);
}
public static void
sayHello(String arg){
System.
out
.println(
"Hello String"
);
}
public static void
sayHello(
double
arg){
System.
out
.println(
"Hello double"
);
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2