Java基础知识——构造器
3.7构造器
3.7.1什么是构造器?
- 构造器就是在java代码中用来产生对象的特殊方法,将该方法称之为该类的一个构造器。
3.7.2构造器的规则和使用方法
i.构造器的格式
public 类名(){
构造器内的执行语句;
}
ii.书写构造器的规则
- 构造器的方法名称和类名相同(首字母一定要大写)
- 使用new+类名,创建一个新的对象
- 该方法没有返回值
iii.构造器的注意事项
- 默认在任意一个类中,如果不存在任何构造器,那么java会填充一个空参数的构造器
public class CatTest{
public static void main(String[] args){
CatTest cc=new CatTest();
//默认存在一个空参数构造器,这个构造器一般可以省略不写,可以直接调用
public CatTest(){
}
}
}
- 对于带参数构造器来说,如果一个类中存在带参构造器,那么默认存在无参构造器如果不显示编写,则不存在。如果显示编写,则仍然存在,我们可以在代码中看到
- 构造器也存在重载。
public class Children{
String name;
int age;
int weight;
char gender;
//默认的空参数构造器
public Children(){
}
//带参数的构造器
public Children(String yName){
name=yName;
}
//普通方法
public void cry(){
System.out.println("男人哭吧哭吧不是罪");
}
}
public class ChildrenTest{
public static void main(String[] args){
//创建对象
Children ch1=new Children();
System.out.println(ch1.name);
Children ch2=new Children("小邬");
System.out.println(ch2.name);
Children ch3=newChildren("小李",1,8,'男');
System.out.println(ch3.name+","+ch3.weight);
}
}
iiii.内存分析
3.8this关键词
3.8.1this关键词的作用
- 在类的方法定义中使用this关键词代表使用该方法的对象的引用(也可以把this看成一个变量,它的值是当前对象的引用)
- 使用this可以处理方法中成员变量和参数列表中变量重名的问题
3.8.2this关键词用法分类
- this关键词一共两种用法:
this.
和this()
i。this.用法
- 代表的是当前对象的引用(谁在调用谁就是当前对象)
- 使用this.可以处理方法中成员变量和参数列表中变量重名的问题
- 有些地方的this.可以省略,除了用于区分区分成员变量和参数列表重名的情况
public class Dog{
String name;
int age;
public Dog(){
//同一个类中方法中调用普通方法,可以省略this.,改成run();
this.run();
}
public Dog(String name){
//name=name;这样的写法是错误的,JVM不会区分,造成赋值失败,这个this.不能省略
this.name=name;
this.run();//此处this.可以省略
}
public void run(){
System.out.println(this.name+"正在run");
}
}
public class DogTest{
public static void main(String[] args){
//1:创建小狗对象
Dog d=new Dog();
//调用了空参数的构造器
/2:创建对象调用带擦构造器
Dog dog=new Dog("小李");
}
}
ii.this()用法
- 用来实现构造器之间的互相调用
public class Dog{
String name;
int age;
public Dog(){
//通过this()调用了带一个参数的构造器,并传入被调参数构造器相应参数列表的值
this("101");
}
public Dog(String name){
this.name=name;
}
public Dog(String name,int age){
//先执行构造函数中this()的调用构造函数的初始化
this(name);
this.age=age;
System.out.println("名字为:"+name+"年龄"+age);
}
public void run(){
System.out.println(this.name+"正在run");
//this();编译报错
}
}
public class DogTest{
public static void main(String[] args){
//1:创建小狗对象
Dog d=new Dog();
//调用了空参数的构造器
/2:创建对象调用带擦构造器
Dog dog=new Dog("小李");
Dog do=new Dog("小红",23);
}
}
this()使用注意事项:
-
this()用来实现构造器之间的互相调用
-
构造函数之间的调用只能通过this()语句来完成
-
其它不同方法中无法使用this(),this()只能在构造器中使用
-
this()在构造器中实现构造器的互相调用时,必须要保证在构造器的第一行语句。
-
调用构造器要先执行,如果构造器方法中当中还有初始化,那就去执行更细节的初始化