java基础07_面向对象(上-02)

121 阅读2分钟

1.万事万物皆对象

没啥好说的

说一下匿名对象:

new Phone().call();//只能调用一次

mall.show(p);//有名儿
mall.show(new Phone());//匿名--赋值给形参了,可以用多次

2.整理一下Array。熟悉oop

public class ArrayMethod {
	
	//Pro01--package02拿来吧你
	
	//求数组最大值
	public int getMax(int arr[]) {
		int maxValue = arr[0];
		for(int i = 0;i<arr.length;i++) {
			if(maxValue < arr[i]) {
				maxValue = arr[i];
			}				
		}
		return maxValue;
	}
	
	//求数组最小值
	public int getMin(int arr[]) {
		int minValue = arr[0];
		for(int i = 0;i<arr.length;i++) {
			if(minValue > arr[i]) {
				minValue = arr[i];
			}				
		}
		return minValue;
	}
	
	//求数组平均值
	public int getAvg(int arr[]) {
		return getSum(arr)/arr.length;
	}
	//求数组总和
	public int getSum(int arr[]) {
		int sum = 0;
		for(int i = 0;i<arr.length;i++) {
			sum+=arr[i];			
		}
		return sum;
	}

	//遍历
	public void print(int arr[]) {
		for(int i = 0;i<arr.length;i++) {
			System.out.print(arr[i]+"\t");
			}
	}
	//复制
	public int[] copy(int arr[]) {
		int[] array = new int[arr.length];
		for(int i = 0;i<array.length;i++) {
			array[i] = arr[i] ;		
	    }
		return array;
	}
	//反转
	public void reverse(int arr[]) {
		for(int i = 0;i<arr.length / 2;i++) {
			int temp = arr[i];
			arr[i] = arr[arr.length - 1 - i];
			arr[arr.length - 1 - i] = temp;
			}
	}
	//排序
	public void sort(int arr[]) {
		for(int i = 0;i<arr.length - 1;i++) {
			for(int j = 0;j<arr.length - 1 - i;j++) {
				if(arr[j] > arr[j+1]) {
				int temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
				}
			  }
			}
	}

	//查找指定元素
	public int getIndex(int arr[],int dest) {
		for(int i = 0;i<arr.length;i++) {
			if(dest == (arr[i])) {//equals和==的区别!!!
				return i;
			}
		}
		return -1;
	}
}

public class ArrayMethodTest {
	
	public static void main(String[] args) {
		
		ArrayMethod m = new ArrayMethod();
		int arr[] = new int[] {2,-56,77,92,16,-20,-44,100};
		int max=m.getMax(arr);
		System.out.println("最大值为:"+max);
		
		System.out.println("遍历:");
		m.print(arr);
		System.out.println();

		

		System.out.println("排序:");
		//m.sort(arr);
		m.print(arr);
		System.out.println();
		
		int sum = m.getSum(arr);
		System.out.println("总和为:"+sum);
		System.out.println();

		
		
		int index = m.getIndex(arr, 100);
		if(index>0) {
			System.out.println("找到了,索引为:"+index);
		}else {
			System.out.println("没找到~!");
		}


	}

}

3.方法重载overload

两同一不同:同类同方法名,不同参数列表(个数、类型)

可变个数形参的方法

public void show(int i){}
public void show(String s){}
public void show(String...strs){}//几个参数都能识别
//和数组功能一样。多个参数,选一个就行。
public void show(String[] strs){}//3 4 冲突,不构成重载


public void show(int i,String...strs){}//可变参数定义时放在最后且只有一个

4.方法参数的值传递机制

image.png

4.1基本数据类型:赋值的是数据值

    public static void main(String[] args) {
        int m = 10;
        int n = 20;
        System.out.println("m:"+m+",n:"+n);//10,20
        ValueTransfer v = new ValueTransfer();
        v.swap(m,n);
        //System.out.println("m:"+m+",n:"+n);////10,20
	}
        
    public void swap(int m ,int n){
        int temp = m;
        m = n;
        n = temp;
        System.out.println("m:"+m+",n:"+n);//20,10
    }

image.png

4.2引用数据类型:赋值的是保存数据值的地址

public class ValueTransfer1 {

	public static void main(String[] args) {
		Data data = new Data();
		data.m = 10;
		data.n = 20;
		System.out.println("m:"+data.m+",n:"+data.n);//10,20
		ValueTransfer1 v = new ValueTransfer1();
		v.swap(data);
		System.out.println("m:"+data.m+",n:"+data.n);//20,10

	
	}
	public void swap(Data data){
		int temp = data.m;
		data.m = data.n;
		data.n = temp;
		}
		
}

class Data{
	int m;
	int n;
}

image.png

4.3练习

(1)定义一个Circle类,包含一个double型的radius属性代表圆的半径,一个findArea()方法返回圆的面积。

(2)定义一个类PassObject,类中定义一个方法printAreas(),该方法的定义如下:

public void printAreas(Circle c, int time)

在printAreas方法中打印输出1到time之间的每个整数半径值,以及对应的面积。

例如,times为5,则输出半径1,2,3,4,5,以及对应的圆面积。

public class PassObject {

	public void printAreas(Circle1 c, int time) {
		
		System.out.println("Radius\t\tArea");
		for(int i = 1;i<=time;i++) {
			c.radius = i;
			double area = c.findArea();
			System.out.println(i+"\t\t"+area);

		}
		c.radius=time+1;
	}
	public static void main(String[] args) {
		
		PassObject p = new PassObject();
		Circle1 c = new Circle1();
		p.printAreas(c,5);
		System.out.println("Now radius is:"+c.radius);

	}	
	
	
}


class Circle1{
	double radius;
	//方式一:
	public double findArea() {
		double area = Math.PI*radius*radius;
		return area;
	}
}

5.递归

没啥好写的

举个例子:没得例子。