攻城狮凌风

Java探索之旅(7)——对象的思考

1.知识要点  

    ❶不可变类:一旦创建,其内容不能改变的类称之为不可变类。满足:所有数据域私有,没有修改器,没有访问器方法,其返回一个指向可变数据域的引用。(这样通过引用就能修改私有数据域)。比如,返回数组,String等皆可能导致实际数据被改变

    ❷变量作用域:类的变量和方法可以任意顺序出现,只要方法没有使用某个变量。方法可以定义与类数据变量名称(实例变量和静态变量)相同的局部变量,且使用具有较高的优先级。

    ❸this引用:指向本身的引用。可以在无参和少参构造函数中使用this调用多参构造函数,便于维护,使用方法this(参数表)。此时this指向类名。Java要求这种使用在任何其他语句之前出现。

    ❹一个对象可以包括另外一个对象,关系称之为组合。即类的数据域可以定义另外一个类的引用变量。


2.类的设计原则

    

    ❶内聚性:描叙单一实体。所有操作应该在逻辑上配合,支持连贯的目标。

    ❷一致性:命名遵循规则

    ❸封装性:private隐藏数据域。get和set提供访问器和修改器。

    ❹清晰性:在不产生混淆的情况下,凭直觉来定义。

    ❺完整性:供不同的用户使用的齐备功能

    ❻实例和静态:不依赖于单独对象的变量和方法应该声明静态。实用类名引用静态变量和方法。提供公有的静态修改器,修改静态数据域。实例可以调用静态(实例和方法),但静态不能调用实例(变量和方法)


3.实例-栈

public class StudyObject 
{
	static int size=10;
	public static void main(String args[])
	{
		Stack mystack = new Stack();
		java.util.Random random=new java.util.Random();//随机数
		random.setSeed(100);
		for(int i=0;i<size;i++)
			mystack.push(random.nextInt(56));
		mystack.getElements();
		System.out.println();
		mystack.pop();
		mystack.getElements();
	}

}

class Stack
{
	private int[] elements;
	private int size=0;
	public static final int DEFAULT_CAPSITY=4;
	
	Stack(){this(DEFAULT_CAPSITY);}//this构造函数 此处和Stack指向相同的引用
	Stack(int capcity)
	{elements=new int[capcity];}
	
	public void push(int e){
		if(size>=elements.length)
		{
			int[] temp=new int[size+1];
			System.arraycopy(elements, 0, temp, 0, size);//扩展数组,字符串复制
		    elements=temp;
		}
		elements[size++]=e;	
	}
	
	public int pop()
	{
		int last=elements[--size];
		int[] temp=new int[size];
		System.arraycopy(elements, 0, temp, 0, size);//删除最后一个元素
		elements=temp;
		return last;
	  }
	 
	public int peek()
	{return elements[size-1];}
	
	public boolean isEmpty()
	{return size==0;}
	
	public int getSize()
	{return size;}
	
	public void getElements()
	{
		for(int i=0;i<size;i++)
			System.out.print(elements[i]+" ");	
	} 
}


posted on 2014-10-28 11:58  攻城狮凌风  阅读(195)  评论(0编辑  收藏  举报

导航