与数据类型转换相关的错误及其错误原因汇总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");
}
}
|
|