构造方法
在创建的同时,明确属性值(在出生时,new 和姓名同时创建)
格式: 注意:构造方法名 就是 类名
修饰符 构造方法名 (参数列表){ }
标识符:
体现:
构造没有返回值类型,它是构建对象,创建完对象,方法结束
构造名称必须是类名一致
构造方法的注意事项:
如果我们没有给出构造方法,系统将自动提供一个无参构造方法
如果给出构造方法,系统不再提供默认的无参构造方法
给成员变量赋值 2个方法
setXxx()方法-:单纯修改属性值
构造方法:给对象中属性进行初始化,若修改初始化值则相当于重新new了一个对象而将原对象变成了垃圾
构造方法调用
1 package com.oracle.day01; 2 public class Person { 3 private String name; 4 private int age; 5 //写构造方法 构造方法必须是类名 6 public Person(String name,int age){ 7 //System.out.println("Person构造方法"); 8 this.name=name;//this 可以解决成员变量和局部变量同名 this代表本类 9 this.age=age; 10 } 11 //手动补一个空参构造 12 public Person(){ 13 } 14 public String getName() { 15 return name; 16 } 17 public void setName(String name) { 18 this.name = name; 19 } 20 public int getAge() { 21 return age; 22 } 23 public void setAge(int age) { 24 this.age = age; 25 } 26 } 27 -------------------------------------------------------------- 28 package com.oracle.day01; 29 //测试 30 //注意问题: 31 /*1.当没有写构造方法时,编译器会自动给你添加空参构造 public Person(){} 32 2.当你自己写了一个构造方式时,编译器就不会给你添加。*/ 33 public class Demo { 34 public static void main(String[] args) { 35 //构造方法被调用:在第一次new的时候调用,一个方法创建时只能调用一次 36 Person p=new Person("钢铁侠",17); 37 //用set方法改名 38 p.setName("小辣椒"); 39 //打印 40 System.out.println(p.getAge()+"..."+p.getName()); 41 } 42 }
构造方法 内存图
This 关键字
package com.oracle.day02; public class Person { private String name; private int age; //定义个空参构造 public Person(){ //构造之间调用 用this调用下面的 name,age.this只能在构造方法完成一次调用 this("张三",28); } //写一个构造 public Person(String name,int age){ this.name=name; this.age=age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } ------------------------------------------------------------- package com.oracle.day02; //测试 public class Demo { public static void main(String[] args) { Person p=new Person(); System.out.println(p.getName()+"..."+p.getAge()); } }
内存图
this 两个作用
1.区别成员变量 局部变量 2.本类中调用 构造其他方法,且别虚放在构造方法第一行,因为初识话最先执行
super 关键字
在子类中调用父类构造方法
所有构造方法,第一行有条默认的 super();
只要构造方法直接或间接调用super(),就可以完成初始化
package com.oracle.day02; public class Fu { private String name; private Fu(){ } public Fu(String name){ this.name=name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } ---------------------------------------------------------- package com.oracle.day02; //继承父类 public class Zi extends Fu{ public Zi(){ //super();//所有的构造方法,第一行有条默认语句 super();
//调用Fu类有参的构造方法
//只要构造方法直接或间接调用super(),就可以完成初始化 super("小红帽"); } } ---------------------------------------------------------- package com.oracle.day02; //测试 public class Demo01 { public static void main(String[] args) { Zi zi=new Zi(); System.out.println(zi.getName()); } }