构造方法&静态Static

构造方法:

概述:

1.构造方法:构造函数,构造器,Constructor

2.作用:用于给对象中的成员变量赋值。

3.构造方法的格式:

修饰符  类名{

方法体

}

4.构造方法格式的说明:

 1.构造方法的方法名称,必须和类名一模一样,连大小写都一样。

2.构造方法没有返回值类型,连void也没有

3.构造方法没有return语句, 如果一定需要return语句,就写一个return

构造方法其他说明:

构造方法不需要手动调用,由JVM虚拟机在  创建对象的时候自动调用

对象本身不能调用构造方法

构造方法只能调用一次

class Demo01_构造方法 {
    public static void main(String[] args) {
        Person p = new Person();
        System.out.println(p.getName() + "..." + p.getAge());

        //Person p2 = new Person();这是创建第二个对象;同一个对象只能调用一次构造方法
        //p.Person();编译报错,构造方法不能通过对象名称手动调用
    }
}

class Person {
    private String name;
    private int age;

    public Person() {
        name = "张三疯";
        age = 123;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName(){
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }
}

构造方法的注意事项:构造方法分为有参构造方法和无参构造方法

如果类中没有手动的写构造方法,那么系统会默认提供一个构造方法(无参构造方法)。

如果类中已经手动写了构造方法,那么系统不会再默认提供构造方法了。

构造方法可以重载

class Demo02_构造方法的注意事项 {
    public static void main(String[] args) {
        Person p1 = new Person("张三疯", 123);
        System.out.println(p1.getName() + "..." + p1.getAge());

        Person p2 = new Person("李四光", 124);
        System.out.println(p2.getName() + "..." + p2.getAge());

        Person p3 = new Person();
        System.out.println(p3.getName() + "..." + p3.getAge());
    }
}

class Person {
    private String name;
    private int age;
    /*
    public Person() {
        System.out.println("自己定义的空参构造执行了!!!");
    }
    */

    public Person() {
    
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getName(){
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }
}

 构造方法和set方法的比较:

1.构造方法和set方法都是用来给成员变量赋值。

区别:构造方法是在创建对象的同时,由jvm自动调用执行,用于给属性赋值,只能执行一次。

Set方法是在创建对象之后,由对象手动调用,用于给属性修改值,可以调用多次。

静态:

静态的作用就是将程序中多次要用的变量用static修饰,这样这个变量就成了一个常量,以后要使用这个变量时,直接调用被staitc修饰的那个就好了,这样子节省了内存空间,而且便于修改,维护。

静态的加载时机:随着类被加载到内存中去,就直接在静态区开辟了存储静态变量的内存空间

静态变量优先于对象而存在。

静态变量被所有该类对象所共享。

静态变量可以被类名直接打点调用,不需要创建对象 

静态方法:在方法的声明上,加上static关键字的方法,就是静态方法。

静态方法不能访问非静态的变量:原因:静态方法在静态方法区,非静态变量在普通变量区,静态方法区里找不到非静态变量,所以不能访问。同理,静态方法不能访问非静态方法。

静态变量和非静态变量的区别:

概念上,所属不同:

非静态变量属于对象

静态变量属于类,类对象。

内存空间不同,存储位置不同:

非静态变量属于对象,所以存储在堆内存中,静态变量属于类,存储在方法区的静态区中。

内存时间不同,声明周期不同:

非静态变量属于周期,所以生命周期和对象相同,随着对象的创建而存在,随着对象的消失而消失。

静态变量属于类,所以生命周期和类相同,随着类的加载而存在,随着类的消失而消失。

访问方式不同:非静态变量只能通过对象来访问,静态变量可以通过类名打点来调用,也可以通过对象来调用。

posted @ 2019-03-26 20:00  ControllerMe  阅读(2066)  评论(0编辑  收藏  举报