java 匿名对象

380 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第18天,点击查看活动详情

匿名对象【理解】

概念

需求:

1、创建一个学生的类Student,并在Student类中定义两个属性name和age。

2、在Student类中定义一个函数demo()。

3、定义一个测试学生类的类StudentTest。

匿名对象.jpg 说明:匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。

Student:是一个类。描述的是学生这个事物

student:类所创建的对象名(实例名)

匿名对象:就是指没有名称的对象。创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。虽然是创建对象的简化写法,但是应用场景非常有限。

格式:

new 类名(参数列表);

举例:

new Scanner(System.in);
new Student();

匿名对象应用场景

匿名对象使用场景.jpg

匿名对象的局限性

匿名对象局限性.jpg

上述代码结果:

null 学习中。。。。。

出现以上问题的原因如下图所示:

注意:只要在程序中使用new关键字创建对象,那么在堆中都会有一个新的对象产生。

匿名对象局限性内存图解.jpg

注意:匿名对象通常是在对象只需要访问成员一次的情况下使用

如果对象需要多次的操作成员,就不能使用匿名对象来访问。

注意:匿名对象可以简化代码的书写,但是匿名对象一旦使用结束,这时这个对象就立刻变成垃圾。

如果对象只使用一次,这时可以采用匿名对象,如果这个对象要使用多次,必须给对象起名。

匿名对象作为参数传递(理解)

需求:

1)定义一个Person类,在这个类中定义人的名字和年龄,并定义一个说话的功能;

2)再定义一个测试Person类的类PersonTest,在PersonTest类中定义一个功能,给所有的Person类的对象下的属性name和age进行相同数据的赋值,并调用Person类中的说话的方法。

class Person
{
    String name;
    int age;
    void say()
    {
        System.out.println(name+"哇哇哇哇叫"+age);
    }
}
class PersonTest1 
{
    public static void main(String[] args) 
    {
        //创建person对象
        /*Person person =new Person();
        demo(person);
        Person person1 =new Person();
        demo(person1);
        Person person2 =new Person();
        demo(person2);
        上述程序中创建的Person对象的引用,仅仅是为了把对象传递给demo函数,
        这时也可以使用匿名对象传递对象
        */
        demo(new Person());
    }
    /*
        定义一个函数给Person类中的属性赋值,并调用Person类中的方法
    */
    public static void demo(Person p)//Person p=new Person();
    {
        p.name="baby";
        p.age=1;
        p.say();
    }
}