(尚硅谷java零基础教程)学习笔记day10-面向对象(上)

本文介绍了Java编程中的匿名对象、万物皆对象的理念、方法重载的概念及其应用,以及值传递机制。通过示例解释了匿名对象只能调用一次的特点,并展示了方法重载的多个示例。同时,详细阐述了Java中基本数据类型和引用数据类型在值传递时的区别。此外,还提供了一个关于`Circle`类和`PassObject`类的案例,演示了方法参数传递和对象状态变化的影响。
摘要由CSDN通过智能技术生成

1、匿名对象:

1.1特点:

匿名对象只能调用一次

1.2举例:

new Phone().sendEmail();
new Phone().playGame();
		
new Phone().price = 1999;
new Phone().showPrice();//0.0

1.3 应用场景:(将匿名对象赋值给一个形参)

PhoneMall mall = new PhoneMall();
mall.show(new Phone());//匿名对象当作形参(还相当于赋给变量 ),可以多次调用

其中,

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

2、理解“万事万物皆对象”

(1)在JAVA语言范畴中,我们将功能结构等封装到类中,通过类的实例化,来调用具体的功能结构。

  • Scanner,String等
  • 文件路径,File
  • 网络资源,URL

(2)涉及到Java语言和前端的html、后端的数据库交互时,前后端的结构在java层面交互时,都体现为类、对象。

3、重载的概念

3.1 定义

在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数、类型不同即可。

"两同一不同":

  • 同一个类、相同方法名
  • 参数列表不同:参数个数不同,参数类型不同

3.2 举例

构成重载的情况:

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

3.3 如何判断是否构成方法的重载?

  1. 严格按照定义判断,即“两同一不同”
  2. 和方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系

3.4 如何判断类中某一个方法的调用?

方法名 —> 参数列表

面试题:如何判断方法的重载和重写的区别?
答:
(1)方法重写 (Override)和方法重载 (Overload)都是面向对象编程中,多态特性的不同体现。
(2)方法重写描述的是父类和子类的方法关系
(3)方法重载描述的是同一个类中多个同名方法的方法关系。

4、可变个数形参的方法

1.jdk 5.0新增的内容

2.具体使用:
(1) 可变个数形参的格式:数据类型…变量名
(2) 当调用可变个数形参的方法时,传入的参数个数可以是0个,1个,2个。。。
(3) 可变个数形参的方法与本类中方法名相同,形参不同的方法之间构成重载
(4) 可变个数形参的方法与本类中方法名相同,形参类型也相同的数组之间不构成重载。换句话说,二者不能共用
(5) 可变个数形参在方法的形参中,必须声明在末尾
(6) 可变个数形参在方法的形参中,最多只能声明一个

5、Java 的值传递机制

5.1 变量的赋值

  1. 如果是基本数据类型,此时赋值的是变量所保存的数据值。
  2. 如果是引用数据类型,此时赋值的是变量所保存的数据的地址值。

5.2 实参和形参的概念

在这里插入图片描述

5.3 java 中参数传递机制(值传递机制)

在这里插入图片描述
推广:
基本数据类型 传递 数据值
引用数据类型 传递 地址值

5.4 内存解析

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

5.5 面试题、练习题

在这里插入图片描述
在这里插入图片描述
练习6:
在这里插入图片描述
程序:(两段程序在一个包内,但不在同一个 class 文件中)

package com.atguigu.exer1;
/*
 * 定义一个Circle类,包含一个double型的radius属性代表圆的半径,
 * 一个findArea()方法返回圆的面积。
 */
public class Circle {
	double radius;
	
	public double findArea(){
		return Math.PI * radius *radius;
	}
}
package com.atguigu.exer1;
/*
 * 定义一个类PassObject,在类中定义一个方法printAreas(),
 * 该方法的定义如下:public void printAreas(Circle c, int time)
 * 在printAreas方法中打印输出1到time之间的每个整数半径值,以及对应的面积。
 * 例如,times为5,则输出半径1,2,3,4,5,以及对应的圆面积。
 * 
 * 
 * 在main方法中调用printAreas()方法,调用完毕后输出当前半径值。程序运行结果如图所示。
 */
public class PassObject {
	public static void main(String[] args) {
		PassObject test = new PassObject();
		Circle c = new Circle();
		
		test.printAreas(c, 5);
		System.out.println("\n now radius is:" + c.radius);
	}
	
	public void printAreas(Circle c, int time){
		System.out.println("Radius\t\tArea");
		
		//设置圆的半径
		for(int i = 1;i <= time;i++){
			c.radius = i;
			System.out.println(c.radius + "\t\t" + c.findArea());
		}
		c.radius = time +1;
//		System.out.println("\n now radius is:" + (c.radius+1));
	}
}

输出结果:

Radius		Area
1.0		3.141592653589793
2.0		12.566370614359172
3.0		28.274333882308138
4.0		50.26548245743669
5.0		78.53981633974483

 now radius is:6.0

6、递归方法

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值