Java总结——Java面向对象中引用的传递
引用传递:
也称为传地址。有点类似与指针传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。
值传递:
方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值。
例如:
package java面向对象;
/**
* @author asus
*
*/
class Ref{
String temp = "hello";
}
public class 引用传递 {
public static void main(String[] args) {
/**
* @param args
*/
Ref r1 = new Ref();
System.out.println(r1.temp);
tell(r1);
System.out.println(r1.temp);
}
public static void tell(Ref r1) {
r1.temp = "word";
}
}
this关键字:
(1)通过this关键字调用成员变量,解决与局部变量名称的冲突问题。
(2) 通过this关键字调用成员方法。
(3)通过this关键字调用构造方法。
在使用this调用类的构造方法时,应注意以下几点。
1.只能在构造方法中使用this调用其它方法,不能在成员方法中中使用。
2.在构造方法中,使用this调用构造方法的语句必须是该方法的第一条执行语句,而且只能出现一次。
例如:this 放在一个语句后面,会报错。
Constructor call must be the first statement in a constructor
意思是:调用构造方法函数必须是构造函数中的第一条语句;
class Person3{
//private int age;
//public void ss() {
// return ;
//}
public Person3(int a) {
//this();
System.out.println("调用"+a);
this();
}
public Person3() {
System.out.println("阿德撒啊");
}
}
3.不能在一个类的两个构造方法中使用this互相调用。
会报这个
Recursive constructor invocation Person3错误。
这个错误是无参构造方法和有参方法分别使用this关键字对方法进行了相互调用。
class Person3{
//private int age;
//public void ss() {
// return ;
//}
public Person3(int a) {
this();
System.out.println("调用"+a);
}
public Person3() {
this(15);
System.out.println("阿德撒啊");
}
}
正确如下:
package java面向对象;
/**
* @author asus
*
*/
class People1{
String name;
int age;
public People1(String name,int age) {
this(); //this作用二:调用本类中构造方法
//注意:使用此调用,必须放在第一行
this.name=name; //this作用一:调用本类中属性name
this.age=age;
}
private People1() {
System.out.println("调用无参构造方法");
}
public void tell() {
System.out.println("姓名:"+this.name+" 年龄:"+this.age);
System.out.println(this); //this作用三:表示当前对象
}
}
public class this关键字 {
public static void main(String[] args) {
/**
* @param args
*/
People1 p = new People1("张三",30);
p.tell();
}
}
static关键字:
用于修饰类的成员。
使用static声明属性:static声明全局属性。
使用static声明方法:直接通过类名调用。
注意点:使用static方法的时候,只能访问static声明的属性和方法,而非static声明的属性和方法是不能被访问的。