⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java03_06.htm

📁 JAVA的课件
💻 HTM
字号:
<html>

<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Java程序设计</title>
</head>

<body background="Bg.gif">

<p align="center"><font size="5"><b>§3.6方法的调用</b></font></p>

<p align="left">方法定义完成后,就可以供其他的方法或类来调用了。</p>

<p align="left">一、方法调用的形式:</p>
<p align="left">&nbsp;[对象或类名.]方法名([实际参数表]);</p>
<p align="left">如果调用者和被调用者处于同一类中,或者是其子类,可以不需要对象或类名,如前面讲的所有的例子:<br>
class Myclass{<br>  
&nbsp; int k=2;<br>  
&nbsp; void fun1()<br>  
&nbsp; { System.out.println(k);<br>  
&nbsp;&nbsp; }<br>  
&nbsp; void fun2()<br>  
&nbsp; {&nbsp; fun1();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //这里调用了fun1<br>  
&nbsp; }<br>  
}<br>  
只要是非static类型的方法,在同一个类的内部都可以相互调用,而无需考虑方法的访问权限。</p> 
<p align="left">如果是在类的外部访问类的方法,就要加上对象或类名,如下例:<br> 
class Myclass{<br>  
&nbsp; int k=2;<br>  
&nbsp;<b> private</b> void fun1()<br>  
&nbsp; { System.out.println(k);<br>  
&nbsp;&nbsp; }<br>  
&nbsp; <b>public</b>&nbsp; void fun2()<br>  
&nbsp; { System.out.println(k);<br>  
&nbsp; }<br>  
&nbsp; <b>protected</b> void fun3()<br>  
&nbsp; { System.out.println(k);<br>  
&nbsp; }<br>  
&nbsp; void fun4()<br>  
&nbsp; { System.out.println(k);<br>  
&nbsp; }<br>  
}<br>  
class otherclass{<br>  
&nbsp;void fun()<br>  
&nbsp;{ Myclass ob=new Myclass(); //这里先将Myclass实例化,生成一个对象ob<br>  
&nbsp;&nbsp; ob.fun1();&nbsp;&nbsp;&nbsp;&nbsp; //引用形式正确,但fun1的访问权限不允许它访问<br>  
&nbsp;&nbsp; ob.fun2();&nbsp;&nbsp;&nbsp;&nbsp; //引用形式正确,访问成功<br>  
&nbsp;&nbsp; ob.fun3();&nbsp;&nbsp; //如果otherclass和Myclass位于同一包中或者是Myclass的子类,访问成功<br>  
&nbsp;&nbsp; ob.fun4();&nbsp;&nbsp; //如果otherclass和Myclass位于同一包中,访问成功<br>  
&nbsp;}<br>  
}<br>  
<br>  
如果方法是static类型,则可以用“类名.方法名()”来访问,而且事先可以不需要将类实例化。像下面这个例子:<br> 
class Myclass{<br> 
&nbsp; static void fun()<br> 
&nbsp; {&nbsp; System.out.println(&quot;I'm a static function!&quot;);<br> 
&nbsp; }<br> 
}<br> 
class otherclass{<br> 
&nbsp;&nbsp; public static void main(String argv[])<br> 
&nbsp;&nbsp; {&nbsp;&nbsp; Myclass.fun();&nbsp;&nbsp; //直接通过类名调用<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Myclass ob=new Myclass();<br> 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  
ob.fun();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //通过类的实例调用<br> 
&nbsp;&nbsp; }<br> 
}</p> 
<p align="left">二、方法调用中的对象参数<br>
&nbsp;&nbsp;&nbsp; 
前面说过,方法调用时,简单类型的参数传递都是以传值的形式进行的,如果需要改变实参的值,就要通过对象参数了。<br>
&nbsp;&nbsp;&nbsp; 
如果参数是对象,则传递的是对象的引用,即形参和实参占用的是同一片内存空间。如果方法中改变了形参的值,则实参的值也随之改变。</p>
<p align="left">例如下例可以交换x和y的值:<br>
&nbsp;class Test{<br>
&nbsp;&nbsp; static void swap(MyInteger x, MyInteger y)<br>
&nbsp;&nbsp; { MyInteger t;<br>
&nbsp;&nbsp;&nbsp;&nbsp; t=x;<br>
&nbsp;&nbsp;&nbsp;&nbsp; x=y;<br>
&nbsp;&nbsp;&nbsp;&nbsp; y=t;<br>
&nbsp;}</p>
<p align="left">三、访问权限的限制如下表所示:</p>
<table border="1" width="81%">
  <tr>
    <td width="42%"> </td>
    <td width="17%">private</td>
    <td width="16%">默认的</td>
    <td width="18%">protected</td>
    <td width="15%">public</td>
  </tr>
  <tr>
    <td width="42%">同一个类中</td>
    <td width="17%">√</td>
    <td width="16%">√</td>
    <td width="18%">√</td>
    <td width="15%">√</td>
  </tr>
  <tr>
    <td width="42%">同一包中的任意类</td>
    <td width="17%"> </td>
    <td width="16%">√</td>
    <td width="18%">√</td>
    <td width="15%">√</td>
  </tr>
  <tr>
    <td width="42%">不同包中的子类</td>
    <td width="17%"> </td>
    <td width="16%"> </td>
    <td width="18%">√</td>
    <td width="15%">√</td>
  </tr>
  <tr>
    <td width="42%">不同包中的非子类</td>
    <td width="17%"> </td>
    <td width="16%"> </td>
    <td width="18%"> </td>
    <td width="15%">√</td>
  </tr>
</table>
<p align="left"><a href="index.htm">回目录</a>   <a href="java03_05.htm">上一课</a>  
 <a href="java03_07.htm">下一课</a></p>

</body>

</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -