当前位置: 首页>前端>正文

java类里面的方法为什么不带static 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中的参数传递方法是值传递这一点,那么在内存中是怎么样的呢?看一下:

java类里面的方法为什么不带static java方法必须定义在类中吗,java类里面的方法为什么不带static java方法必须定义在类中吗_Java,第1张

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

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)传递的是一个对象,是引用类型,我们知道对象存的是一个地址,那么值传递传递过去的是一个地址:

java类里面的方法为什么不带static java方法必须定义在类中吗,java类里面的方法为什么不带static java方法必须定义在类中吗_值传递_02,第2张

 

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

 


https://www.xamrdz.com/web/2ss1957654.html

相关文章: