JAVA构造方法/构造器以及this使用方式
作者:chuanzhangsss
这篇文章主要介绍了JAVA构造方法/构造器以及this使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
构造方法/构造器
基本语法
·[修饰符]方法名(形参列表){ 方法体; }
1.构造器的修饰符可以默认,也可以是public protected private
2.构造器没有返回值
3.方法名和类名字必须一样
4.参数列表和成员方法一样的规则
5.构造器的调用系统完成
基本介绍
1.方法名和类名相同
2.没有返回值
3.在创建对象时,系统会自动调用该类的构造器完成对象的初始化
4.构造器是完成对象的初始化,并不是创建对象
5.在创建对象时,系统自动的调用该类的构造方法
public class Main{ public static void main(String[] srgs){ Person p1 = new Person("king",40); Person p2 = new Person("tom"); } } //第一个构造器 class Person{ public Person(String pName;int pAge){ name = pName; Age = pAge; } //第二个构造器,只指定姓名,不指定年龄 public Person(String pName){ name = pName; } }
6.如果没有定义构造器,系统会自动生成一个默认的无参构造器(也叫默认构造器)比如Dog(){ },使用javap指令反编译看看
7.一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器,除非显示的定义一下,即:Person(){ }
public class Main{ public static void main(String[] srgs){ Dog d = new Dog(); } } class Dog{ /**如果没有定义构造器,系统会自动生成一个默认的无参构造器(也叫默认构造器)比如Dog(){ },使用javap指令反编译看看 // javap Dog.class 默认构造器 Dog(){ } */ //一旦定义了自己的构造器,默认的构造器就覆盖了,就不能再使用默认的无参构造器,除非显示的定义一下,即:Person(){ } public Dog(String pName){ ...... } }
this
public class Main{ public static void main(String[] srgs){ Dog d = new Dog("大壮",10); d1.info(); } } class Dog{ // 类 String nmae; int ang; public dog(String dName,int dAge){ name = dName; age = dAge; } //如果我们的构造器的形参,能够直接写成属性名,就更好 public void info(){//成员方法,输出属性+信息 System.out.println(name + "\t" + age + "\t"); } }
问题:
构造方法的输入参数名不是非常的好,如果能够将dName改成name就好了,
但是我们会发现按照变量的作用域原则,name的值就是null,怎么解决
引出->this
public class Main{ public static void main(String[] srgs){ Dog d = new Dog("大壮",10); d1.info(); } } class Dog{ // 类 String nmae; int ang; //构造器的name和age是局部变量不是属性 public dog(String name,int age){ //this.name就是当前对象属性nmae this.name = name; //this.age就是当前对象属性age this.age = age; } public void info(){//成员方法,输出属性+信息 System.out.println(name + "\t" + age + "\t"); } }
this的注意事项和使用细节
1.this关键字可以用来访问本类的属性、方法、构造器
2. this用于区分当前类的属性和局部变量
3. 访问成员方法的语法:this.方法名(参数列表);
4. 访问构造器语法:this(参数列表);注意只能在构造器中使用
5. this不能在类定义的外部使用,只能在类定义的方法中使用。
public class Main{ public static void main(String[] srgs){ T t = new T(); t.f2(); } } class T{ /* 注意:访问构造器语法:this(参数列表); 必须放置第一条语句 */ public T(){ //这里去访问T(String name,int age)构造器 this("jack",1000); System.out.println("T()构造器"); } public T(String name,int age){ System.out.println("T(String name,int age)构造器"); } public void f1(){ System.out.println("f1()方法.."); } public void f2(){ System.out.println("f2()方法.."); //调用本类的 f1 //第一种方法 f1(); //第二种方法 this.f1(); } }
例题
定义Person类,里面有name、age属性,并提供compareTo比较方法,用于判断·是否和另一个人相等,提供测试类Main用于测试,名字和年龄完全一样,就返回true,否则返回false
public class Main{ public static void main(String[] srgs){ Person p = new Person("mary",20); Person p = new Person("smith",30); System.out.println(p1.compareTo(p2)); } } class Person{ String name; int age; //构造器 public Person(String name,int age){ this.name = name; this.age = age; } //compareTo方法 public Boolean compareTo(Person p){ if(this.name.equals(p.name)&&this.age == p.age){ return true; }else{ return false; } } }//结果返回flase
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。