Java通俗易懂30天 第9天:面向对象(中)

第四章 面向对象(上)

全部源码:https://github.com/name365/JavaSE-30Day

4.4 类的成员之二:方法

类中方法的声明和使用


public class CustomerTest {
	public static void main(String[] args) {

		Customer cust1 = new Customer();

		cust1.eat();

		cust1.sleep(8);

	}
}

class Customer{

	String name;
	int age;
	boolean isMale;

	public void eat(){
		System.out.println("客户吃饭");
		return;

	}

	public void sleep(int hour){
		System.out.println("休息了" + hour + "个小时");

		eat();

	}

	public String getName(){

		if(age > 18){
			return name;

		}else{
			return "Tom";
		}
	}

	public String getNation(String nation){
		String info = "我的国籍是:" + nation;
		return info;
	}

	public void info(){

	}
}

练习1

  • 创建一个Person类,其定义如下:

public class Person {
	String name;
	int age;

	int sex;

	public void study(){
		System.out.println("studying");
	}

	public void showAge(){
		System.out.println("age:" + age);
	}

	public int addAge(int i){
		age += i;
		return age;
	}
}
  • 测试类

public class PersonTest {
	public static void main(String[] args) {
		Person p1 = new Person();

		p1.name = "Tom";
		p1.age = 18;
		p1.sex = 1;

		p1.study();

		p1.showAge();

		int newAge = p1.addAge(2);
		System.out.println(p1.name + "的年龄为" + newAge);

		System.out.println(p1.age);

		Person p2 = new Person();
		p2.showAge();
		p2.addAge(10);
		p2.showAge();

		p1.showAge();
	}
}

练习2


public class CircleTest {

	public static void main(String[] args) {
		Circle c1 = new Circle();

		c1.radius = 2.1;

		c1.findArea();

		double area = c1.findArea(3.4);
		System.out.println(area);
	}
}

class Circle{

	double radius;

	public void findArea(){
		double area = Math.PI * radius * radius;
		System.out.println("面积为:" + area);
	}

	public double findArea(Double r){
		double area = 3.14 * r * r;
		return area;
	}
}

练习3


public class ExerTest {

	public static void main(String[] args) {

		ExerTest esr = new ExerTest();

		System.out.println("面积为:" + esr.method(6,5));
	}

	public int method(int m,int n){
		for(int i = 0;i < m;i++){
			for(int j = 0;j < n;j++){
				System.out.print("* ");
			}
			System.out.println();
		}
		return m * n;
	}
}

练习四


public class StudentTest {

	public static void main(String[] args) {

		Student[] stu = new Student[20];

		for(int i = 0;i <stu.length;i++){

			stu[i] = new Student();

			stu[i].number = i + 1;

			stu[i].state = (int)(Math.random() * (6 - 1 + 1) + 1);

			stu[i].score = (int)(Math.random() * (100 - 0 + 1));
		}

		for(int i = 0;i < stu.length;i++){

			System.out.println(stu[i].info());
		}
		System.out.println("*********以下是问题1*********");

		for(int i = 0;i < stu.length;i++){
			if(stu[i].state == 3){
				System.out.println(stu[i].info());
			}
		}
		System.out.println("********以下是问题2**********");

		for(int i = 0;i < stu.length - 1;i++){
			for(int j = 0;j <stu.length - 1 - i;j++){
				if(stu[j].score >stu[j+1].score){

					Student temp = stu[j];
					stu[j] = stu[j+1];
					stu[j+1] = temp;
				}
			}
		}

		for(int i = 0;i < stu.length;i++){
			System.out.println(stu[i].info());
		}

	}
}
class Student{
	int number;
	int state;
	int score;

	public String info(){
		return "学号:" + number + ",年级:" + state + ",成绩:" + score;
	}
}

练习四优化


public class StudentTest2 {

