Java学习笔记(22)——Object

这里将自己学习java及其应用的一些笔记、积累分享一下,如果涉及到了文章、文字侵权,请联系我删除或调整。


一、Object

1.1 概述

  • 顶层父类

一个类,如果不继承其他类,默认继承 Object

class A /*extends Object*/ {

}

1.2 方法

  • toString() 获得一个对象的字符串表示。

Object 的默认实现是:

"day0903.Point@a9c104"

"类型@地址" ,如果需要,可以在子类中重写这个方法。

  • equals(Object obj) 当前对象,与参数对象比较是否相等。

Object 中的默认实现是:

比较内存地址

this == obj

如果想比较对象的属性值,可以重写这个方法。

1.3 练习:Object类

package day0903;

public class Point /*extends Object*/ {
	int x;
	int y;
	//alt+shift+s,
	//generate constructor using fields
	public Point(int x, int y) {
		this.x = x;
		this.y = y;
	}

	@Override
	public String toString() {
		return "("+x+", "+y+")";
	}

	@Override
	public boolean equals(Object obj) {
		//参数obj是否是 Point 类型
		if(obj instanceof Point) {
			Point p = (Point) obj;
			return this.x == p.x && this.y == p.y;
		}
		return false;
	} 
}
package day0903;

public class Test1 {
	public static void main(String[] args) {
		Point a = new Point(3,4);
		Point b = new Point(3,4);
		System.out.println(a);
		System.out.println(a.toString());
		System.out.println(">>>"+a);

		System.out.println("---------------");

		System.out.println(a == b); // 比的是内存地址
		System.out.println(a.equals(b));

	} 
}

1.4 练习:编写“数组列表类”

  • 数组

1.长度固定

2.插入或删除数据,操作繁琐

  • 数组列表,针对数组类型的缺点,封装数组的繁琐操作,提供便利易用的方法。

add() 向末尾添加

get(i) 访问i位置数据

size() 数据的数量

remove(i) i位置移除数据

package 练习;

import java.lang.reflect.Array;
import java.util.Arrays;

/*
 *	@title数组列表类
 *	封装数组的繁琐操作
 *	add()方法,自动扩展数组空间并添加数组
 *	get()下标访问数组数据
 *	size()数组中数据的数量,而不是空间大小
 *	remove()删除指定下标数据 
 */

	/* 	泛型,是一种类型参数。<>中定义的是一个变量,使用时传入一个数据类类型。
	 * 	例如,<String>,<Student>
	 */
public class ShuZuLieBiao<T> {
	T[] a;
	int index;
	
	public ShuZuLieBiao() {
		this(10);
	}
	
	public ShuZuLieBiao(int length) {
		 a = (T[]) new Object[length];/*泛型本质上是Object类型,但在创建时,还要
		  								  将创建的Object[]转型为T[]类型,以便使用*/
	}
	
	public void add(T t) {
		// 确认容量是否可以添加新数据
		queRenRongLiang();
		a[index] = t;
		index++;
	}
	
	public T get(int i) {
		// 检查范围
		jianChaFanWei(i);
		// 合法情况下,返回下标数据
		return a[i];
		
	}
	
	public int size() {
		return index;
	}
	
	public T remove(int i) {
		// 检查范围
		jianChaFanWei(i);
		// 取出i位置的值,用于返回,用户确认删除的数据
		T t = a[i];
		// 将[i+1,index)范围的值,向前复制1位
		System.arraycopy(a, i+1, a, i, index-1-i);;
		a[index-1] = null; // 末尾数据置null
		index--;	// 下标自减
		return t;
	}

	private void jianChaFanWei(int i) {
		// 检查访问下标是否合法,非负且下标未越界
		if (i < 0 || i >= index) {
			// 抛出异常,表示出错
			throw new IndexOutOfBoundsException("下标:" + i);
		}
	}

	// 确认容量
	private void queRenRongLiang() {
		// 还有空余位置
		if(index<a.length) {
			return;
		}
		// 当容量不足时,自动增加数组的容量。新增的容量 = 现有数组容量的一半 + 2
        // 为了避免构造0长度数组,造成无法增加空间,在此+2
		int n = a.length +a.length/2 +2;
		a = Arrays.copyOf(a, n);// 将a数组对象复制到一个新建的长度为n的数组中,并用引用变量a指向
	}
}
package练习;

public class Test1 {
	public static void main(String[] args) {
		// 泛型的类型参数不支持基本类型,可以用对应的包装类代替
		ShuZuLieBiao<String> d1 = new ShuZuLieBiao<String>(5);
		for(int i = 0;i<5;i++) {
			d1.add("A"+i);	
		}
		System.out.println("数组数据长度:"+d1.size());
		System.out.println("数组下标4的数据:"+d1.get(4));
		
		d1.add("X");
		d1.add("Y");
		d1.add("Z");
		System.out.println("数组数据长度:"+d1.size());
		System.out.println("数组下标6的数据:"+d1.get(7));
		System.out.println("删除下标为4的数据"+d1.remove(4));
		System.out.println("数组下标6的数据:"+d1.get(6));
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值