面向对象(匿名类、方法重载、可变个数的形参、值传递机制)
1.匿名类
实例代码如下:
package start;
public class YuFa {
public static void main(String[] args) {
// 实际的对象
PersonTest p1 = new PersonTest();
p1.weight = 50;
p1.height = 172;
System.out.println("实际的对象的输出结果:");
p1.show();
// 匿名对象
System.out.println("匿名对象的输出结果:");
// 输出的值为默认值
new PersonTest().show();
// 修改体重之后,在新建一个匿名对象,结果不会被存储
System.out.println("修改后,匿名对象的输出结果:");
new PersonTest().weight = 48;
new PersonTest().show();
}
}
// 建立测试类
class PersonTest{
// 成员变量,属性
int weight;
int height;
// 成员方法,显示数据
public void show() {
System.out.println("weight = " + weight + "\t height = " + height);
}
}2.方法重载:两同一不同:类名和方法名相同,形参列表不同
java默认的类中,很多有重载的方法:
举例:
package start;
public class YuFa {
public static void main(String[] args) {
// 方法重载,两同一不同:类名和方法名相同,形参列表不同
PersonTest p1 = new PersonTest();
p1.show(30);
p1.show(30.0);
p1.show(true);
p1.show("hello");
}
}
// 建立测试类
class PersonTest{
// 属性
int height;
// 成员方法,显示数据
public void show(int weight) {
System.out.println("int weight = " + weight );
}
public void show(double weight) {
System.out.println("double weight = " + weight );
}
public void show(boolean weight) {
System.out.println("boolean weight = " + weight );
}
public void show(String weight) {
System.out.println("String weight = " + weight );
}
} 3.可变个数的形参
//JDK 5.0以前:采用数组形参来定义方法,传入多个同一类型变量,实例代码:
public static void test(int a ,String[] books);
//JDK5.0:采用可变个数形参来定义方法,传入多个同一类型变量,实例代码:
public static void test(int a ,String…books);
有关规范:
实例代码:
package start;
public class YuFa {
public static void main(String[] args) {
// 可变个数的形参
PersonTest p1 = new PersonTest();
double[] d = new double[] {20.0,30.0,40.0};
p1.show(20,30,40);
p1.show(d);
}
}
// 建立测试类
class PersonTest{
// 属性
int height;
// 成员方法,显示数据
// 可变个数的形参,可变个数的形参,weight相当于是一个数组,JDK5.0开始使用
public void show(int ...weight) {
for(int i = 0;i < weight.length;i++) {
System.out.println("weight " + (i + 1) + " = " + weight[i] );
}
}
// 可变个数的形参,可变个数的形参,weight数组,JDK5.0之前的版本使用
public void show(double[] weight) {
for(int i = 0;i < weight.length;i++) {
System.out.println("weight " + (i + 1) + " = " + weight[i] );
}
}
}4.值传递机制
1)基本数据类型,赋值时是在栈中新建了一个空间;此时主函数和新建函数都产生一个变量。
package start;
public class YuFa {
// 成员方法一:主函数
public static void main(String[] args) {
// 值传递
int weight = 50;
System.out.println("主函数中,调用change函数前 weight = " + weight);
change(weight);
System.out.println("主函数中,调用change函数后 weight = " + weight);
}
// 成员方法二:change函数
public static void change(int weight) {
System.out.println("change函数中,改变前 weight = " + weight);
weight = 30;
System.out.println("change函数中,改变前 weight = " + weight);
}
}输出结果截图:
现象的解释:
2)引用数据类型的参数传递
package start;
public class YuFa {
// 实例中,p和p2对象指向同一块地址
// 成员方法一:主函数
public static void main(String[] args) {
Person p = new Person();
p.x = 50;
System.out.println("主函数中,调用change函数前 p.x= " + p.x);
change(p);
System.out.println("主函数中,调用change函数后p.x= " + p.x);
}
// 成员方法二:change函数
public static void change(Person p2) {
System.out.println("change函数中,改变前 p2.x = " + p2.x);
p2.x = 30;
System.out.println("change函数中,改变前 p2.x = " + p2.x);
}
}
// 创建类,作为引用数据类型
class Person{
int x;
}内存解析情况如下:
3)方法的参数传递——基本数据类型
内存情况如下,值不变:
4)方法的参数传递——引用数据类型
内存情况如下,值改变:
5)例题:
5.将对象作为参数传递给方法
题目:
代码:
package start;
// 测试类
public class YuFa {
public static void main(String[] args) {
PassObject p = new PassObject();
Circle c = new Circle();
p.printAreas(c, 5);
}
}
// 创建类,作为引用数据类型
class Circle{
// 成员属性
double radius;
// 成员方法
public double findArea(double d) {
radius = d;
return Math.PI * radius * radius;
}
}
class PassObject{
// 成员方法,打印面积
public void printAreas(Circle c, int time) {
int i = 1;
System.out.println("Radius" + "\t" + "Area");
for(i = 1;i <= time;i++) {
System.out.print(i + "\t" + c.findArea(i));
System.out.println(" ");
}
System.out.println("now radius is:" + i);
}
}