	public static void main(String[] args) {

		Student2[] stu = new Student2[20];

		for(int i = 0;i <stu.length;i++){

			stu[i] = new Student2();

			stu[i].number = i + 1;

			stu[i].state = (int)(Math.random() * (6 - 1 + 1) + 1);

			stu[i].score = (int)(Math.random() * (100 - 0 + 1));
		}

		StudentTest2 test = new StudentTest2();

		test.print(stu);

		System.out.println("*********以下是问题1*********");

		test.searchState(stu, 3);

		System.out.println("********以下是问题2**********");

		test.sort(stu);

		for(int i = 0;i < stu.length;i++){
			System.out.println(stu[i].info());
		}
	}

	public void print(Student2[] stu){
		for(int i = 0;i < stu.length;i++){
			System.out.println(stu[i].info());
		}
	}

	public void searchState(Student2[] stu,int state){
		for(int i = 0;i < stu.length;i++){
			if(stu[i].state == state){
				System.out.println(stu[i].info());
			}
		}
	}

	public void sort(Student2[] stu){
		for(int i = 0;i < stu.length - 1;i++){
			for(int j = 0;j <stu.length - 1 - i;j++){
				if(stu[j].score >stu[j+1].score){

					Student2 temp = stu[j];
					stu[j] = stu[j+1];
					stu[j+1] = temp;
				}
			}
		}
	}
}
class Student2{
	int number;
	int state;
	int score;

	public String info(){
		return "学号:" + number + ",年级:" + state + ",成绩:" + score;
	}
}

理解"万事万物皆对象"

对象数组的内存解析


Student[] stus= newStudent[5];
stus[0] = new Student();
sysout(stus[0].state);
sysout(stus[1]);
sysout(stus[1].number);
stus[1] = new Student();
sysout(stus[1].number);

class Student{
  int number;
  int state = 1;
  int score;
}

匿名对象的使用


public class InstanceTest {
	public static void main(String[] args) {
		Phone p = new Phone();

		System.out.println(p);

		p.sendEmail();
		p.playGame();

		new Phone().price = 1999;
		new Phone().showPrice();

		PhoneMall mall = new PhoneMall();

		mall.show(new Phone());
	}
}

class PhoneMall{

	public void show(Phone phone){
		phone.sendEmail();
		phone.playGame();
	}
}

class Phone{
	double price;

	public void sendEmail(){
		System.out.println("发邮件");
	}
	public void playGame(){
		System.out.println("打游戏");
	}
	public void showPrice(){
		System.out.println("手机价格为:" + price);
	}
}

自定义数组的工具类

工具类


public class ArrayUtil {

	public int getMax(int[] arr) {
		int maxValue = arr[0];
		for (int i = 1; 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 = 1; i < arr.length; i++) {
			if (minValue > arr[i]) {
				minValue = arr[i];
			}
		}
		return minValue;
	}

	public int getSum(int[] arr) {
		int sum = 0;
		for (int i = 0; i < arr.length; i++) {
			sum += arr[i];
		}
		return sum;
	}

	public int getAvg(int[] arr) {
		int avgValue = getSum(arr) / arr.length;
		return avgValue;
	}

	public void reverse(int[] arr) {
		for (int i = 0; i < arr.length / 2; i++) {
			int temp = arr[i];
			arr[i] = arr[arr.length - i - 1];
			arr[arr.length - i - 1] = temp;
		}
	}

	public int[] copy(int[] arr) {
		int[] arr1 = new int[arr.length];
		for (int i = 0; i < arr1.length; i++) {
			arr1[i] = arr[i];
		}
		return null;
	}

	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 void print(int[] arr) {
		System.out.print("[");
		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i] + ",");
		}
		System.out.println("]");
	}

	public int getIndex(int[] arr, int dest) {

		for (int i = 0; i < arr.length; i++) {
			if (dest==arr[i]) {
				return i;
			}
		}
		return -1;
	}
}

测试类


public class ArrayUtilTest {

