面向对象(匿名类、方法重载、可变个数的形参、值传递机制)

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);
    }
}
全部评论

相关推荐

专心打鱼:互联网搬运工,贴子都要偷
点赞 评论 收藏
分享
废铁汽车人:秋招真是牛鬼蛇神齐聚一堂
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务