javaseday07(数组工具,单例设计模式,继承)

main 函数保证程序的独立运行

public static void main(String[] args){

int [] arr= {};

int max= getMax(arr);

syso(""+max);

}

public static int getMax(int[] arr){

int maxIndex=0;

for(int i=1;x<arr.length;i++){

if(arr[x]>arr[maxIndex]){

maxIndex=x;

}

}

return arr[maxIndex];

}

public String arrToString(int[] arr){ //如果是另外一个类当中可以不加静态 没有加静态的原因

String str="[";

for(int x=0;x<arr.length;x++){

if(arr!=arr.length-1)

str = str+arr[x]+",";

else

str = str +arr[x]+"]";

  }

return str;

}


public void selectSort(int[] arr){

for(int x=0;x<arr.length-1;x++){

for(int y=x+1;y<arr.length;y++){

if(arr[x]>arr[y]){

int temp = arr[x];可抽取成swap方法

arr[x]=arr[y];

arr[y]=temp;

}

}

}

}

编译类的时候含有其他类 会在classpath 和当前文件路径下 找文件编译

没有非静态方法 没有特有属性 可以方法都加静态不用创建对象直接类名调用这种叫工具类

private ArrayTool (){}  该类方法都是静态的所以该类不需要创建对象 为了保证其他类不创建该类对象 可以将该类私有化

javadoc

//建立一个XXX啥功能

@author fsda

@version V1.0

@param arr 接受一个元素为int类型的数组(参数)

@return 返回什么

javadoc  -d  (指定目录下) .(就是当前目录)

类被提升到public 的时候保证类名和文件名必须一致

文档 不能提取私有 而且只解析

/**

*/

set classpath = .;%classpath%


设计模式:对问题行之有效的解决方式 ,其实是一种思想

单例设计模式

1、解决的问题:可以保证一个类在内存中的对象唯一性

必须对于多个程序使用一个配置信息文件时,就需要保证该对象的唯一性

如何保证唯一性 

1、不允许其他程序用new创建该类对象

2、在该类中创建一个本类实例

3、对外提供一个方法让其他程序可以获取该对象

步骤

1、私有化该类构造函数

2、通过new在本类中创建一个对象

3、定义一个共有的方法,将创建的对象返回

private static Single s = new Single(); //为了让对象可控

private Single();

public staitc Single getInstance (String name){ //通过方法来控制 对象的唯一性体现

return s;

}

Single s1 = Single.getInstance();

Single ss = Single.s; //对象不可控

单例 先构造函数私有华 再创建个本类对象 然后造个public static获取成员方法


class Single{ 开发时后多用 饿汉式

private static Single s = new Single();

private Single(){};

public static Single getInstance(){

return s;

}

}


class Single2{ 懒汉式  类加载进来没有对象 只是调用了getInstance方法时才会创建对象

private static Single2 s = null; 延迟加载形式

private Single2(){};

public static Single2 getInstance(){

if(s==null)

s = new Single2();

return s;

}

}

基类父类超类

继承的好处 1、提高了代码的复用性 2、让类与类之间产生了关系,给第三个特征多态提供了前提

父类是不断向上抽取的共性内容

java中支持单继承 不直接支持多继承 但对c++中的多继承机制进行改良

单继承:一个子类只能有1个直接父类

多继承:一个子类可以有多个直接父类(java中不允许,进行改良)

不直接支持是因为多个父类中有相同的成员 会产生调用的不确定性

在java中是通过"多实现"的方式来体现

java支持多层(多重)继承

c继承b b继承a

就会出现继承体系

当要使用一个继承体系时

查看该体系中的顶层类 了解该体系的基本功能

创建体系中的最子类对象 完成功能的使用

什么时候定义继承

当类与类之间存在所属关系的时候 就定义继承 xxx是yyy的一种 xxx extends yyy

如果不知道该不该继承 就看看继承后是否父类功能都是子类所必需的不是就不继承

在子父类中 ,成员的特点体现

1、成员变量 2、成员函数 3、构造函数

自己本空间有不到外部去找

当本类的成员和局部变量同名用this 区分 当子父类中的成员变量同名用super 区分父类

this 和super 的用法很相似

this 代表了一个本类对象的引用 super代表一个父类空间javaseday07(数组工具,单例设计模式,继承)

现象几乎没有 因为父类的直接拿来用不用定义 而且通常情况下变量都私有的 还有set get 方法 子类不用重定义

子类不能直接访问父类私有的内容

当子父类中出现成员函数一模一样的情况 会运行子类的函数 这种现象称为覆盖操作(只是像没真正覆盖) 这是函数在在子父类中的特性

函数两个特性

1、重载 在同一个类中overload 2、覆盖 子父类中 覆盖也称为重写 覆写 override 函数声名一致

覆盖注意事项 

1、子类方法覆盖父类方法时,子类权限必须要大于等于父类的权限  2、静态只能覆盖静态或被静态覆盖 (private 根本不能访问 不叫覆盖)

什么时候用覆盖操作

当对一个类进行子类的扩展时,子类需要保留父类的功能声明 但是要定义子类中该功能的特有内容时 就使用覆盖操作完成

有相同的函数的时候记得用super  不然会循环调用本类函数