1.this关键字1.假设类中定义了int类型成员变量age,构造方法中使用了a(age=a),这会导致可读性比较差,所以需要在一个类中统一命名代表年龄的变量,声明为年龄。这时,当成员变量和局部变量名相同时,在构造函数中就不能访问对象的其他成员了,此时在java程序中引用了this关键字。2、this关键字可以为调用方法的对象生成对应的地址,从而得到调用方法的对象的引用。当一个方法需要访问一个类的成员变量时,可以使用this引用来指明要操作的对象。3.解决成员变量和局部变量重名,我们可以使用this关键字来访问一个类的成员变量。例如:publicclassPerson1{publicStringname;//成员变量--agepublicintage;//成员变量--agepublicPerson1(Stringname,intage){this.name=name;//给name属性赋值this.age=age;//作为年龄属性赋值}//say()方法publicvoidsay(){System.out.println("你好!我是"+this.name+",今年是"+this.age+"岁。");}publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubPerson1p1=newPerson1("LiHua",20);//创建第一个对象Person1p2=newPerson1("smallname",19);//创建第一个对象secondobjectp1.say();//调用对象的方法p2.say();//调用对象的方法}}输出结果为:你好!我叫李华,今年20岁。你好!我是小明,今年19岁。上面代码中,构造方法的参数定义为(Stringname,intage),是一个局部变量。类中定义了成员变量name和age。如果在构造方法中使用name和age访问局部变量,在构造方法中使用this.name和this.age访问成员变量。4.通过this关键字调用成员方法:publicclassPerson1{publicStringname;//成员变量--agepublicintage;//成员变量--agepublicPerson1(Stringname,intage){this.name=name;//将this赋给nameattribute.age=age;//给年龄属性赋值}//print()方法publicvoidprint(){System.out.println("*************************");}//say()方法publicvoidsay(){this.print();//调用方法System.out.println("你好!我是"+this.name+",thisyear"+this.age+"year.");}publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubPerson1p1=newPerson1("李华",20);//创建第一个对象Person1p2=newPerson1("smallname",19);//创建第二个对象p1.say();//调用对象的方法p2.say();//调用对象的方法}}输出结果为:***************************你好!我叫李华,今年20岁。************************你好!我是小明,今年19岁。上面代码中通过this关键字调用了成员方法,在say()中写了一个print()方法来调用成员方法并输出。5.构造方法在对象实例化时由java虚拟机(JVM)自动调用。程序不能像调用其他方法一样调用构造方法。你可以使用这个([参数1,参数2,...,参数n])来调用其他构造函数。例如:publicclassPerson2{publicStringname;publicintage;//定义一个无参构造函数publicPerson2(){System.out.println("Noparameterconstructoriscalled....");}//定义两个有参构造函数MethodpublicPerson2(Stringname,intage){this();//调用不带参数的构造函数this.name=name;this.age=age;System.out.println("你好!我叫"+this.name+"今年"+this.age+"岁!");}publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubPerson2p=newPerson2("LiHua",19);//实例化Person2对象}}输出结果为:no-参数构造方法被称为....嗨!我叫李华,今年19岁!上面代码中,实例化Person2对象后,调用了两个带参数的构造方法。在这个方法中,无参构造方法,并打印出“Theno-argumentconstructionmethodiscalled....”,参数的值在Person2对象的实例化中传入,最后输出“Hello!我叫李华,今年19岁!”,这两个构造函数都是这么叫的。二、单例模式1、什么是单例模式单例模式是:一个类中只有一个实例,提供一个全局访问点来访问它。2、在单线程中,单例模式根据实例化对象的时机有两种经典的实现方式,分别是饿单例和懒单例。3.饿式单例定义类的静态私有变量并实例化饿式单例案例:publicclassSingleton{//自己创建一个对象privatestaticSingletonsingleton=newSingleton();//私有构造方法privateSingleton(){}//提供返回此对象的静态方法==s2);}}输出结果为:true从上面的代码中,声明一个静态私有类变量,并立即实例化,实例化一次。private修饰用在类的构造方法中,这样就不能在类外使用new来创建实例化对象。私有构造方法是为了防止外部实例化。如果想让类的外部获取类的实例对象,在public中提供getInstance()方法获取单例实例。4.懒惰式单例是懒加载,在需要使用的时候创建实例,而不是主动创建实例。懒单例案例publicclassSingleton1{//声明私有变量privatestaticSingleton1singleton1=null;//私有构造方法privateSingleton1(){}//提供一个返回该对象的静态方法publicstaticSingleton1getInstance(){//被动创建,只有真正需要的时候才去createif(singleton1==null){singleton1=newSingleton1();}returnsingleton1;}publicstaticvoidmain(String[]args){//TODO自动生成的方法stubSingleton1s1=Singleton1.getInstance();Singleton1s2=Singleton1.getInstance();System.out.println(s1==s2);}}输出结果为:true从上面的代码可以看出,单例实例是懒加载的,只有真正需要的时候才会实例化一个对象供自己使用。3.总结本文主要介绍this关键字和单例模式。this关键字可以为调用该方法的对象生成对应的地址,从而获得调用该方法的对象的引用。当一个方法需要访问一个类的成员变量时,可以使用this引用来指明要操作的对象。单例模式是一个只有一个实例的类,并提供一个全局访问点来访问它。通过hungry和lazy案例了解这种单例模式的用法。希望本文的学习对您有所帮助!
