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声明的属性和方法是不能被访问的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值