this的学习

java学习第四周

this的认知。

    1. 关键字this代表一个引用,指向正在调用该方法的当前对象(书上的定义)。

      对于修饰变量的this.

class  Student{
	 String name;//定义一个成员变量.
	public void show(){			
	System.out.println("无参");
	System.out.println("name="+name);
		}//构造方法,Student一致.
	public Student(String name){//这里形参和成员变量一样.
	this.name=name;
		}
	public static void main(String[] args){
	Student student=new Student("xingyun");
	student.show();//需要调用方法是用new的前面的student然后加上.和上面需要的方法名和对应的参数。 
	}
}

输出为:

无参
name=xingyun

变换一下(把this去掉)

class  Student{
	int number;
	 String name;//定义成员变量.
	public void show(){	
    System.out.println("number="+number);
	System.out.println("name="+name);
		}//构造方法,Student一致.
	public Student(int number ,String name){//就近原则
	number=number;
	name=name;//这里把this去掉
		}
	public static void main(String[] args){
	Student student=new Student(12,"xingyun");
	student.show();
	}
}

输出为:

number=0
name=null

这里将方法中的变量换掉,再来看this的输出变化.


class  Student{
	int number;
	 String name;//定义成员变量.
	public void show(){	
    System.out.println("number="+number);
	System.out.println("name="+name);
		}//构造方法,Student一致.
	public Student(int n1 ,String n2){//把这里的name改为了n2,形参发生了变化.
	this.number=number;
	this.name=name;
		}
	public static void main(String[] args){
	Student student=new Student(12,"xingyun");
	student.show();
	}
}

输出为

number=0
name=null

输出的是的默认值。

public Student(int n1 ,String n2){
	this.number=n1;//将这里的number和name改为上面相同的形参之后,就可以输出想要的值了。
	this.name=n2;
		}

输出为:

number=12
name=xingyun
    1. 还可以换一种方式来显示this.这里是将输出语句放在了外面那个类中,需要调用的话就用new出来的 g1.___来实现。

    2. (与上面不同的是,这里没有新定义一个输出的方法show())

      这里需要注意的是如果name和age被private修饰的话,在TestThis类里面就不能用了.

class Girl{//一个.java文件中可以有多个类(class),但是只能有一个public修饰的类
   String name;
   int age;
   public Girl(String name,int age){//这个方法名也与class类名相同。
   	this.name=name;
   	this.age=age;
   }
}
public class TestThis{//这样子会一个.java文件,并且会有2个.class文件,一个Girl.class一个TestThis.class
public static void main(String[] args){
Girl g1=new Girl("pz",18);//所以这里可以直接写进去。
System.out.println(g1.name+"  "+g1.age);//将这里改为定义new出来的g1.___也是一种输出方式。
//需要注意的是这个g1.___不要写成类名(TestThis.___)了。
}
}

输出为:

pz  18

去掉this的话

class Girl{
	String name;
	int age;
	public Girl(String name,int age){
		name=name;
		age=age;//就只有去掉了this.
	}
}

输出为:

null  0
以下是最近学this摸索到的。
  • 3.当方法名与类名不同时的使用。这里的不同之处在于,如果类Person中没有用构造方法来进行,直接在Person()括号里输入数据的话就会报错。
	class Person{
  	int id;
   	String name;
   	public void display(int number,String name){
		 System.out.println(number+" "+name);
		}
  
  public static void main(String[] args){
      //局部变量分配内存空间。//不会在int id中存储后面的常量。
 Person s1=new Person(12,"pz");//这样方法名不同时,再像之前那样输入数据就会报错。
 //报错:无法将类 Person中的构造器 Person应用到给定类型;
	
	}
}

所以这里需要用new的s1.上面的display方法来进行参数传递。(这里是写在了一个类里面)

class Person{
  	int id;
   	String name;
   	public void display(int number,String name){
		 System.out.println(number+"  "+name);
		}
  
  public static void main(String[] args){
 Person s1=new Person();//这里的new也是不能省略掉的,现在还不太清楚,new的用法。(除了感觉是创建一个新的空间。)
	s1.display(12,"pz");//就这里有些许改动。与上面对应的display的参数对应。
	//而且 上面的display如果没有void是需要返回值的。
	}
}

输出为:

12  pz

	class Person{
  	int id;
   	String name;
   	public void Person(int number,String name){
		 System.out.println(number+" "+name);
		}
  
  public static void main(String[] args){
 Person s1=new Person(12,"pz");
	}
}

看这一段是否会报错。

答案是报错的。

报错为:无法将类 Person中的构造器 Person应用到给定类型;
需要: 没有参数
  找到: int,String
  原因: 实际参数列表和形式参数列表长度不同。

是因为前面的方法中Person前面加上了一个void 去掉就不会报错了。

但是又产生了一个新的问题。
是这里的`number`和`name`都没有用this来修饰,但是都输出了我想要的值。
反观上面的区别就是:`System`语句的不同所在地。
上面这一段,System语句放在了调用方法的内部。所以直接传参,就是对应的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值