构造方法:
概述:
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关键字的方法,就是静态方法。
静态方法不能访问非静态的变量:原因:静态方法在静态方法区,非静态变量在普通变量区,静态方法区里找不到非静态变量,所以不能访问。同理,静态方法不能访问非静态方法。
静态变量和非静态变量的区别:
概念上,所属不同:
非静态变量属于对象
静态变量属于类,类对象。
内存空间不同,存储位置不同:
非静态变量属于对象,所以存储在堆内存中,静态变量属于类,存储在方法区的静态区中。
内存时间不同,声明周期不同:
非静态变量属于周期,所以生命周期和对象相同,随着对象的创建而存在,随着对象的消失而消失。
静态变量属于类,所以生命周期和类相同,随着类的加载而存在,随着类的消失而消失。
访问方式不同:非静态变量只能通过对象来访问,静态变量可以通过类名打点来调用,也可以通过对象来调用。