• 面向对象(构造函数)


    构造函数

    特点:函数名与类名相同,不用定义返回值类型,没有具体的返回值,任何用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

     
  • 相关阅读:
    redis未授权访问简单总结
    CORS跨域资源共享漏洞初探
    Mysql UDF提权方法
    hacknos-player靶机渗透
    深入理解Java虚拟机-类加载连接和初始化解析
    Dnslog盲注
    让服务器使用密钥
    自动备份站点
    自动放行nginx后台访问ip
    mysql增备
  • 原文地址:https://www.cnblogs.com/mmlovejj/p/4423570.html
Copyright © 2020-2023  润新知