	public static void main(String[] args) {
		ArrayUtil util = new ArrayUtil();
		int[] arr = new int[]{32,5,26,74,0,96,14,-98,25};
		int max = util.getMax(arr);
		System.out.println("最大值为:" + max);

		System.out.println("查找:");
		int index = util.getIndex(arr, 5);
		if(index > 0){
			System.out.println("找到了,索引地址:" + index);
		}else{
			System.out.println("没找到");
		}
	}
}

4.5 再谈方法

方法的重载(overload)


public class OverLoadTest {

	public static void main(String[] args) {
		OverLoadTest test = new OverLoadTest();
		test.getSum(1, 2);
	}

	public void getSum(int i,int j){
		System.out.println("1");
	}
	public void getSum(double d1,double d2){
		System.out.println("2");
	}
	public void getSum(String s,int i){
		System.out.println("3");
	}

	public void getSum(int i,String s){

	}

}

举例

1.判断:
与void show(int a,char b,double c){}构成重载的有:
a)void show(int x,char y,double z){}
b)intshow(int a,double c,charb){}
c) void show(int a,double c,char b){}
d) booleanshow(int c,char b){}
e) void show(double c){}
f) double show(int x,char y,double z){}
g) void shows(){double c}

编程


public class OverLoadever {

	public static void main(String[] args) {
		OverLoadever test = new OverLoadever();

		test.mOL(5);
		test.mOL(6, 4);
		test.mOL("fg");

		int num1 = test.max(18, 452);
		System.out.println(num1);
		double num2 = test.max(5.6, -78.6);
		System.out.println(num2);
		double num3 = test.max(15, 52, 42);
		System.out.println(num3);
	}

	public void mOL(int i){
		System.out.println(i*i);
	}
	public void mOL(int i,int j){
		System.out.println(i*j);
	}
	public void mOL(String s){
		System.out.println(s);
	}

	public int max(int i,int j){
		return (i > j) ? i : j;
	}
	public double max(double i,double j){
		return (i > j) ? i : j;
	}
	public double max(double d1,double d2,double d3){
		double max = (d1 > d2) ? d1 : d2;
		return (max > d3) ? max : d3;
	}
}

可变个数的形参

JavaSE 5.0 中提供了Varargs(variable number of arguments)机制,允许 &#x76F4;&#x63A5;&#x5B9A;&#x4E49;&#x80FD;&#x548C;&#x591A;&#x4E2A;&#x5B9E;&#x53C2;&#x76F8;&#x5339;&#x914D;&#x7684;&#x5F62;&#x53C2;。从而,可以用一种更简单的方式,来传递个数可变的实参。


public class MethodArgs {

	public static void main(String[] args) {
		MethodArgs test = new MethodArgs();
		test.show(12);

		test.show(new String[] { "AA", "BB", "CC" });
	}

	public void show(int i) {

	}

	public void show(String... strs) {
		System.out.println("show(String ...strs)");

		for (int i = 0; i < strs.length; i++) {
			System.out.println(strs[i]);
		}
	}

	public void show(int i, String... strs) {

	}

}

方法参数的值传递机制(重点!!!)


public class ValueTransferTest {

	public static void main(String[] args) {

		System.out.println("**********基本数据类型:***********");
		int m = 10;
		int n = m;

		System.out.println("m = " + m + ", n = " + n);

		n = 20;

		System.out.println("m = " + m + ", n = " + n);

		System.out.println("***********引用数据类型:********");

		Order o1 = new Order();
		o1.orderId = 1001;

		Order o2 = o1;
		System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " + o2.orderId);

		o2.orderId = 1002;
		System.out.println("o1.orderId = " + o1.orderId + ",o2.orderId = " + o2.orderId);

	}
}

class Order{
	int orderId;
}

针对基本数据类型


public class ValueTransferTest1 {

	public static void main(String[] args) {

		int m = 10;
		int n = 20;

		System.out.println("m = " + m + ", n = " + n);

		ValueTransferTest1 test = new ValueTransferTest1();
		test.swap(m, n);

		System.out.println("m = " + m + ", n = " + n);

	}

