java自学之路-----继承 单例设计模式

说明文档生成{

要用java生成doc,必须为public类

说明文档中只提供public protected成员信息

格式:/**   需要在文档中显示的信息  */   @param  (写上参数的信息)  @return   (返回值的信息)

例:

	/**
	获取整型数组的最大值。
	@param arr 接收一个元素为int类型的数组。
	@return 该数组的最大的元素值
	*/
	public static int getMax(int[] arr)
	{
		int maxIndex = 0;
		for(int x=1; x<arr.length; x++)
		{
			if(arr[x]>arr[maxIndex])
					maxIndex = x;
		}

		return arr[maxIndex];
	}

命令行 javadoc  -d  文件名(不更换文件直接用 . )  ***.java

生成的说明文档中可以查看到类中的除private外的所有函数,以及参数列表,

}


继承{

作用:提高复用性,让类之间有关系,为多态提供前提条件

类之间只有单继承,不直接支持多继承,因为有可能多个父类中有共同项产生不确定性

继承后,子父类出现同名成员,调用的时候子类有则不去父类找

子父类函数相同,继承后子类覆盖了父类函数,注意:子函数权限要大于等于父函数权限,子函数为static父函数必须为static

构造函数{

1.构造函数不会继承,子类构造函数的第一行为一条默认空参数的super(),

2.super()目的是调用父类空参数的构造函数

3.父类中没有空参数的构造函数的话就编译失败,解决办法是显示调用父类相应的构造函数

4.所有类都是继承自object类,所以都有一个默认的空参数的构造函数,里面有一个空参数的super()以及return语句;

5.构造函数中this()和super()只有一个

}

子类实例化过程{

子类所有构造函数都有默认父类空参数构造函数,子类继承父类,获取父类内容,在使用父类内容之前要先看父类是如何对自己的内容进行初始化的

class Father{
		Father(){
				show();
		}
		void show(){
				System.out.println("father show   ");
		}
}
class Son extends Father{
		int i = 8;
		Son(){
				super();//此时 i为0
				System.out.println("son show   " + i);//此时父类构造函数初始化结束,i为8
		}
		void show(){
				System.out.println("son show   " + i);
		}
}
class Demo{
		public static void main(String[] args){
				Son s = new Son();
				s.show();		
		}
}

输出: 

son show   0

son show   8

son show   8

说明:

1.JVM读取指定路径下Father,class文件加载进内存,再读取Son.class文件加载进内存

2.堆内存中开辟空间分配地址

3.在对象空间中,对对象的属性默认初始化即把0赋给i

4.调用构造函数进行初始化

5.在构造函数中先到父类构造函数,并进行初始化此时show()应该为this.show(),即子类的show()

6.父类构造函数初始化之后,对子类属性进行显示初始化,把8赋值给i

7.再执行子类构造函数中剩下的初始化语句

8.初始化完毕,将地址赋给引用变量s

}


this与super{

类成员与局部变量同名,用this调用类对象成员,this代表本类对象的引用

子类与父类成员变量同名,用super调用父类成员,super代表父类空间

}

分析程序

        class Father{
		int i = 4;
	}
	class Son extends Father{
		int i = 5;
	}

	class Demo{
		public static void main(String[] args){
			Son son = new son();
		}
	}

main函数进栈——>在方法区先加载父类,再加载子类——>堆内中创建对象(该对象内有两个变量i,存储在不同区域,要调用父类i使用super.i)
}

设计模式(仅仅是一种思想,一个解决问题的方案,没有固定的代码)之 单例设计模式{

要求该类只能创建一次对象,保证唯一性
方案{
1.有且仅有一个new
2.在本类中直接new
3.定义函数对外提供该new的引用(提供一个静态方法调用静态对象而不是直接类名调用静态对象是 由于函数可以保证可控制性)
}
步骤{
1.私有化该类构造函数
2.new一个对象,赋给静态引用,保证在静态函数中被调用
3.定义一个static方法,保证用类名直接调用,返回该对象引用
}
代码一

	class Single{
		static Single single = new Single();
		private Single(){}	
			
		public static Single getInstance(){
				return single;
		}
	}

称为饿汉式,加载类的时候就创建对象。适合在开发中使用


代码二

	class Single{
		static Single single = null;
		private Single(){}	
			
		public static Single getInstance(){
				if (single == null)
					single = new Single();
				return single;
		}
	}

称为懒汉式,延迟加载,等到调用该类函数的时候才创建对象,经常用于面试不适合在开发中使用,因为在多线程编程时,有可能保证不了对象的唯一性
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章