Java构造器
定义声明:
构造方法的名字必须和所在类的名字一致,没有返回值,但不能声明void,访问权限可以为任意,但是一般情况下使用public方法权限,构造方法中的参数可以根据需要自行定义,参数的不同的构造方法构成重载;
package com.Test;
public class test {
class Fu {
public Fu(){} //无参的公有构造方法
public Fu(int i){} //参数类型为int的公有构造方法
}
public class Demo extends Fu {
public Demo(){} //无参的公有构造方法
public Demo(int i){} //参数类型为int的公有构造方法
public Demo(int i,double d){} //参数类型为int和double的公有构造方法
}
}
构造方法的使用:
java中构造方法的使用有两个地方,一个是跟在关键字new后面,类名加上一个小括号(),小括号内根据实际加上实参,另外一个是跟在关键字super或this后加上一个小括号(),小括号内根据实际添加实参
Demo demo = new Demo(); //这里是调用的是一个无参的构造方法,必须声明在方法中,最好声明在主方法
//上面构造方法的参数根据实际添加实参,jvm根据构造方法的参数不同加载不同的构造方法;
//2
public Demo(){
this(2); //这里调用参数为int类型的本类的构造方法
}
//3
public Demo(){
super(1); //调用参数为int类型的父类的构造方法
}
// 注意:2和3中this或super调用构造方法只能出现在构造方法中,而且必须出现在第一行,所以一个构造方法中第一行只能为this或super调用构造方法,两者不能同时调用构造方法出现,而且注意this或super调用构造方法时,要留构造方法出口,意思就是最后调用的构造方法中没有再调用别的构造方法!
构造方法的作用:
1.为了初始化成员属性,而不是初始化对象,初始化对象是通过new关键字实现的
2.通过new调用构造方法初始化对象,编译时根据参数签名来检查构造函数,称为静态联编和编译多态
(参数签名:参数的类型,参数个数和参数顺序)
3.创建子类对象会调用父类构造方法但不会创建父类对象,只是调用父类构造方法初始化父类成员属性;
学习实例和实现
package com.oop.Demo02;
public class Person {
//一个类即使什么都不写,它也会存在一个方法,这个时候称构造器为隐式构造器
String name;
/*
构造器的作用:
1.使用new关键字,本质是在调用构造器
2.实例化初始值
IDEA中快捷键:alt+insert键,快速创建构造器
*/
//显式定义构造器
//无参构造---实例化初始值
// public Person(){
// this.name = "cdoudou";
// }
//有参构造:一旦定义了有参构造,无参就必须显式定义
// public Person(String name){
// this.name = name;
// }
//快捷键定义的构造器
// public Person() {
// }
//
// public Person(String name) {
// this.name = name;
// }
}
/*
public static void main(String[] args) {
//实例化了一个对象
Person person = new Person();
}
构造器:
1.和类名相同
2.没有返回值
作用:
1、new本质在调用构造方法
2、初始化对象的值
注意点:
1.定义有参构造之后,如果想要使用无参构造,需要显式的定义一个无参的构造
*/
内存分析
package com.oop.Demo03;
public class Pet {
public String name;
public int age;
public void shout(){
System.out.println("叫");
}
}
/*
public static void main(String[] args) {
Pet dog = new Pet();
dog.name = "旺财";
dog.age = 5;
dog.shout();
System.out.println(dog.name);
System.out.println(dog.age);
*/
小结
1.类与对象
- 类是一个模板,对象是一个具体的实例
2.方法
- 定义和调用
3.对象的引用
- 引用类型:基本类型(8)
- 对象是通过引用来操作:栈----堆
4.属性:字段Field 成员变量
- 默认初始化:
数字:0 0.0
char:u0000
boolean:false
引用:null
修饰符 属性类型 属性名 = 属性值
5.对象的创建和使用
- 必须使用new 关键字创造对象 构造器 Person doudou = new Person();
- 对象的属性 doudou.name
- 对象的方法: doudou.sleep()
6.类:
- 静态的属性:属性
动态的行为:方法