零基础小白JAVA学习笔记(八)


 

方法参数

值调用(call by value)表示方法接收的是调用者提供的值。

引用调用(call by reference)表示方法接收的是调用都提供的变量地址。

一个方法可以个修改传递引用所对应的变更值,而不能修改传递调用所对应的变量值。

 

总结一下在Java程序设计语言中,方法参数的使用情况:

l  一个方法不能修改一个基本数据类型的状态。

l  一个方法可以改变一个对象参数的状态。

l  一个方法不能实现让对象参数引用一个新的对象。

书里的代码已经很好地体现出了以上几种情况,但是有些代码并没有对结果产生影响,所以我自己根据其思路写了一段新的,不过就阅读性而言,这段代码还是非常差的,自我检讨下先。

class CallbyTest

{

      

       public static void Methods(int x)

       {

              x=5*x;

              System.out.println("方法调用时的x="+x);

 

       }

      

       public static void main(String[] args)

       {

              System.out.println("方法不能修改一个基本数据类型的状态");

              int x = 3;

              System.out.println("方法调用前的x="+x);

               Methods(x);

              System.out.println("方法调用后的x="+x);

              FenGe();

             

              System.out.println("方法可以改变一个对象参数的状态");

               Callby c= new Callby(8);

              System.out.println("方法调用前的c.x="+c.getX());

              Beishu(c);

              System.out.println("方法调用后的c.x="+c.getX());

              FenGe();

             

              System.out.println("方法不能实现让对象参数引用一个新的对象");

              Callby a = new Callby("犀利哥");

              Callby b = new Callby("HOLD住姐");

              System.out.println("方法调用前的a.name="+a.getName());

              System.out.println("方法调用前的b.name="+b.getName());

              swap(a,b);

              System.out.println("方法调用后的a.name="+a.getName());

              System.out.println("方法调用后的b.name="+b.getName());

 

       }

       public static void Beishu(Callby c)

       {

              c.newMethod(4);

              System.out.println("方法调用时的c.x="+c.getX());

       }

       public static void swap(Callby x,Callby y)

              {

                     Callby temp = x;

                     x = y;

                     y = temp;

                     System.out.println("方法调用时的a.name="+x.getName());

                     System.out.println("方法调用时的b.name="+y.getName());

              }

 

       public static void FenGe()

              {

                     System.out.println("-----------------------------------------");//分隔线

              }

             

}

class Callby

{

       private int x;

       private String name;

      

       public Callby(int x)

              {this.x=x;}

       public Callby(String name)

              {this.name=name;}

       public void newMethod(int num)

       {

              x = x* num;

 

       }

       int getX()

       {

              return x;

       }

       String getName()

       {

              return name;

       }

}

 

以上代码的运行结果如下:

方法不能修改一个基本数据类型的状态

方法调用前的x=3

方法调用时的x=15

方法调用后的x=3

-----------------------------------------

方法可以改变一个对象参数的状态

方法调用前的c.x=8

方法调用时的c.x=32

方法调用后的c.x=32

-----------------------------------------

方法不能实现让对象参数引用一个新的对象

方法调用前的a.name=犀利哥

方法调用前的b.name=HOLD住姐

方法调用时的a.name=HOLD住姐

方法调用时的b.name=犀利哥

方法调用后的a.name=犀利哥

方法调用后的b.name=HOLD住姐

 

通过显示的结果可以看出:

程序中试图将参数x的值提高5倍,但没有效果;之后成功地将对象c的值提高了4;第三种情况下,参数变量xy被交换了,但是ab没有受到影响。

 

 

之前似乎对于重载的概念并没有详细说明过,不过毕竟自己第一次写日志,难免有疏忽。

重载(overloading

定义:如果多个方法有相同的名字、不同的参数,便产生了重载。(如上面Callby的构造函数)

注:Java允许重载任何方法,而不仅是构造函数。因此,要完整地描述一个方法,需要指出方法名以及参数类型。例如,String类中有4个名为indexOf的公有方法。

       indexOf(int)

       indexOf(int,int)

       indexOf(String)

       indexOf(String,int)

当然,String类中还有很多这样的方法,getBytes、lastIndexOf等等,此处不再一一列出。

包(package

       Java允许使用包将类组织起来,相当于一个类集合。包确保了类名的惟一性。假如两个程序员都定义了Student类,只要将这些类放置在不同的包中,就不会产生冲宊。

 

 

        

类的导入

       一个类可以使用所属包中的所有类,以及其他包中的公有类(public class)。我们可以用两种方式访问另一个包中的公有类。

       第一种方式是在每个类名之前添加完整的包名。

       例如:java.util.Date today = new java.util.Date();

       这种方法用起来让人抓狂,所以第二种方法更简单且更为常用

       使用import语句导入一个特定的类或者整个包,这样就不必写出包的全名了。import语句应该位于源文件的顶部(但们于package语句的后面)。

 

       import java.util.*;

有了这条语句,就可以导入java.util包中的所有类了。然后就可以使Date today = new Date();而无需在前面加上包前缀了。也可以只导入包中指定的类,

       import java.util.Date;

 

      import java.util.*的语法比较简单,对代码的大小也没有负面影响。当然,如果能够明确地指出所导入的类,将会使代码的读者更加准确地知道加载了哪些类

 

       注:只能使用*(星号)导入一个包,而不能使用import java.*import java.*.*导入以java为前缀的所有包。

 

      在实际应用中,会出现会命名冲突。如java.utiljava.sql包中都有Date类。如果在程序中导入这两个包

       import java.util.*;

import java.sql.*;

在程序使用Date类时,就会编译失败。因为编译器无法判断程序要使用哪一个Date类。如果只使用其中一个包中的Date类,则增加一个特定的import语句来解决即可。但如果两个Date类都要使用,则就必须在每个类名的前面加上完整的包名。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值