-
this调用构造方法
2020-01-26 19:00:37构造方法之间的调用,可以通过this关键字来完成。 1. 构造方法调用格式: this(参数列表); 2. 构造方法的调用 class Person { // Person的成员属性 private int age; private String nam...在之前学习方法之间调用时,可以通过方法名进行调用。可是针对构造方法,无法通过构造方法名来相互调用。
构造方法之间的调用,可以通过this关键字来完成。
1. 构造方法调用格式:
this(参数列表);
2. 构造方法的调用
class Person {
// Person的成员属性
private int age;
private String name;
// 无参数的构造方法
Person() {
}
// 给姓名初始化的构造方法
Person(String nm) {
name = nm;
}
// 给姓名和年龄初始化的构造方法
Person(String nm, int a) {
// 由于已经存在给姓名进行初始化的构造方法 name = nm;因此只需要调用即可
// 调用其他构造方法,需要通过this关键字来调用
this(nm);
// 给年龄初始化
age = a;
}
}
-
java this调用构造方法_java this关键字调用构造方法
2021-02-12 13:22:11一 this调用构造方法构造方法之间的调用,可以通过this关键字来完成。格式:this(参数列表);构造方法的调用举例:classPerson {//Person的成员属性private intage;privateString name;//无参数的构造方法Person() {}...一 this调用构造方法
构造方法之间的调用,可以通过this关键字来完成。
格式:
this(参数列表);
构造方法的调用举例:
classPerson {//Person的成员属性
private intage;privateString name;//无参数的构造方法
Person() {
}//给姓名初始化的构造方法
Person(String nm) {
name=nm;
}//给姓名和年龄初始化的构造方法
Person(String nm, inta) {//由于已经存在给姓名进行初始化的构造方法 name = nm;因此只需要调用即可//调用其他构造方法,需要通过this关键字来调用
this(nm);//给年龄初始化
age =a;
}
}
二 this的原理图解
例如:
classPerson {private intage;privateString name;
Person() {
}
Person(String nm) {
name=nm;
}
Person(String nm,inta) {this(nm);
age=a;
}
}classPersonDemo {public static voidmain(String[] args) {
Person p= new Person("张三", 23);
}
}
内存图解:
1、先执行main方法,main方法压栈,执行其中的new Person(“张三”,23);
2、堆内存中开辟空间,并为其分配内存地址0x33,,紧接着成员变量默认初始化(name=null age = 0);
3、拥有两个参数的构造方法(Person(String nm , int a))压栈,在这个构造方法中有一个隐式的this,
因为构造方法是给对象初始化的,那个对象调用到这个构造方法,this就指向堆中的那个对象。
4、由于Person(String nm , int a)构造方法中使用了this(nm);构造方法Person(String nm)就会压栈,
并将“张三”传递给nm。在Person(String nm , int a)构造方法中同样也有隐式的this,this的值同样也为
0x33,这时会执行其中name = nm,即把“张三”赋值给成员的name。当赋值结束后Person(String nm , int a)
构造方法弹栈。
5、程序继续执行构造方法(Person(String nm , int a)中的age = a;这时会将23赋值给成员属性age。
赋值结束构造方法(Person(String nm , int a)弹栈。
6、当构造方法(Person(String nm , int a)弹栈结束后,Person对象在内存中创建完成,并将0x33赋值
给main方法中的p引用变量。
注意事项:
this所在的方法,this就代表哪个对象。
调用其他构造方法的语句必须定义在构造方法的第一行,原因是初始化动作要最先执行。
三 成员变量和局部变量同名问题
以在成员变量名前面加上this.来区别成员变量和局部变量
例如:
classPerson {private intage;privateString name;//给姓名和年龄初始化的构造方法
Person(String name, intage) {//当需要访问成员变量是,只需要在成员变量前面加上this.即可
this.name =name;this.age =age;
}public voidspeak() {
System.out.println("name=" + this.name + ",age=" + this.age);
}
}classPersonDemo {public static voidmain(String[] args) {
Person p= new Person("张三", 23);
p.speak();
}
}
四 this的应用
例如:在Person类中定义功能,判断两个人是否是同龄人
classPerson {private intage;privateString name;//给姓名和年龄初始化的构造方法
Person(String name, intage) {//当需要访问成员变量是,只需要在成员变量前面加上this.即可
this.name =name;this.age =age;
}public voidspeak() {
System.out.println("name=" + this.name + ",age=" + this.age);
}//判断是否为同龄人
public booleanequalsAge(Person p) {//使用当前调用该equalsAge方法对象的age和传递进来p的age进行比较//由于无法确定具体是哪一个对象调用equalsAge方法,这里就可以使用this来代替
/** if(this.age == p.age) { return true; } return false;*/
return this.age =p.age;
}
}
-
java this调用构造方法_java中this调用构造方法与对返回类实例
2021-03-07 10:22:48java中this常用有三种功能分别是:引用成员变量,调用构造方法,返回类实例。...java中this调用构造方法使用格式如下:this([参数列表])12this([参数列表])系统将根据参数列表来决定调用哪一个构造方法。使用this...java中this常用有三种功能分别是:引用成员变量,调用构造方法,返回类实例。第一种功能比较容易理解,实际上也就是防止对象属性与方法中形参名相同。
哦对 顺便说下this的概念:this代表调用这个函数的对象。 其实和python中的self类似。
java中this调用构造方法
使用格式如下:
this([参数列表])
1
2
this([参数列表])
系统将根据参数列表来决定调用哪一个构造方法。使用this时还需注意下面几点:
用this调用构造方法时,该语句只能用在构造方法中。
this语句必须是构造方法中的第一条语句。
和new不同,this虽然可以调用构造方法,但它只是执行构造方法中的语句,并不会创建对象。
(百度网友淡忘WHY66的回答)
举个例子
package cn.rui0;
public class Testhis {
public Testhis() {
this(911);//调用有参的构造方法 必须放在第一行
System.out.println("无参");
}
public Testhis(int i) {
System.out.println(i+"\n"+"有参");
}
public static void main(String[] args) {
Testhis a=new Testhis();//创建对象的同时会调用无参的构造方法
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
packagecn.rui0;
publicclassTesthis{
publicTesthis(){
this(911);//调用有参的构造方法 必须放在第一行
System.out.println("无参");
}
publicTesthis(inti){
System.out.println(i+"\n"+"有参");
}
publicstaticvoidmain(String[]args){
Testhisa=newTesthis();//创建对象的同时会调用无参的构造方法
}
}
output:
911
有参
无参
1
2
3
4
5
911
有参
无参
好的,接下来说
java中this返回类实例
可以理解为返回类的对象,然后…要说的都在下面了..
package cn.rui0;
public class Testhis {
int i;
int num;
public Testhis() {
this(911);//必须放在第一行
num=100;
System.out.println("无参");
}
public Testhis(int i) {
this.i=i+1;
System.out.println(this.i+"\n"+"有参");
}
public Testhis aaa(){ //这里定义的返回值类型为Testhis这个类
num++;
return this;
}
public static void main(String[] args) {
Testhis a=new Testhis();//创建对象的同时会调用无参的构造方法
Testhis b=new Testhis();//创建另一个对比
System.out.println("*********************");
System.out.println(a);//输出实例化的类的对象a的地址
System.out.println(a.aaa());
/*
* 输出时运行了这个实例化的类的对象a中的方法aaa()
* 而方法aaa()中返回了当下调用这个方法的对象a(因为用的是this所以是当下调用这个方法的对象a,而不是b)
* 并且类型为Testhis,可以理解为又成为属于Testhis的一个对象,就是又有了Testhis类下的一波属性什么的
* 所以输出的地址和上面a的一样,并且可以进行像下面这样的输出
*/
System.out.println(b);//先对比一下输出地址 是不一样的对象 好了没它事了
System.out.println(a.aaa().getClass().getName ());//获取当前类名
System.out.println(a.num);//获取当前类实例化对象的属性
System.out.println(a.aaa().num);
// 这部分可能有点抽象,本辣鸡打字可能也没说太清,大家不懂可以再多去对比几次的输出的语句和output去理解
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
packagecn.rui0;
publicclassTesthis{
inti;
intnum;
publicTesthis(){
this(911);//必须放在第一行
num=100;
System.out.println("无参");
}
publicTesthis(inti){
this.i=i+1;
System.out.println(this.i+"\n"+"有参");
}
publicTesthisaaa(){//这里定义的返回值类型为Testhis这个类
num++;
returnthis;
}
publicstaticvoidmain(String[]args){
Testhisa=newTesthis();//创建对象的同时会调用无参的构造方法
Testhisb=newTesthis();//创建另一个对比
System.out.println("*********************");
System.out.println(a);//输出实例化的类的对象a的地址
System.out.println(a.aaa());
/*
* 输出时运行了这个实例化的类的对象a中的方法aaa()
* 而方法aaa()中返回了当下调用这个方法的对象a(因为用的是this所以是当下调用这个方法的对象a,而不是b)
* 并且类型为Testhis,可以理解为又成为属于Testhis的一个对象,就是又有了Testhis类下的一波属性什么的
* 所以输出的地址和上面a的一样,并且可以进行像下面这样的输出
*/
System.out.println(b);//先对比一下输出地址 是不一样的对象 好了没它事了
System.out.println(a.aaa().getClass().getName());//获取当前类名
System.out.println(a.num);//获取当前类实例化对象的属性
System.out.println(a.aaa().num);
// 这部分可能有点抽象,本辣鸡打字可能也没说太清,大家不懂可以再多去对比几次的输出的语句和output去理解
}
}
output:
912
有参
无参
912
有参
无参
*********************
cn.rui0.Testhis@7852e922
cn.rui0.Testhis@7852e922
cn.rui0.Testhis@4e25154f
cn.rui0.Testhis
102
103
1
2
3
4
5
6
7
8
9
10
11
12
13
14
912
有参
无参
912
有参
无参
*********************
cn.rui0.Testhis@7852e922
cn.rui0.Testhis@7852e922
cn.rui0.Testhis@4e25154f
cn.rui0.Testhis
102
103
注意:
被static修饰的方法没有this指针。因为被static修饰的方法是公共的,不能说属于哪个具体的对象的
感谢阅读,如果有错误非常欢迎指出~thx 🙂
-
java this调用构造方法_JAVA中super和this调用构造函数
2021-02-12 13:22:11this 和super在构造函数中只能有一个,且都必须是构造函数当中的第一行。super关键字,子类可以通过它调用父类的构造函数。1、当父类的构造函数是无参构造函数时,在子类的构造函数中,就算不写super()去调用...转载自:https://blog.csdn.net/u014042146/article/details/48374087,除了个别注释稍作更改,其他没变,代码建议跑一遍,想清楚逻辑。
this 和super在构造函数中只能有一个,且都必须是构造函数当中的第一行。
super关键字,子类可以通过它调用父类的构造函数。
1、当父类的构造函数是无参构造函数时,在子类的构造函数中,就算不写super()去调用父类的构造函数,编译器不会报错,因为编译器会默认的去调用父类的无参构造函数。
classhood {publichood(){
System.out.println("1");
}
}class hood2 extendshood{publichood2(){
System.out.println("2");
}
}public classTEST {public static voidmain(String[] args){
hood2 t= newhood2();
}
}
这段代码的运行结果是:1 2
2、当父类的构造函数是有参构造函数时,此时如果子类的构造函数中不写super()进行调用父类的构造函数,编译器会报错,此时不能省去super()
classhood {public hood(inti){
System.out.println("1"+i);
}
}class hood2 extendshood{publichood2(){super(5);
System.out.println("2");
}
}public classTEST {public static voidmain(String[] args){
hood2 t= newhood2();
}
}
这段代码的运行结果是:15 2
再来是this关键字,可以理解为它可以调用自己的其他构造函数,看如下代码:
classFather {int age; //年龄
int hight; //身体高度
publicFather() {
print();this.age=20; //这里初始化 age 的值
}public Father(intage) {this(); //调用自己的第一个构造函数,下面的两个语句不执行的
this.age =age;
print();
}public Father(int age, inthight) {this(age); //调用自己第二个构造函数 ,下面的两个语句不执行的
this.hight =hight;
print();
}public voidprint() {
System.out.println("I'am a " + age + "岁 " + hight + "尺高 tiger!");
}public static voidmain(String[] args) {new Father(22,7);
}
}
这段代码的运行结果是:
I'am a 0岁 0尺高 tiger!
I'am a 022岁 0尺高 tiger!
I'am a 22岁 7尺高 tiger!
-
Java笔记day02(this调用构造方法的注意事项)
2021-02-04 17:46:02Java笔记day02(this调用构造方法的注意事项) 一.错误的构造方法调用 package static和this关键字; /* * 1.所有类的构造方法是在对象实例化的时候被默认调用,而且是在调用普通方法之前调用 * ,所以使用this()... -
java中如何调用自身结构_java中如何用this调用构造方法?实例代码展示
2021-03-13 14:09:48今天就来为大家介绍java中如何用this调用构造方法,并且通过实际的代码来为大家展示。一起来了解一下吧。一、首先我们需要知道的是,在Java中,当给一个类创建了多个构造方法时,有时想在一个构造方法中调用另一个... -
java this调用构造方法_构造方法及方法(重载)与this关键字的使用
2021-02-28 10:06:41【代码示例02】1 classPenguin {2 //属性3 /*无参构造方法*/4 publicPenguin() {5 name = "qq";6 love = 20;7 sex = "Q仔";8 System.out.println("执行构造方法");9 }10 }三:构造方... -
用this调用构造方法
2013-12-12 08:09:17如果在程序中想用某一构造方法调用另一构造方法,可以用this来实现,具体的调用形式如下; this(); 例: public class java_ex09 { public static void main(String[] args){ new Person09("xiangwang",25);... -
java this调用构造方法_Java中this的用法及在构造器中调用构造器
2021-02-28 10:06:38package object; public class E08_StaticTest { int petalCount = 0; String s = "initial value"; //(1) E08_StaticTest(int ...原因:如果构造器的第一个语句形如this(...)这个构造器将调用同一个类的另一个构造器。 -
使用this调用构造方法
2014-07-23 20:25:10package lkp; class Person{ private String name; private int age; public Person(){ System.out.println("一个新的Person对象被实例化");... public Person(String name,int age){ ... this.name = name; -
this调用构造方法那必须放在构造方法中的第一条语句
2014-01-09 16:32:43public class ThisQuoteTest { String name; int age; String work; public ThisQuoteTest() { this("Lily",23,"teacher");... public ThisQuoteTest(String name,int age,String work) ... this.name =nam -
java中this调用构造方法后面为什么不可以放已经定义好的变量
2015-07-17 03:51:49public class D{ public static void ... this(a,b); } A(int a,int b){ this.a=a; this.b=b; } void print(){ System.out.println(a+","+b); } } 如果把A类中的ab定义为static的就可以,这又是为什么? -
构造方法调用构造方法,使用关键字this
2018-10-10 23:30:58构造方法不能直接调用构造方法,需要使用关键字this -
java this调用方法_java使用this调用构造函数的实现方法示例|chu
2021-03-07 06:44:29本文实例讲述了java使用this调用构造函数的实现方法。分享给大家供大家参考,具体如下:一 点睛如果在程序中想用某一个构造函数调用另一个构造函数,也可以用this来实现。二 实战1 代码class Person { String name; ... -
java 构造方法 调用 构造方法_Java中构造方法调用构造方法??
2021-02-12 13:19:58心有猛虎_细嗅蔷薇正确的调用方法应该是直接一个this()来调用构造方法。请看代码:classStudent{Stringid;Stringname;Stringsex;//创建构造方法publicStudent(Stringid,Stringname,StringclassNum,Stringsex,intage){... -
java使用this调用构造函数的实现方法示例
2020-08-25 17:03:45主要介绍了java使用this调用构造函数的实现方法,结合实例形式分析了java面向对象程序设计中函数调用相关操作技巧,需要的朋友可以参考下 -
java怎么调用构造方法_java怎么调用构造方法
2021-03-04 04:38:04Java调用构造方法,那就是子类调用基类(父类)的构造方法,如何调用,请看详细内容。子类中的构造方法的规则子类的构造过程中必须调用其基类的构造方法。子类可以在自己的构造方法中使用super(argument_list)调用基类... -
方法的调用 this方法 构造方法
2015-09-04 21:49:041 调用者和被调用者方法位于同一类中,调用形式如下 (this)方法名[] 在大多数情况下,关键字this可以忽略 2 调用者位于被调用方法所在类的外部 对象名.方法名或者类名.方法名 -
this调用普通方法和构造方法
2018-12-11 10:03:18this调用普通方法。 class Book{ private String title; private double price; public Book(String title,double price){ this.title=title; this.price=price; } public void setTitle(String t){ title=t; } ... -
java构造函数 this_java使用this调用构造函数的实现方法示例
2021-03-11 16:36:04本文实例讲述了java使用this调用构造函数的实现方法。分享给大家供大家参考,具体如下:一 点睛如果在程序中想用某一个构造函数调用另一个构造函数,也可以用this来实现。二 实战1 代码class Person{String name;int... -
this调用有参构造方法
2018-06-24 15:43:00在无参的构造方法中可以使用this关键字调用有参数的构造方法,this必须放在无参构造方法中的第一句。... this("this调用有参构造方法"); System.out.println("无参构造方法"); } public Demo1(String ... -
this函数java_java使用this调用构造函数的实现方法示例
2021-02-12 12:16:16本文实例讲述了java使用this调用构造函数的实现方法。分享给大家供大家参考,具体如下:一 点睛如果在程序中想用某一个构造函数调用另一个构造函数,也可以用this来实现。二 实战1 代码class Person{String name;int... -
this调用构造器
2019-03-11 20:36:42this()调用构造器作用 ** 构造器中this()表示调用形式参数相同的同一个类中的另一个构造器,这样就可以代码复用 class Father { int age; /*public Father() { System.out.println("Father的无参... -
构造方法中只能使用this(参数列表)调用构造方法,不能直接使用类名调用其他构造。
2019-06-02 02:00:34JVM不予许未实例化的情况下直接调用构造方法。必须new过才行。this是指实例化后的对象 代码: public class Person { String name; int age = 25; public Person(String name){ setName(name); } public ... -
JAVA中this关键字调用构造方法的注意事项
2019-01-17 21:11:38最近复习了一下,发现好多需要总结的地方,如有疏漏欢迎指正。 this代表当前对象,官方的描述比较难理解,总之可以理解为指向当前对象的标记指针。...3 this()或this(实参):表示调用本类的其他构造器 ① this()表... -
this关键字的作用 使用this调用其他构造方法 使用this表示当前对象
2017-11-21 11:39:44package yyy; //使用this调用本类中的成员变量和成员方法 ...可以使用this调用本类的构造方法 //没有使用this public class Testc{ public static void main(String[] args) { Person