1.内部类(nested classes):
a.定义:
内部类其实就是一个类中还包含着另外一个类,如同一个人(外部类)是由大脑、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液、跳动)。
假如我们有个外部类叫做 out ,一个内部类叫做 in. 我们这么去调用:
Out.In in = new Out().new In();
内部类其实严重破坏了良好的代码结构,但为什么还要使用内部类呢?
因为内部类可以随意使用外部类的成员变量(包括私有)而不用生成外部类的对象,这也是内部类的唯一优点。
如同心脏可以直接访问身体的血液,而不是通过医生来抽血。
程序编译过后会产生两个 .class 文件,分别是 Out.class 和 Out$In.class。
b.静态内部类:
可以看到,如果用 static 将内部内静态化,那么内部类就只能访问外部类的静态成员变量,具有局限性。
其次,因为内部类被静态化,因此 Out.In 可以当做一个整体看,可以直接 new 出内部类的对象(通过类名访问 static,生不生成外部类对象都没关系)
c.私有内部类:
如果一个内部类只希望被外部类中的方法操作,那么可以使用 private 声明内部类。
上面的代码中,我们必须在 Out 类里面生成 In 类的对象进行操作,而无法再使用 Out.In in = new Out().new In() 生成内部类的对象。
也就是说,此时的内部类只有外部类可控制。
如同是,我的心脏只能由我的身体控制,其他人无法直接访问它。
2.基本数据类型:
a.byte:
byte 数据类型是8位、有符号的,以二进制补码表示的整数;
byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一;s
b.short:
short 数据类型是 16 位、有符号的以二进制补码表示的整数.
short 数据类型也可以像 byte 那样节省空间。一个short变量是int型变量所占空间的二分之一;
c.int:
int 数据类型是32位、有符号的以二进制补码表示的整数;
一般地整型变量默认为 int 类型;
sub:在java的世界里,如果比int类型小的类型(比如short和byte)做运算,java在编译的时候就会将它们统一强转成int类型。当是比int类型大的类型做运算,就会自动转换成它们中最大类型那个。
d.long:
long 数据类型是 64 位、有符号的以二进制补码表示的整数;
这种类型主要使用在需要比较大整数的系统上.
默认值为 0L
注意就是最好后面加上“L”,因为这样不容易报错,也可以用小写但是容易看错所以不推荐。
e.float:
float 数据类型是单精度、32位、符合IEEE 754标准的浮点数;
float 在储存大型浮点数组的时候可节省内存空间;
默认值是 0.0f;
浮点数不能用来表示精确的值,原则上不能进行浮点数之间的对比,因为会造成精度丢失所以对比结果不准确。
可用其他方法绕开:https://www.jianshu.com/p/4679618fd28c
f.double:
double 数据类型是双精度、64 位、符合IEEE 754标准的浮点数;
浮点数的默认类型为double类型;
默认值是 0.0d;
跟float一样,对比和表示精确的值时候都会造成不准确。
g.boolean:
只能进行true/false
h.char:
char类型是一个单一的 16 位 Unicode 字符;
char 数据类型可以储存任何字符;
i.常量
常量在程序运行时是不能被修改的。
在 Java 中使用 final 关键字来修饰常量:
final double PI = 3.1415927;
j.引用变量:
引用类型的变量非常类似于C/C++的指针。引用类型指向一个对象,指向对象的变量是引用变量。它的值是指向内存空间的引用,就是地址,所指向的内存中保存着变量所表示的一个值或一组值。
这些变量在声明时被指定为一个特定的类型,比如 Employee、Puppy 等。变量一旦声明后,类型就不能被改变了。
数据类型转换:
整型、实型(常量)、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算。转换从低级到高级。
自动类型转换必须满足转换前的数据类型的位数要低于转换后的数据类型,例如: short数据类型的位数为16位,就可以自动转换位数为32的int类型,同样float数据类型的位数为32,可以自动转换为64位的double类型。
也可以强制转换,条件是转换的数据类型必须是兼容的。
引用:
https://www.runoob.com/w3cnote/java-inner-class-summary.html