小白的20天Java学习打卡day15

太原理工大学机器人团队20天学习打卡day15


今天主要讲的是参数的传递和this关键字


1、参数的传递

java语言当中方法调用的时候涉及到参数传递问题,参数传递实际上传递的是变量中保存的具体值

例1

public class Test01 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int i = 10;
		add(i);//add方法调用的时候,给add方法传递了一个变量i,到底传的什么
		System.out.println("main——>"+ i);//10
	}
	public static void add(int i){
		i++;
		System.out.println("add——>" + i);//11
	}

}

分析

  • main方法中的 i 变量是局部变量,i变量本身占有内存空间,所以i变量本身也有内存地址,i变量中保存的是10这个字面值
  • 把10这个字面值复制了一份传递给了add方法,与i变量本身无关

例2

public class User{
    //实例变量
    int age;
    //构造方法
    public User(int i){
        age = i;
    }
}
public class Test02 {

	public static void main(String[] args) {
		User u = new User(20);
        //传递u给add方法的时候,实际上传递的是u变量中保存的值,只不过这个值是一个java对象的内存地址
		add(u);
		System.out.println("main——>"+u.age);//21
	}
	public static void add(User u){
		u.age++;
		System.out.println("add——>"+u.age);//21
	}
	

}

这里是引用
参数的传递

最终结论:方法调用的时候涉及参数传递的问题,传递的时候,java只遵循一种语法机制,就是将变量中保存的“值”传递过去了,只不过有的时候这个值是一个字面值10,有的时候这个值是另一个Java对象的内存地址


2、this关键字

  • this是一个关键字,翻译为:这个

①例1

public class Customer {
	//姓名
	String name;
	//构造方法
	public Customer(){	
        
	}
}
public class CustomerTest {

	public static void main(String[] args) {
		
		//创建一个customer对象
		Customer c1 = new Customer();
		c1.name = "zhangsan";
				
		//再创建一个customer对象
		Customer c2 = new Customer();
		c2.name = "lisi";
	}

}

这里是引用
this本质

②this的本质

  • this是一个引用,this是一个变量,this变量中保存内存地址指向自身,this存储再JVM堆内存java对象内部。创建100个java对象,每一个对象都有this,也就是说有100个不同的this

在上面代码和图解的基础上

public class Customer {
	//姓名
	String name;
	//构造方法
	public Customer(){
		
	}
    
   	//不带有static关键字的方法
   	//顾客购物的行为
    	//每一个顾客购物最终的结果是不一样的
    	//所以购物这个行为是属于对象级别的行为
    	//由于每一个对象再执行购物这个动作的时候最终结果不同,所以购物这个动作必须有对象参与
    	//重点:没有static关键字的方法被称为“实例方法”,访问:“引用.”
    	//没有static关键字的方法被称为“实例对象”
    	//注意:当一个行为/动作执行的过程当中是需要对象参与的,那么这个方法一定要定义为实例方法,不要带static	   //关键字
    	public void shopping(){
    		//当张三在购物的时候输出:张三在购物
    		//当李四在购物的时候输出:李四在购物
    	
    		//System.out.println(name + "在购物");
    		//完整写法:
    		System.out.println(this.name+"在购物");
    	}
    
    	//带有static
    	public static void doSome(){
    		//这个执行过程中没有“当前对象”,因为static的方法是通过类名.的方法访问的
    		//或者说这个“上下文”当中没有当前对象,自然也不存在this(this代表的是当前正在执行这个动作的对象)    	
    	
    		//以下程序为什么编译错误呢?
    		//doSome方法调用不是对象去调用,是一个类名去调用,执行过程中没有“当前对象”
    		//name是一个“实例变量”,以下代码的含义是:访问当前对象的name,没有当前对象,自然也不能访问
    		//System.out.println(name);
    	
    	}
    
    	public static void doOther(){
    		//假设想访问name这个实例变量的话该怎么做?
    		//创建对象
    		Customer c = new Customer();
    		System.out.println(c.name);//这里访问的name是c引用指向对象的name
    	}
}
public class CustomerTest {

	public static void main(String[] args) {
		
		//创建一个customer对象
		Customer c1 = new Customer();
		c1.name = "zhangsan";
		
        	//再创建一个customer对象
		Customer c2 = new Customer();
		c2.name = "lisi";
        
		//c1购物
		c1.shopping();
		
		//c2购物
		c2.shopping();
				

	}

}

由上代码可得

  • this可以出现在实例方法当中,this指向当前正在执行这个动作的对象【this指向当前对象】
  • this不能使用在带有static的方法当中

③例2

public class ThisTest {
	
	//实例变量
	int num = 10;
	
	//带有static的方法
	//JVM负责调用main方法,JVM是怎么调用的
	//ThisTest.main(String[]);
	public static void main(String[] args) {
		//没有当前对象this
		
		//以下代码什么意思?
		//访问“当前对象”的num属性
		//System.out.println(num);//编译错误
		
		//想访问num
		ThisTest tt = new ThisTest();
		System.out.println(tt.num);

	}
}
参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页

打赏作者

waitin丶

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值