引用类型和变量:
数据类型:基本类型、引用类型
基本类型:8种
特点:对象仅存放一个数或单个数据
十进制:
八进制:以0开头,如 012
十六进制:以0x或者0X开头,如0x12
计算中的数据类型转换:
整形+实型 -> 整形
Double + X = double
Float + long = long
10 / 0 -> Exception
10/0.0 ->NaN
Char(127~-128)
数值间的强制类型转换会损失精度,如double 1.934 = int 1
== 比较两个数的实际地址,而string.equal()
接口不能创建对象,但是可以创建变量,存放实现接口类的地址
Java中的构造方法只要创造了一个,就会覆盖掉默认的无参构造方法,没写的话只有一个默认的无参构造方法
若不对外提供构造方法,可显式声明构造方法,再将其声明为private
Student s = null ;
在栈中创建Student 类型的变量 s,值默认为垃圾值,手动设置为null。该变量仅为该对象的句柄,并不是对象本身,真正的对象没用名字,仅仅在栈中分配引用空间,还未创建对象。
s = new Student(“Name”);
在堆区为属性顺序开辟空间,堆区中的值默认为null
为方法在堆区开辟空间,值为该类的该方法在方法区中的引用,此时已可调用 this
调用有参构造方法,将对象的this指针给构造方法,并传递属性值:
Public Student(String name){ this.name = name; }
在这个引用型变量中,s是变量,句柄,引用,地址,指针,值,真正的对象没用名字
Student s2 = null;
s2 = s;
s与s2同时指向一个对象,Java中只有值传递,没用地址传递等。此步骤即将s中存放的值:指向原对象的地址给了s2,指向同一对象,对s2的操作会印象s的值
只有方法,没有属性的对象:充血模型
只有属性,没有方法的对象:贫血模型
局部变量:
局部变量在方法区的语句块中定义。
局部变量在调用时,在方法相应的栈的工作区间中开辟空间;
不会自动初始化,为垃圾值,工作空间仅自己方法可以使用,是由方法使用的
局部变量作用范围仅存在于语句块或方法内有效
局部变量会在方法执行完毕后立即释放
局部变量可以为引用类型或者基本类型
全局变量:
先在方法区中加载GlobalVar类
当加载时就会在方法区的静态数据区开辟空间,并且立即将该区域与类进行静态绑定,调用默认初始化。
此时没有对象,仅类可以访问该对象
New的时候,在主线程的主方法栈帧中创建局部变量gv1,之后在堆区中创建实例全局变量k
在堆中开辟MethodA()和B,把对象的地址给gv1,对象和变量均为GlobalVar类型
带有静态全局变量的类的对象,将自动拥有该静态全局变量的引用,并且有和该静态全局变量同名的变量i,在堆区存储类的引用
Gv1.k = 20.5;
GlobalVar Gv2 = new GlobalVar();
在堆区 开辟K、MethodA、MethodB
在堆区开辟i
k设为20.5
调用gv1.k
静态全局变量没有this指针,只有实例全局变量有