4.4 理解Java方法 -【Java入门--疯狂Java讲义】

前面已经提到过方法的定义与调用方法,现在我们深入的理解一下方法。Java中的方法表达实体的动作或者行为,类似于结构化语言中的函数,但是还是有极大的区别的,Java中的方法必须依赖于类定义,不能单独定义、运行,必须定义在类中,且在逻辑上,方法要不属于类所有,要不属于对象所有

一句一句理解,方法必须依赖于类定义,前面也提到过,Java中的最小单位是类,因此,方法只能作为类的一部分存在,不能够单独的存在,也是因为这样,方法的调用也要依赖于类或者对象,这在前面也提到过了,这里也许有疑问,在同一个类当中,方法之间不就是直接调用的?这一点,一部分已经在前一更新中提到了,在同一个类之间调用,静态方法之间的调用是省略了类名的,而成员方法之间调用是省略了this关键字的。

class Test{
    static void fun1(){}
    static void fun2(){
        fun1(); //其实是Test.fun1();
    }

    void fun3(){}
    void fun4(){
        fun3();//其实是this.fun3();
    }
}

 这里补充一个知识点,静态方法是不能调用非静态方法的,原因在上一节已经提到了,这是没有显示的把这个概念罗列出来。

继续,了解Java方法的参数列表部分,先声明一个概念:Java的方法参数传递方法只有 【值传递】,就是将值复制一份传递过去,看代码:

class Test {
	public void fun01() {
		int i = 20;
		System.out.println(i);//20
		fun02(i);
		System.out.println(i);//20
	}
	public void fun02(int i) {
		i = 100;
	}
}

在上面的代码中,fun01中定义了i=20,输出一遍后,传值给fun02,fun02将i=100,随后在fun01中输出i还是20,这就印证了Java中的参数传递方法是值传递这一点,那么在内存中是怎么样的呢?看一下:

所以,两个方法中操作的是两个值。 有时候我们也许会遇到这样的情况,迷惑我们:

class Test{
	int x = 20;
}

class Test01 {
	Test test = new Test();
	public void fun01() {
		System.out.println(test.x);//20
		fun02(test);
		System.out.println(test.x);//100
	}
	public void fun02(Test test) {
		test.x = 100;
	}
}

 这两个test.x的值不一样,显然是被修改了,为什么呢?细心一点会发现,fun02(test)传递的是一个对象,是引用类型,我们知道对象存的是一个地址,那么值传递传递过去的是一个地址:

 

这样,还是证明了我们说的值传递的说法。 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值