「java输出this」JAVA输出数组

博主:adminadmin 2022-12-31 02:48:07 1206

今天给各位分享java输出this的知识,其中也会对JAVA输出数组进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java中“this”的用法是什么

使用this调用本类中的属性\x0d\x0a\x0d\x0a现在观察以下代码,看会有那些问题:\x0d\x0a\x0d\x0apublic void setName(String name){\x0d\x0a\x0d\x0aname = name ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a这里面的两个name都是setName方法中的name参数。\x0d\x0a\x0d\x0a此时,特别希望可以通过一个指定的标识明确的表示要把传入的name参数的值给类中的属性,所以此时就需要使用this关键字,使用this.name就表示类中的属性。\x0d\x0a\x0d\x0aclass Person{\x0d\x0a\x0d\x0aprivate String name ;\x0d\x0a\x0d\x0aprivate int age ;\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0athis.setName(name) ;\x0d\x0a\x0d\x0athis.setAge(age) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setName(String name){\x0d\x0a\x0d\x0athis.name = name ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setAge(int age){\x0d\x0a\x0d\x0athis.age = age ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic String getName(){\x0d\x0a\x0d\x0areturn this.name ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic int getAge(){\x0d\x0a\x0d\x0areturn this.age ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void print(){\x0d\x0a\x0d\x0aSystem.out.println("姓名:"+this.name+",年龄:"+this.age) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0apublic class Demo35{\x0d\x0a\x0d\x0apublic static void main(String args[]){\x0d\x0a\x0d\x0aPerson p1 = new Person("张三",30) ;\x0d\x0a\x0d\x0ap1.print() ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0a使用this还可以从一个构造方法中调用其他构造方法。\x0d\x0a\x0d\x0a例如:有以下一个要求,一个类中存在了三个构造方法,但是要求,不管怎么调用,最终都要求可以在对象实例化的时候打印一个“新的对象产生了”的提示。\x0d\x0a\x0d\x0aclass Person{\x0d\x0a\x0d\x0aprivate String name ;\x0d\x0a\x0d\x0aprivate int age ;\x0d\x0a\x0d\x0apublic Person(){\x0d\x0a\x0d\x0aSystem.out.println("新的对象产生了。。。") ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name){\x0d\x0a\x0d\x0aSystem.out.println("新的对象产生了。。。") ;\x0d\x0a\x0d\x0athis.setName(name) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0aSystem.out.println("新的对象产生了。。。") ;\x0d\x0a\x0d\x0athis.setName(name) ;\x0d\x0a\x0d\x0athis.setAge(age) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setName(String name){\x0d\x0a\x0d\x0athis.name = name ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setAge(int age){\x0d\x0a\x0d\x0athis.age = age ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic String getName(){\x0d\x0a\x0d\x0areturn this.name ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic int getAge(){\x0d\x0a\x0d\x0areturn this.age ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void print(){\x0d\x0a\x0d\x0aSystem.out.println("姓名:"+this.name+",年龄:"+this.age) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0a以上代码虽然可以实现功能,但是同样的代码出现了三次,而且后面的两次出现纯属多余吧。用this()的形式可以调用类中的无参构造方法。\x0d\x0a\x0d\x0aclass Person{\x0d\x0a\x0d\x0aprivate String name ;\x0d\x0a\x0d\x0aprivate int age ;\x0d\x0a\x0d\x0apublic Person(){\x0d\x0a\x0d\x0aSystem.out.println("新的对象产生了。。。") ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name){\x0d\x0a\x0d\x0a// 最终都是调用无参构造方法\x0d\x0a\x0d\x0athis() ;\x0d\x0a\x0d\x0athis.setName(name) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0athis(name) ;\x0d\x0a\x0d\x0athis.setAge(age) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setName(String name){\x0d\x0a\x0d\x0athis.name = name ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void setAge(int age){\x0d\x0a\x0d\x0athis.age = age ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic String getName(){\x0d\x0a\x0d\x0areturn this.name ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic int getAge(){\x0d\x0a\x0d\x0areturn this.age ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void print(){\x0d\x0a\x0d\x0aSystem.out.println("姓名:"+this.name+",年龄:"+this.age) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0apublic class Demo36{\x0d\x0a\x0d\x0apublic static void main(String args[]){\x0d\x0a\x0d\x0aPerson p1 = new Person("张三",30) ;\x0d\x0a\x0d\x0ap1.print() ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0a注意点1:\x0d\x0a\x0d\x0a如果使用了this调用其他构造方法,则此语句,必须写在构造方法的首行。\x0d\x0a\x0d\x0apublic void fun(){\x0d\x0a\x0d\x0a// 发现在调用fun方法的时候,必须先设置name的值\x0d\x0a\x0d\x0athis("zhangsan") ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0athis.setAge(age) ;\x0d\x0a\x0d\x0athis(name) ; //-- 必须放在首行\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a注意点2:\x0d\x0a\x0d\x0a使用this可以调用本类中的其他构造方法,但是至少留一个构造方法,作为程序的出口。\x0d\x0a\x0d\x0apublic Person(){\x0d\x0a\x0d\x0athis("a",10) ;\x0d\x0a\x0d\x0aSystem.out.println("新的对象产生了。。。") ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name){\x0d\x0a\x0d\x0a// 最终都是调用无参构造方法\x0d\x0a\x0d\x0athis() ;\x0d\x0a\x0d\x0athis.setName(name) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic Person(String name,int age){\x0d\x0a\x0d\x0athis(name) ; //-- 必须放在首行\x0d\x0a\x0d\x0athis.setAge(age) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0athis最重要的特性 —— 表示当前对象\x0d\x0a\x0d\x0a当前对象在程序中用以下形式体现:\x0d\x0a\x0d\x0a· 当前操作此方法的对象,就称为当前对象。\x0d\x0a\x0d\x0aclass Demo{\x0d\x0a\x0d\x0apublic void print(){\x0d\x0a\x0d\x0aSystem.out.println(this) ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0apublic class Demo38{\x0d\x0a\x0d\x0apublic static void main(String args[]){\x0d\x0a\x0d\x0aDemo d1 = new Demo() ;\x0d\x0a\x0d\x0aSystem.out.println(d1) ;\x0d\x0a\x0d\x0ad1.print() ;\x0d\x0a\x0d\x0aSystem.out.println("---------------------") ;\x0d\x0a\x0d\x0aDemo d2 = new Demo() ;\x0d\x0a\x0d\x0aSystem.out.println(d2) ;\x0d\x0a\x0d\x0ad2.print() ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0a回顾:\x0d\x0a\x0d\x0a之前讲解的两个对象比较的程序。\x0d\x0a\x0d\x0a// 在类的内部增加一个比较的方法\x0d\x0a\x0d\x0apublic boolean compare(Person p){\x0d\x0a\x0d\x0aPerson p1 = this ;\x0d\x0a\x0d\x0aPerson p2 = p ;\x0d\x0a\x0d\x0aif(p1.name.equals(p2.name)p1.age==p2.age){\x0d\x0a\x0d\x0areturn true ;\x0d\x0a\x0d\x0a}else{\x0d\x0a\x0d\x0areturn false ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a分析程序的运行过程:\x0d\x0a\x0d\x0aclass A{\x0d\x0a\x0d\x0aprivate B b = null ;\x0d\x0a\x0d\x0apublic A(){\x0d\x0a\x0d\x0athis.b = new B(this) ;\x0d\x0a\x0d\x0athis.b.fun() ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void hello(){\x0d\x0a\x0d\x0aSystem.out.println("Hello World!!!") ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0aclass B{\x0d\x0a\x0d\x0aprivate A a = null ;\x0d\x0a\x0d\x0apublic B(A a){\x0d\x0a\x0d\x0athis.a = a ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0apublic void fun(){\x0d\x0a\x0d\x0athis.a.hello() ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};\x0d\x0a\x0d\x0apublic class OODemo40{\x0d\x0a\x0d\x0apublic static void main(String args[]){\x0d\x0a\x0d\x0aA aa = new A() ;\x0d\x0a\x0d\x0a}\x0d\x0a\x0d\x0a};

java中的this问题?

我理解的是,this代表这个类本身,对于F.java这个类而言,相当于在说“我”,方法b中调用了this.a(),可以理解为方法b调用了“我的a方法”。

对于这个例子而言,其实加不加this,结果都一样,但对于这个例子就有用了:

假设有一个类叫G.java,其拥有一个和F.java一模一样的方法a:

public class G {

public void a(Object args1) {

}

}

并且此时,F继承自G:

public class F extends G{

public void a(Object args1) {

}

public void b(String args2) {

this.a(args2);

super.a(args2);

}

此时注意我上面写的b方法,b方法中既要调用F自己的a方法,又要调用父类G中的a方法,为防止出现歧义,我们在调用F的a方法时,就使用this作为修饰;调用G的a方法时,就使用super作为修饰,这样就一目了然不是吗。

然后如果不加this,比如b方法定义为:

public void b(String args2) {

a(args2);

}

其实默认就是调用了F自身的a方法,可以理解为不加this时,java会默认给它加上this。

另外说一下你的例子如何输出一个东西,你需要在你的a方法里加上比如:

public void a(Object args1) {

System.out.println(args1.toString());

}

在你的main函数中不要传入null,否则将引起空指针异常,你可以传入比如:

public static void mian(String[] args) {

new F().b("哈哈哈");

}

这样运行时最终会在控制台输出“哈哈哈”

java中关于this

this表示当前对象,你使用System.out.println(this)就是表示打印当前对象,而输出的时候,因为this的类型并不是字符串,因此打印时会调用默认的toString方法。你重写了toString方法,自然打印出来的就是你重写的toString方法里面的语句:

return getName();

也就是说,最终调用了getName()方法,那么System.out.println(this)实际运行时等同于:System.out.println(getName());

java中this的用法?

Java关键字this只能用于方法方法体内。当一个对象创建后,Java虚拟机(JVM)就会给这个对象分配一个引用自身的指针,这个指针的名字就是 this。因此,this只能在类中的非静态方法中使用,静态方法和静态的代码块中绝对不能出现this,这在“Java关键字static、final 使用总结”一文中给出了明确解释。并且this只和特定的对象关联,而不和类关联,同一个类的不同对象有不同的this。

package test;

public class ThisTest {

private int i=0;

//第一个构造器:有一个int型形参

ThisTest(int i){

this.i=i+1;//此时this表示引用成员变量i,而非函数参数i

System.out.println("Int constructor i——this.i: "+i+"——"+this.i);

System.out.println("i-1:"+(i-1)+"this.i+1:"+(this.i+1));

//从两个输出结果充分证明了i和this.i是不一样的!

}

// 第二个构造器:有一个String型形参

ThisTest(String s){

System.out.println("String constructor: "+s);

}

// 第三个构造器:有一个int型形参和一个String型形参

ThisTest(int i,String s){

this(s);//this调用第二个构造器

//this(i);

this.i=i++;//this以引用该类的成员变量

System.out.println("Int constructor: "+i+"/n"+"String constructor: "+s);

}

public ThisTest increment(){

this.i++;

return this;//返回的是当前的对象,该对象属于(ThisTest)

}

public static void main(String[] args){

ThisTest tt0=new ThisTest(10);

ThisTest tt1=new ThisTest("ok");

ThisTest tt2=new ThisTest(20,"ok again!");

System.out.println(tt0.increment().increment().increment().i);

//tt0.increment()返回一个在tt0基础上i++的ThisTest对象,

//接着又返回在上面返回的对象基础上i++的ThisTest对象!

}

}

/*

细节问题注释已经写的比较清楚了,这里不在赘述,只是总结一下,其实this主要要三种用法:

1、表示对当前对象的引用!

2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分!其实这是第一种用法的特例,比较常用,所以那出来强调一下。

3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。但是这里必须非常注意:只能引用一个构造方法且必须位于开始!

还有就是注意:this不能用在static方法中!所以甚至有人给static方法的定义就是:没有this的方法!虽然夸张,但是却充分说明this不能在static方法中使用!

说明在什么情况下需要用到this:

第一、通过this调用另一个构造方法,用发是this(参数列表),这个仅仅在类的构造方法中,别的地方不能这么用。

第二、函数参数或者函数中的局部变量和成员变量同名的情况下,成员变量被屏蔽,此时要访问成员变量则需要用“this.成员变量名”的方式来引用成员变量。当然,在没有同名的情况下,可以直接用成员变量的名字,而不用this,用了也不为错,呵呵。

第三、在函数中,需要引用该函所属类的当前对象时候,直接用this。

其实这些用法总结都是从对“this是指向对象本身的一个指针”这句话的更深入的理解而来的,死记不然容易忘记而且容易搞错,要理解!

*/

java中this和super的用法怎么用?

在Java中,this通常指当前对象,super则指父类的。当你想要引用当前对象的某种东西,比如当前对象的某个方法,或当前对象的某个成员,你便可以利用this来实现这个目的,当然,this的另一个用途是调用当前对象的另一个构造函数,这些马上就要讨论。如果你想引用父类的某种东西,则非super莫属。由于this与super有如此相似的一些特性和与生俱来的某种关系,所以我们在这一块儿来讨论,希望能帮助你区分和掌握它们两个。\x0d\x0a在一般方法中\x0d\x0a最普遍的情况就是,在你的方法中的某个形参名与当前对象的某个成员有相同的名字,这时为了不至于混淆,你便需要明确使用this关键字来指明你要使用某个成员,使用方法是“this.成员名”,而不带this的那个便是形参。另外,还可以用“this.方法名”来引用当前对象的某个方法,但这时this就不是必须的了,你可以直接用方法名来访问那个方法,编译器会知道你要调用的是那一个。下面的代码演示了上面的用法:\x0d\x0apublic class DemoThis{ \x0d\x0aprivate String name; \x0d\x0aprivate int age; \x0d\x0aDemoThis(String name,int age){\x0d\x0asetName(name); \x0d\x0a//你可以加上this来调用方法,像这样:this.setName(name);但这并不是必须的\x0d\x0asetAge(age);\x0d\x0athis.print(); br } \x0d\x0apublic void setName(String name){\x0d\x0athis.name=name;//此处必须指明你要引用成员变量 \x0d\x0a} \x0d\x0apublic void etAge(int age){  \x0d\x0athis.age=age; \x0d\x0a} \x0d\x0apublic void print(){\x0d\x0aSystem.out.println("Name="+name+" ge="+age);\x0d\x0a//在此行中并不需要用this,因为没有会导致混淆的东西 \x0d\x0a} \x0d\x0apublic static void main(String[] args){\x0d\x0aDemoThis dt=new DemoThis("Kevin","22");\x0d\x0a这段代码很简单,不用解释你也应该能看明白。在构造函数中你看到用this.print(),你完全可以用print()来代替它,两者效果一样。下面我们修改这个程序,来演示super的用法。\x0d\x0aclass Person{ \x0d\x0apublic int c; \x0d\x0aprivate String name; \x0d\x0aprivate int age; \x0d\x0aprotected void setName(String name){\x0d\x0athis.name=name; \x0d\x0a} \x0d\x0aprotected void setAge(int age){  \x0d\x0athis.age=age;\x0d\x0a } \x0d\x0aprotected void print(){\x0d\x0aSystem.out.println("Name="+name+" Age="+age); \x0d\x0a}\x0d\x0a}\x0d\x0apublic class DemoSuper extends Person{ \x0d\x0apublic void print(){\x0d\x0aSystem.out.println("DemoSuper:");  \x0d\x0asuper.print(); \x0d\x0a} \x0d\x0apublic static void main(String[] args){  \x0d\x0aDemoSuper ds=new DemoSuper();  \x0d\x0ads.setName("kevin");  \x0d\x0ads.setAge(22);  \x0d\x0ads.print(); \x0d\x0a}\x0d\x0a}\x0d\x0a在DemoSuper中,重新定义的print方法覆写了父类的print方法,它首先做一些自己的事情,然后调用父类的那个被覆写了的方法。输出结果说明了这一点:\x0d\x0aDemoSuper:\x0d\x0aName=kevin Age=22\x0d\x0a\x0d\x0a这样的使用方法是比较常用的。另外如果父类的成员可以被子类访问,那你可以像使用this一样使用它,用“super.父类中的成员名”的方式,但常常你并不是这样来访问父类中的成员名的。\x0d\x0a在构造函数中构造函数是一种特殊的方法,在对象初始化的时候自动调用。在构造函数中,this和super也有上面说的种种使用方式,并且它还有特殊的地方,请看下面的例子:\x0d\x0aclass Person{\x0d\x0apublic static void prt(String s){\x0d\x0aSystem.out.println(s); \x0d\x0a} \x0d\x0aPerson(){  \x0d\x0aprt("A Person."); \x0d\x0a} \x0d\x0aPerson(String name){ \x0d\x0a prt("A person name is:"+name); \x0d\x0a\x0d\x0a}\x0d\x0a}\x0d\x0apublic class Chinese extends Person{\x0d\x0a Chinese(){\x0d\x0asuper(); //调用父类构造函数(1)  \x0d\x0aprt("A chinese.");//(4) \x0d\x0a} \x0d\x0aChinese(String name){\x0d\x0asuper(name);//调用父类具有相同形参的构造函数(2)\x0d\x0aprt("his name is:"+name); \x0d\x0a} \x0d\x0aChinese(String name,int age){\x0d\x0athis(name);//调用当前具有相同形参的构造函数(3)  \x0d\x0aprt("his age is:"+age); \x0d\x0a} \x0d\x0apublic static void main(String[] args){  \x0d\x0aChinese cn=new Chinese();\x0d\x0acn=new Chinese("kevin");  \x0d\x0acn=new Chinese("kevin",22); \x0d\x0a}\x0d\x0a}\x0d\x0a在这段程序中,this和super不再是像以前那样用“.”连接一个方法或成员,而是直接在其后跟上适当的参数,因此它的意义也就有了变化。super后加参数的是用来调用父类中具有相同形式的构造函数,如1和2处。this后加参数则调用的是当前具有相同参数的构造函数,如3处。当然,在Chinese的各个重载构造函数中,this和super在一般方法中的各种用法也仍可使用,比如4处,你可以将它替换为“this.prt”(因为它继承了父类中的那个方法)或者是“super.prt”(因为它是父类中的方法且可被子类访问),它照样可以正确运行。

java输出this的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于JAVA输出数组、java输出this的信息别忘了在本站进行查找喔。