类是种特殊的数据类,也可以说是自定义数据类型,
在class 中可以定义属性
可以是全局属性,和局部属性,属性就是变量,在java 中,专业名词叫属性,定义方法和属性的原则,尽量使用private 的就使用private 修饰,因为这样可以做到数据的隐藏
在class 中可以定义方法可以定义Static 方法 , 和普通方法
更具体的说 class 是一种将所有数据类型的聚集,而产生一种新的数据类型,简单的来说class 就是Object 类型数组,而且是可变化的数组,当然这只是一个比喻而已,在class 中还有很多数据结构,
Static区
Static全局方法,Static 全局变量,是和类的加载而加载,Static方法可以出现重载的形式,而Static 变量则不能出现重复的情况
方法区
在方法中可以定义各种变量,和对象,不管是对象还是变量都必须有一个初始值,即使是null ,也是合理的
数据结构
堆区
|- 所有的对象都保存在堆区中,且由堆为对象分配内存,由此证明java 堆区的数据都是动态申请
栈区
在栈中默认保存了,boolean ,byte ,char ,short ,int float ,long double 数据类型
网上据说,在栈中double ,long 会占用 2 变量的个空间,其它的则一个。
|- 保存所有基本数据类型,和对象引用地址
|- 使用new 创建一个对象后,JVM会把对象放入堆中,为了操作对象属性和方法,JVM 在栈中会定义一个变量,其变量就是创建对象的名称,作为首地址,此种变量称之引用变量。
运行时常量池
所有的常量都保存在常量池中
常量池所支持的类型,在常量池中没有基本数据类型,下面是基本数据类型的包装类
Byte ,Short ,Integer ,Long , Character , Boolean
当Integer 大于Byte的最大范围时 和 小于Byte的最小范围,也就是大于128,小于 -127,java 是不会在常量池中寻找和取出对象,如果是用new 的方式可以自行调用方法,代码实验!
第一种
Integer axe = -128;
Integer Xara = new Integer (-128).intValue();
System.out.println(axe==Xera);结果是true
第二种
Integer i2 = new Integer(Byte.MAX_VALUE).intValue();
lnteger i22 = new Integer(Byte.MAX_VALUE).intValue();
System.out.println(i2==i22);结果是true
第三种
Integer i2 = new Integer(Byte.MAX_VALUE);
lnteger i22 = new Integer(Byte.MAX_VALUE).intValue();
System.out.println(i2==i22);结果是false;
代码证明只要是整数数据类型。满足Byte的范围就能将对象取出,
第一种是自动调用intValue方法,第二种是不会自动调用,第三种是即使调用了也不相等,因为新的对象产生了