JAVA 数据类型分两大类,基本数据类型和引用数据类型。其中基本数据类型包括:整形、浮点型、字符型、布尔型;引用数据类型包括:数组、类、接口。
Java 把内存分为栈和堆,栈用来保存局部变量,如基本数据类型,类的实例;堆用来保存动态产生的数据,如 new 创建的引用类型。栈中分配的内存在变量超出代码作用域后就被释放,内存立即被回收。堆中分配的内存由 java 虚拟机垃圾回收器自动管理回收。
在堆中产生了一个数组或对象后,可以在栈中定义一个变量,这个变量的取值等于数组或对象在堆内存中的地址,这时在栈中的这个变量就成了堆中数组或对象的引用变量。在程序中就可以用这个引用变量访问堆中的数组或对象值了。引用变量不是指针,相当于堆中数组或对象的别名。
没有引用变量指向的引用类型数据会变成垃圾,但仍然占用内存,释放时间由垃圾回收器决定。
![5427f709c1849636be3f7cab450209ab.png](https://img-blog.csdnimg.cn/img_convert/5427f709c1849636be3f7cab450209ab.png)
一、整型
整形数据有4种,分别是:短整型、整形、长整型、字节。所有类型都带符号位,没有无符号数。
存储大小,及取值范围如下:
![59068795979ee70cac49363299522084.png](https://img-blog.csdnimg.cn/img_convert/59068795979ee70cac49363299522084.png)
java 中的 int 型始终是 32 位,不随处理器位数改变,在 32 位和 64 位系统上都是 4 个字节存储。
二、浮点型
![39c859aaa7e05b61f0679c709eb918a1.png](https://img-blog.csdnimg.cn/img_convert/39c859aaa7e05b61f0679c709eb918a1.png)
float 类型的数据可以带后缀 F 或 f、D 或 d(如:3.14F、3.14D),F 代表 float,D 代表 double。不带后缀的默认位 double。浮点数的计算都会又误差,不带误差的计算需要使用 BigDecima 类。
特殊的值:
Double_POSITIVE_INFINITY:正无穷大
Double.NEGATIVEJNFINITY:负无穷大
Double.NaN:不是数字
判断一个数是否为 NAN 用 Double.isNaN 函数,如:if (Double.isNaN(x))
正数除以零是正无穷?负数除以零是负无穷?
1、换成极限语言就是:
A、若分子是正数,分母是x,x趋近于0时:
左极限是负无穷大,右极限是正无穷大,整体的极限不存在.
B、若分子是负数,分母是x,x趋近于0时:
左极限是正无穷大,右极限是负无穷大,整体的极限也不存在.
2、无论什么层次的数学,确实分母不能为0;
但是在微积分中,分母是可以无止境地趋近于0的.
3、极限理论中有七种不定式,其中就有,
0/0、0°,∞°,都不可以用直觉去答题了.
例如,下面的话全是错的:
A、任何数的0次幂都等于1;
B、1的任何次幂都等于1;
C、分母不可以为0,不可以说0除以0型;
、、、、、、、
这些说法,错在把不定式的0当成了不变的常数0,而不是无穷小的过程.
这些是中学的初等数学思想,还没有过渡到大学的微积分思想.
引伸阅读:https://www.guokr.com/article/440472/?page=2
三、字符 char
![69748a4952734e444d1cc306fec7dd22.png](https://img-blog.csdnimg.cn/img_convert/69748a4952734e444d1cc306fec7dd22.png)
char 类型原本用于表示单个字符,字面量用单引号括起来,如:'A',对应得编码值为 65。后来为了标识多国语言,出现了 Unicode 字符集,一个 Unicode 字符可以由一个或多个 char 表示。char 的值可以用十六进制表示,取值范围为: ~,每个数对应一个特殊字符。
Unicode 转义字符会在解析代码之前得到处理,转义成对应字符。如:""+"" 转义后得到 ""+"",即一个空字符串。
非必要情况下,推荐使用字符传处理抽象数据类型。
四、布尔型 boolean
![86368bbcf17c4d150c7c039bb7530946.png](https://img-blog.csdnimg.cn/img_convert/86368bbcf17c4d150c7c039bb7530946.png)
五、数组
存储同一类型数据的集合称为数组。数组中的元素可以用下标访问,如:a[i]
声明一个数组:数据类型[] 变量名; 如:int[] a; 定义一个存放整形的数组。
数组声明后并没有分配内存空间,不能使用,需要初始化。初始化方式有多种:
1. int[] a1 = new int(10); // 10是存储的值大小
2. int[] a2 = new int[] {1, 2, 3, 4, 5}; // 声明并初始化,不写存储大小
3. int[] a3 = {11, 22, 33, 44, 55}; // 声明并初始化,简写形式
初始化数组时,如果没有设置值,会给所有元素设置一个默认值。整形数组默认值为 0,布尔 boolean 型数组默认值为 false, 对象数组默认值为 null。
六、类
类是构造对象的模板。通过关键字 class 声明一个类:
class ClassName{ field1 // 属性 filed2 ... constructor1 // 构造函数 constructor2 ... method1 // 方法 method2 ...}
从声明方式可以看出,一个类可以包含多个属性,多个构造函数,多个方法。声明一个 Person 类(文件名必须和类名一致):
public class Person{ public int age; public String name; public Person(int age) { this.age = age; } public Person(String name) { this.name = name; } public int getAge() { return this.age; } public String getName() { return this.name; }}
JAVA 是一个存粹的面向对象语言,所有的操作都是基于对象的操作。而对象是类通过 new 操作创建的,如:new Person("mike");
七、接口
接口是对类的一组需求描述。通过关键字 interface 声明一个接口:
interface InterfaceName{ field1 // 属性 field2 ... method1 // 方法 method2 ...}
接口中定义的所有属性都是必须是 public static final 的类型值,即静态且不可变的值。声明一个 Animal 接口:
public interface Animal{ String name = "animal"; public void eat(); public void walk();}
类继承某个接口,则必须实现该接口定义的所有方法。这样看接口就是一种行为的约定,既是能力也是约定。