java学习第四周
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
-
-
还可以换一种方式来显示this.这里是将输出语句放在了外面那个类中,需要调用的话就用new出来的 g1.___来实现。
-
(与上面不同的是,这里没有新定义一个输出的方法
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语句放在了调用方法的内部。所以直接传参,就是对应的数据。