一、值传递和引用传递
- 值传递:通常指的是基本数据类型,传递的过程中只是将具体的值传了过去,并没有将变量传过去;
- 引用传递传递的是地址值,不同的变量i只要是相同的地址,空间中的值发生了改变,不同的变量所获取的值就是一样的;
public class Transmit {
public static void main(String[] args) {
int a = 1;
int b = 2;
test(b,a);//调用test方法 将 b,a的值传给test方法
System.out.println(a);//这时输出的结果是1 调用方法只是将变量的值传过去,自身变量没有传过去,这叫做值传递
System.out.println("-----------------------------------------------------");
Transmit transmit = new Transmit(); //创建对象
transmit.i = 7;//给对象的i变量赋值为 7 name变量赋值为李四 这时调用test方法
transmit.name ="李四";
test(transmit);
System.out.println(transmit.i +"--------"+transmit.name);//输出结果是调用方法修改过的结果,因为对象的地址一致
}
public static void test(int a,int b) {//形参跟实参没有关系,传进来的是2,1
System.out.println(a);//输出2
}
int i;
String name;
public static void test(Transmit transmit) {//这时形参接收的是一个对象的地址 修改了对象的i变量和name变量
transmit.i = 6;
transmit.name = "张三";
}
}
二、this关键字
1.this代指当前对象,是一个引用,保存内存地址指向自己
2.this只能在当前类中使用
3. this所代指的对象是根据程序运行的顺序来定的,程序运行到某个对象时,this就代指当前的对象
4. 类中的所有非静态变量及方法都默认持有一个this对象,该对象可以省略不写
5. this() 这种语法只能出现在构造方法第一行
public class shop{
private String name;
public void setName(String name) {
this.name = name; this.name代表当前对象的name , 如果写this 程序分不清你表达的是形参的this 还是成员变量的this
}
}
-------------------------------------------------------------------------------------------------------------------------------------------------
public Students() { //无参构造器
this("大一");
}
public Students(String grade) {
this.grade = grade;
}
public Students(String name, String idcard) {
this();
this.name = name;
this.idcard = idcard;
}
三、构造方法
构造方法也叫做构造器
1.当一个类中没有提供任何构造方法,系统默认提供一个无参数的构造方法。当一个类中手动的提供了构造方法,那么系统将不再默认提供无参数构造方法。
2.大多数情况下,每个类中都要有无参及全部参数的构造器(建议将无参数构造方法手动的写出来)。
3.set方法更主要的作用是用于对象创建后再对属性的值进行修改,而构造器对于属性而言主要是用于初始化的
4.在对属性进行初始化的时候呢,到底要对哪些属性进行初始化是不确定的,因为属性的组合有很多种可能性,但是不能在类中针对每一种可能都给一个构造器
无参数构造方法和有参数的构造方法都可以调用。
Student x = new Student();
Student y = new Student(123);
public Students() { //无参构造器
this("大一");
}
public Students(String grade) {
this.grade = grade;
}
public Students(String name, String idcard, int age) {
this(); //this();只能出现在第一行
this.name = name;
this.idcard = idcard;
this.age = age;
}
public static void main(String[] args){
Students s1 = new Students("张三","2020116478",20);
}
构造方法的作用:给属性赋初始值, 开辟内存空间