对象与引用
Java语言中除基本类型之外的变量类型都称之为引用类型.
Java中的对象是通过引用对其操作的.
例:我们有一个自定义类为Fruit(水果类)
class Fruit{
String name;
String color;
Int size;
}
Fruit fruit=new Fruit();
通常把这条语句的动作称之为创建一个对象,其实,它包含了三个动作.
(1)右边的"new Fruit()",是以Fruit类为模板,调用Fruit类 的构造函数,在堆空间里创建一个Fruit对象.
(2)左边的"Fruit fruit"创建了一个Fruit类型引用变量,所谓Fruit类的引用,就是以后可以用来指向Fruit对象的对象引用.
(3)"="操作符使对象引用指向刚创建的那个Fruit对象.
Java中创建对象的语句我们可以拆分成两部分:
Fruit fruit;
fruit=new Fruit();
有两个实体:一是对象引用变量,一是对象本身.
new Fruit();这个语句在堆空间里创建了实体,尽管他们也是确确实实存在的实体,但是我们看不见也摸不着.
对象没有名字,也就没法直接访问它.我们需要通过对象引用来间接访问对象.
对象好比一个很大的气球,但是我们抓不住它.引用变量是一根绳,可以用来系气球.
Fruit fruit1;(1)创建了一根绳子,一根还没有系上任何气球的绳;
Fruit fruit2;(2)创建的第二根绳子,也没有系上气球;
fruit1=new Fruit();(3)给fruit1系上气球
fruit2=fruit1;(4)这里,发生了复制行为.要说明的是,对象本身没有被复制,被复制的只是对象引用
结果是,fruit2也指向了fruit1所指向的对象.两根绳系的是同一只气球.
基本类型与引用类型的区别:
基本类型:
byte,short,int,long,float,double,char,boolean
他们的值就是一个数字,一个字符,或一个布尔值(true或false)
引用数据类型:
类,接口,数组
他们的值是对象字内存空间中的地址,具体的对象存在堆中.
值传递与引用传递:
Java中进行方法调用中传递参数是,参数传递有两种:
值传递:(形参数类型时基本数据类型):方法调用是,实际参数把他的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值得改变不影响实际参数的值.
引用传递:(形参数类型时引用数据类型参数):也称为传地址.方法调用时,实际参数是对象,这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留下来,所以方法执行中形式参数的改变会影响实际参数.
基本类型传递的该数据本身.引用类型传递的是对对象的引用,而不是对象本身.
static关键字
statiic被称为静态,可以用来修饰类的属性,方法,代码块,内部类.
特点:
随着类的加载而加载
优先于对象存在
修饰的成员,被所有对象所共享
可不创建对象,直接被类调用
static属性:
静态属性是类的所有对象共享的,即不管创建了多少个对象,静态属性在内存中只有一个.在一个对象中修改被static修饰的属性,所有对象中被static修改的属性一起变化.
public class Chinese{
String name;//姓名 非静态属性
static String country;//国家 静态属性
}
所有中国人共享一个国家中国
static 方法可以使用对象调用,也可以直接用类名调用,建议用类名直接调用
在static方法内部只能访问类的static属性,不能访问类的非static属性,static属性优先加载