不能对布尔值进行转换:可以理解为不是同一种物种不能把对象类型转换为不相干的类型在把高容量转换到低容量的时候,强制类型转换的时候可能存在内存溢出,或者精度问题 内存的溢出 代码1:
public class Study4 {
public static void main (String[] args) {
int i = 128;
byte b = (byte)i; //-128 内存的溢出;
System.out.println(i); // 128
System.out.println(b); // -128
}
}
结果1:
解析1:
上述代码:第 7 行代码,将一个 128 int 类型的值强转换为: (byte) 的类型(其 byte 类型的范围:-128~~127);无法存放正整数的 128 内存溢出 变为了 -128 的值
代码2:
public class Study4 {
public static void main (String[] args) {
int money = 10_0000_0000;
int years = 20;
int total = money*years; // 计算时存在内存的溢出
long total2 = money*years; // 计算时存在内存的溢出 默认为 int 类型赋值给 long 类型(之前就内存溢出了)
System.out.println(total);
System.out.println(total2);
long total3 = (long)money*years;
System.out.println(total3); // 没有内存的溢出;
}
}
结果2:
解析2:
上述代码:第 5 行代码,这是 JDK 7以上的新特性,数字之间可以用下划线的分割;上述代码:带 11 行代码,money*years (10_0000_0000 乘以 20 )其中 的10_0000_0000已经是让 int 类型放不下了,再乘以 20 ,更加放不下了,内存溢出(数据出错)。上述代码:第 12 行代码,money*years (10_0000_0000 乘以 20 ) 其中 的10_0000_0000已经是让 int 类型放不下了,已经内存溢出了(数据出错),把错误的数据赋给了 long 类型的变量上述代码:第 17 行代码,首先把 money 强制类型转换为 (long) 类型,在运算之前进行了自行的类型提升,提升为了:long 类型,money*years 的结果在Long的范围内,不会出现内存溢出的; 变量
局部变量;类变量实例变量java 中不存在 全局变量的
代码:
public class Study4 {
static int allClicks = 0; // 类变量
public static void main (String[] args) {
String str = "Hello World"; // 实例变量
}
public void methed () {
int num = 0; // 局部变量
}
}
局部变量
注意:局部变量必须声明和初始化值 (不然无法使用,)局部,局部就是只能在一定的范围内才有用
代码:
public class Study4 {
public static void main (String[] args) {
int num = 10;
System.out.println(num);
}
public void test () {
System.out.println(num); // 报错,num 是局部变量
}
}
结果:
解析:
上述代码:第 5 行代码,定义的是一个局部变量;只在所定义的括号范围内才有效的,同样的局部变量是必须初始化值才能使用的
实例变量:
实例变量可以不初始化值,从属于对象看:如果不自行初始化,这个类型的默认值 (整型) = 0;(浮点型) = 0.0布尔值(未初始化):默认为是;false除了基本类型,其余(引用类型:数组类型,类类型,接口类型,空类型)的默认值都是 null实例变量的使用,更C语言中的结构体的使用十分相似
代码:
public class Study4 {
String name;
int age;
float fnum ;
double dnum ;
boolean bnum ;
byte bynum;
public static void main (String[] args) {
Study4 study4 = new Study4();
System.out.println("int 的未初始化的值:"+study4.age);
System.out.println("String 的未初始化的值:"+study4.name);
System.out.println("float 的未初始化的值:"+study4.fnum);
System.out.println("double 的未初始化的值:"+study4.dnum);
System.out.println("boolean 的未初始化的值:"+study4.bnum);
System.out.println("byte 的未初始化的值:"+study4.bynum);
}
}
结果:
类变量(static)
使用关键字**(static)** 修饰 定义的变量,常量的话 再加一个 关键字 (final) 修饰常变量;关键字的修饰: 不论前后,不存在先后顺序的,都会起作用,
代码:
public class Study4 {
final static double PI = 3.14;
static final double ID = 9;
public static void main (String[] args) {
System.out.println(PI);
System.out.println(ID);
}
}
结果:
基本类型不可以强制转换为 String ,反之同样不行
基本类型:byte(1), char(2), short(2), int(4), long(8), float(4),double(8),boolean ;
代码1:
public class Study4 {
public static void main (String[] args) {
byte bynum = 1;
char cnum = 'A';
short snum = 2;
int inum = 3;
long Lnum = 4L; // L 用于区别默认的int
float fnum = 5.0F; // F 用于区别默认的double
double dnum = 6.0;
System.out.println((String)bynum);
System.out.println((String)cnum);
System.out.println((String)snum);
System.out.println((String)inum);
System.out.println((String)Lnum);
System.out.println((String)fnum);
System.out.println((String)dnum);
}
}
结果1:
(反之也不行) 代码2:
public class Study4 {
public static void main (String[] args) {
String str = "Hello World";
System.out.println((byte)str);
System.out.println((char)str);
System.out.println((short)str);
System.out.println((int)str);
System.out.println((long)str);
System.out.println((float)str);
System.out.println((double)str);
}
}
结果2:
最后:
抱歉,限于本人的水平,其中存在的错误,希望大家多多给与指教,我会加以改正,谢谢,大家



