java笔记——引用类型

一、引用数据类型

  • 引用数据类型是一种组合型数据类型,就类似C语言中的struct结构体,将不同的数据类型组织在一起。引用数据类型一共有四种,数组,接口,类,枚举。

  • 引用类似c语言的指针,指向内存中对象的地址。

  • 引用类型定义变量就叫的对象。当多个引用只向同一个对象时,其实指向的是同一个内存地址。

例子

    public class demo {
	private String word;
	public void setWord(String word){
		this.word = word;
	}
	public String getWord(){
		return word;
	}
	public static void main(String[] args) {
		demo s1 = new demo();
		s1.setWord("我是s1对象");
		demo s2 = s1;
		s2.setWord("我是s2对象");
		System.out.println(s1.getWord());
		//
		System.out.println(s2);
		System.out.println(s1);
	}
}

输出结果:


我是s2对象

Text.demo@5c3f1224

Text.demo@5c3f1224

我们可以看到,s1.getWord()返回的是“我是s2对象”,而后面输出的内容更加清晰,s1和s2两个对象的内存的地址是一样的,所以它们引用的是同一个对象。

通过这个例子我们可以很清楚的了解到:引用指向的是对象,但引用它本身不是对象。

  • 声明引用类型变量时,并不为对象分配内存空间
   String s; //并没有为对象分配空间
   s = new String("hello");

对比C语言

   String *p;
   p = (String *)malloc(sizeof(String));

总结: 引用类似C语言的指针,指向的内存中的对象。但是这个并不是真正的指针。


二、枚举类型

枚举类型,使用关键字enum,用常量名表示一组常量。


三、数组

在java中数组是引用类型,在堆(heap)中动态分配内存。 另外java类库中还专门提供了一个java.util.Arrays类,方便我们对数组进行操作。

[注:] 每个数组都有一个内置变量length,表示数组的长度。

1.数组的声明和实例化

//声明和实例化分开
    //String[] str; //第一种
String str[];  //第二种,两种声明方式都可以
str = new String[10]; //实例化一个数组
//声明和实例化合并
String str2[] = new String[10];

注意:在声明时不要指定数组大小,我们在后面实例化的时候(在内存中申请空间时)指定数组大小。

  • 数组的初始化
    数组在初始化的时候,会默认为数组中的元素进行赋值
数据类型 默认值
基本数据类型 0
boolean false
引用类型 null

我们也可以不用默认初始化的方式。直接在声明数组的同时给每个元素进行赋值。

    int a[] = {1,2,3,4,5};
String s[] = {"welcome","to","China"};

【注】 当数组中的元素为引用类型的时候,我们需要注意,在为数组声明并初始化之后,这时候数组中的元素的默认值都是null,它们并没有指向任何对象。所以我们还需要为每个对象分配内存,让数组中的元素不在是空,而是指向内存中的对象。

    
    String s[] = new String[4];
    System.out.println(s[0]);

输出结果:

null

所以我们可以看到,它并没有指向任何对象。所以我们要单独为每个元素分配内存。我们上面的代码修改如下

    s[0] = new String("hello");
System.out.println(s[0]);

输出结果为:

hello

总结: 数组在java中是引用类型。另外要注意在创建对象数组的时候,先为数组分配内存空间,然后为数组中的元素一 一分配空间。

参考文章 : http://blog.sina.com.cn/s/blog_453d87aa01016tkv.html

posted @ 2017-11-27 11:27  代码ing  阅读(332)  评论(0)    收藏  举报