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 如何判断是否构成方法的重载?
- 严格按照定义判断,即“两同一不同”
- 和方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系
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 变量的赋值
- 如果是基本数据类型,此时赋值的是变量所保存的数据值。
- 如果是引用数据类型,此时赋值的是变量所保存的数据的地址值。
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