面向对象(构造函数)

构造函数

特点:函数名与类名相同,不用定义返回值类型,没有具体的返回值,任何用class定义的类中,都有一个默认的空参数的构造函数

作用:给对象进行初始化

注意:默认构造函数的特点,多个构造函数是以重载的形式存在的

创建的每一个对象都是一个实体,每个实体必须要进行初始化后才可以使用,实体的初始化是需要通过动作来完成的,这个动作就是构造函数,构造函数的作用:就是给对象进行初始化。

 1 package com_package2;
 2 
 3 public class Person {
 4     private int age;
 5     private String name;
 6     Person()
 7     {
 8         System.out.println("person run");
 9         
10         
11     }
12     Person(String n)
13     {
14         name =n;
15         
16     }
17     Person(String n,int a)
18     {
19         name =n;
20         age =a;
21         
22     }
23     public void speak()//1这里为什么没有static而有的地方有呢?
24     {
25         System.out.println("name="+name+" "+"age="+age);
26         
27     }
28 }
 1 package com_package2;
 2 
 3 public class PersonDemo {
 4     public static void main(String[]args)
 5     {
 6         Person p = new Person();
 7         //p.speak();
 8         
 9     }
10 
11 }

person run

也许会发现为什么直接就能出结果?

构造函数的作用:给对象进行初始化。

构造函数的特点:任何用class定义的类中,都有一个默认的空参数的构造函数用于给该类的对象进行初始化用,但是如果该类中制定了具体的构造函数,那么默认的构造函数就没有作用了。

构造函数和一般函数的不同:书写格式的不同,运行的不同,构造函数实在对象以创建就被调用了,而且只执行一次。一般函数实在需要时在被调用。这也就解决了上面问的那个问题。

例如:

 1 package com_package2;
 2 
 3 public class PersonDemo {
 4     public static void main(String[]args)
 5     {
 6         Person p = new Person();//对象一杯创建就被调用
 7         p.speak();//一般方法需要时才被调用
 8         Person p1 = new Person("hejinjin");//对象只能创建一次,再用需要重新命名
 9         p1.speak();
10         Person p2 = new Person("hejinjin",23);//多个构造方法在一起用重载的方法在一起
11         p2.speak();
12     }
13 
14 }

name=null age=0
name=hejinjin age=0
name=hejinjin age=23

会根据创建对象后面的参数来自动选择前面定义的构造函数。另外:

1 Person()
2     {
3         System.out.println("Person person");
4         //return;构造函数里面是有返回语句的,用于结束构造函数的初始化动作。
5         
6     }

关于的函数带static有的不带static的解释:

有的带,只因为它可以直接备注函数调用,就如这个样子:

 1 package com_package2;
 2 
 3 public class PersonDemo {
 4     public static void main(String[]args)
 5     {
 6         Person p = new Person();//对象一杯创建就被调用
 7         p.speak();//一般方法需要时才被调用
 8         Person p1 = new Person("hejinjin");//对象只能创建一次,再用需要重新命名
 9         p1.speak();
10         Person p2 = new Person("hejinjin",23);//多个构造方法在一起用重载的方法在一起
11         p2.speak();
12         show();
13     }
14     public static void show()
15     {
16          
17         
18     }
19 
20 }

而有的不是直接被主函数调用:

public void speak()
    {
        
        System.out.println("name="+name+" "+"age="+age);
    }
p2.speak();

构造函数什么时候用:当描述事物是,该事物一存在就具备某种属性和行为,那么就将这些内容定义在构造函数中。

语句解释

Person p = new Person("lisi");

new:用于在堆内存中开辟空间的关键字,用于创建对象

Person:明确要创建Person类的对象

(“lisi”):创建Person类的对象,需要哪个构造函数进行初始化,这里需要一个字符串参数的构造函数。

 关于改变属性的值:

首先,构造函数存在的类里面创建其私有属性的get set方法,然后在主方法存在的类里面改动

package com_package2;

public class Person {
    private int age;
    private String name;
    Person()
    {
        System.out.println("Person person");
        //return;构造函数里面是有返回语句的,用于结束构造函数的初始化动作。
        
    }
    Person(String n,int a)
    {
        name =n;
        age = a;
        
    }
    Person(String n)
    {
        
        name =n;
    
    }
    
    public int getAge() {
        return age;
    }
    public void setAge(int age) {//Age的get方法,注意get方法的书写形式get属性(),属性的第一个字母大写
        this.age = age;
    }
    public String getName() {//同上
        return name;
    }
    public void setName(String name) {//同上
        this.name = name;
    }
    public void speak()
    {
        
        System.out.println("name="+name+" "+"age="+age);
    }
}
package com_package2;

public class PersonDemo {
    public static void main(String[]args)
    {
        Person p = new Person();//对象一杯创建就被调用
        
        p.speak();//一般方法需要时才被调用
        Person p1 = new Person("hejinjin");//对象只能创建一次,再用需要重新命名
        p1.setName("lisi");
        p1.speak();
        Person p2 = new Person("hejinjin",23);//多个构造方法在一起用重载的方法在一起
        p2.setName("lisi");//改名改多少次都没问题,不断的覆盖
        p2.setName("weige");//同上
        p2.setAge(80);
        p2.speak();
        
        
    //    show();
    }
    ///public static void show()
    //{
         
        
    //}

}

Person person
name=null age=0
name=lisi age=0
name=weige age=80

 
原文地址:https://www.cnblogs.com/mmlovejj/p/4423570.html