	public void swap(int m,int n){
		int temp = m;
		m = n;
		n = temp;
	}
}

针对引用数据类型


public class ValueTransferTest2 {

	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);

		ValueTransferTest2 test = new ValueTransferTest2();
		test.swap(data);

		System.out.println("m = " + data.m + ", n = " + data.n);

	}

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

class Data{

	int m;
	int n;
}

练习1

public class TransferTest3{
	public static void main(String args[]){
		TransferTest3 test=new TransferTest3();
		test.first();
	}

	public void first(){
		int i=5;
		Value v=new Value();
		v.i=25;
		second(v,i);
		System.out.println(v.i);
	}

	public void second(Value v,int i){
		i=0;
		v.i=20;
		Value val=new Value();
		v=val;
		System.out.println(v.i+" "+i);

	}
}
class Value {
	int i= 15;
}

练习2

public static void method(int a,int b){
	a = a * 10;
	b = b * 20;
	System.out.println(a);
	System.out.println(b);
	System.exit(0);
}

练习3


for(int i= 0;i < arr.length;i++){
	arr[i] = arr[i] / arr[0];
}

for(int i = arr.length –1;i >= 0;i--){
	arr[i] = arr[i] / arr[0];
}

int temp = arr[0];
for(int i= 0;i < arr.length;i++){
	arr[i] = arr[i] / temp;
}

练习4


public class ArrayPrint {

	public static void main(String[] args) {
		int[] arr = new int[]{1,2,3};
		System.out.println(arr);

		char[] arr1 = new char[]{'a','b','c'};
		System.out.println(arr1);
	}
}

练习5:将对象作为参数传递给方法


public class Circle {

	double radius;

	public double findArea(){
		return radius * radius * Math.PI;
	}
}

PassObject类

public class PassObject {

	public static void main(String[] args) {
		PassObject test = new PassObject();

		Circle c = new Circle();

		test.printAreas(c, 5);

		System.out.println("no radius is:" + c.radius);
	}

	public void printAreas(Circle c,int time){

		System.out.println("Radius\t\tAreas");

		for(int i = 1;i  time ;i++){
			c.radius = i;
			System.out.println(c.radius + "\t\t" + c.findArea());
		}

		c.radius = time + 1;
	}
}

递归(recursion)方法


public class RecursionTest {

	public static void main(String[] args) {

		int sum = 0;
		for (int i = 1; i  100; i++) {
			sum += i;
		}
		System.out.println("sum = " + sum);

		RecursionTest test = new RecursionTest();
		int sum1 = test.getSum(100);
		System.out.println("sum1 = " + sum1);
	}

	public int getSum(int n) {

		if (n == 1) {
			return 1;
		} else {
			return n + getSum(n - 1);
		}
	}

	public int getSum1(int n) {

		if (n == 1) {
			return 1;
		} else {
			return n * getSum1(n - 1);
		}
	}
}

练习1

public class RecursionTest {

	public static void main(String[] args) {

		int value = test.f(10);
		System.out.println(value);
	}

	public int f(int n){
		if(n == 0){
			return 1;
		}else if(n == 1){
			return 4;
		}else{
			return 2*f(n-1) + f(n-2);
		}
	}

	public int f1(int n){
		if(n == 20){
			return 1;
		}else if(n == 21){
			return 4;
		}else{
			return 2*f1(n-1) + f1(n-2);
		}
	}
}

练习2


public class Recursion2 {

	public static void main(String[] args) {

		Recursion2 test = new Recursion2();
		int value = test.f(10);
		System.out.println(value);
	}

	public int f(int n) {

		if (n == 1 || n == 2) {
			return 1;
		} else {
			return f(n - 1) + f(n - 2);
		}
	}
}

关注公众号 ,更多笔记,等你来拿,谢谢

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘架构

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值