黑马程序员技术交流社区

标题: 静态方法可以用类名.方法名调用,对吧? [打印本页]

作者: 周志伟    时间: 2013-4-6 06:50
标题: 静态方法可以用类名.方法名调用,对吧?
本帖最后由 周志伟 于 2013-4-7 01:08 编辑

看了一晚上的视频,到天亮了,感觉吧,大脑不转了,求解啊!!!!
  1. ArrayToolDemo.java文件代码如下所示:

  2. class ArrayToolDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 int[] arr = {3,1,87,32,8};

  7.                 int max = ArrayTool.getMax(arr);//这句应该如何理解啊???????求解释啊!!!!!
  8.                 System.out.println("max=" + max);

  9.         }
  10. }


  11. ArrayTool.java文件内容如下所示:

  12. public class ArrayTool
  13. {
  14.         /**
  15.         空参数构造函数。
  16.         */
  17.         private ArrayTool(){}

  18.         /**
  19.         获取一个整形数组中的最大值。
  20.         @param arr 接收一个int类型的数组。
  21.         @return 会返回一个该数组中最大值。
  22.         */
  23.         public static int getMax(int[] arr)
  24.         {
  25.                 int max = 0;
  26.                 for(int x=1; x<arr.length; x++)
  27.                 {
  28.                         if(arr[x]>arr[max])
  29.                                 max = x;
  30.                 }
  31.                 return arr[max];
  32.         }
  33.         
  34.         /**
  35.         获取一个整形数组中的最小值。
  36.         @param arr 接收一个int类型的数组。
  37.         @return 会返回一个该数组中最小值。
  38.         */
  39.         public static int getMin(int[] arr)
  40.         {
  41.                 int min = 0;
  42.                 for(int x=1; x<arr.length; x++)
  43.                 {
  44.                         if(arr[x]<arr[min])
  45.                                 min = x;
  46.                 }
  47.                 return arr[min];
  48.         }
  49.         /**
  50.         给int数组进行选择排序。
  51.         @param arr 接收一个int类型的数组。
  52.         */
  53.         public static void selectSort(int[] arr)
  54.         {
  55.                 for (int x=0; x<arr.length-1 ; x++ )
  56.                 {
  57.                         for(int y=x+1; y<arr.length; y++)
  58.                         {
  59.                                 if(arr[x]>arr[y])
  60.                                 {
  61.                                         swap(arr,x,y);
  62.                                 }
  63.                         }
  64.                 }
  65.         }
  66.         /**
  67.         给int数组进行冒泡排序。
  68.         @param arr 接收一个int类型的数组。
  69.         */
  70.         public static void bubbleSort(int[] arr)
  71.         {
  72.                 for (int x=0; x<arr.length-1 ; x++ )
  73.                 {
  74.                         for(int y=0; y<arr.length-x-1; y++)
  75.                         {
  76.                                 if(arr[y]>arr[y+1])
  77.                                 {
  78.                                         swap(arr,y,y+1);
  79.                                 }
  80.                         }
  81.                 }
  82.         }
  83.         /**
  84.         给数组中元素进行位置的置换。
  85.         @param arr  接收一个int类型的数组。
  86.         @param a 要置换的位置
  87.         @param b 要置换的位置
  88.         */
  89.         private  static void swap(int[] arr,int a,int b)
  90.         {
  91.                 int temp = arr[a];
  92.                 arr[a] = arr[b];
  93.                 arr[b] = temp;
  94.         }
  95.         /**
  96.         用于打印数组中的元素。打印形式是:[elemet1, element2, ...]
  97.         */
  98.         public static void printArray(int[] arr)
  99.         {
  100.                 System.out.print("[");
  101.                 for(int x=0; x<arr.length; x++)
  102.                 {
  103.                         if(x!=arr.length-1)
  104.                                 System.out.print(arr[x]+", ");
  105.                         else
  106.                                 System.out.println(arr[x]+"]");
  107.                 }
  108.         }
  109. }

复制代码

作者: 邵震    时间: 2013-4-6 07:11
{:soso_e179:}  你通宵了?  我看到你昨晚1点40给我发的信息了

作者: 邵震    时间: 2013-4-6 07:15
本帖最后由 邵震 于 2013-4-6 07:37 编辑

把你的public class ArrayTool代码前面的权限修饰符去掉就有一个结果max=87
  1. int max = ArrayTool.getMax(arr)
复制代码
意思就是创建一个int型变量max 把ArrayTool类中的getMax函数中arr[max]的值赋给max
  1.                 int min = ArrayTool.getMin(arr);
  2.                 System.out.println("min=" + min);
复制代码
你在加上这一句可以求取最小值
作者: 聖手`书生    时间: 2013-4-6 08:10
你这句话本身的意思是  用类名调用ArrayTool类中的获取最大值方法。但是你给ArrayTool类中加了public修饰符,访问权限范围太大。这样会导致ArrayToolDemo无法访问,编译失败。如果将public去掉,就可以编译通过,运行值为87
作者: 聖手`书生    时间: 2013-4-6 08:14
聖手`书生 发表于 2013-4-6 08:10
你这句话本身的意思是  用类名调用ArrayTool类中的获取最大值方法。但是你给ArrayTool类中加了public修饰符 ...

我个人也迷糊了,感觉ArrayTool类和ArrayToolDemo类都加上public修饰,会编译失败,求解。
作者: 庞立森    时间: 2013-4-6 08:26
首先说一下你的代码中的错误public classArrayTool前面的修饰符public必须去掉,否则会变编译错误,
用public修饰的类必须和文件名一致,否则也是错误,
int max=ArrayTool.getMax(arr)的意思是获取arr数组里面的最大值,在把最大值赋值给max,
你下面的getMax方法的参数是一个数组,所以你调用必须输入一个数组参数
作者: 聖手`书生    时间: 2013-4-6 08:36
“类A是公共的,应在名为A.java的文件中声明”这句话需要分两步来理解:
1、如果类A被声明为公共的(public),那么必须将类A保存在名为A.java的文件中;
2、反之,在一个文件中最多包含一个顶级的公共类,并且该公共类的名字与文件名相同。比如文件A.java中,允许定义一个或多个类,但最多允许一个顶级的公共类,此类名为A。此处强调的顶级的意思是,允许非顶级的公共类存在,如内部公共类等。
作者: 张旺达    时间: 2013-4-6 10:14
程序第9行的意思就是:
在使用static之前,都是通过new一个对象来获取数组中的最大值,这个方法你肯定明白吧,第9行的目的和它是一样的,只不过加了static之后,就可以通过类名来调用,可以简化程序,而且可以更严谨。具体的视频里都有。
不知道有没有理解错你的意思,注意身体啊!{:soso_e113:}
作者: 凌晨丶草未眠    时间: 2013-4-6 11:43
int max = ArrayTool.getMax(arr);//这句应该如何理解啊???????求解释啊!!!!!

调用ArrayTool类中的方法getMax():功能是获取数组最大值
作者: 凌晨丶草未眠    时间: 2013-4-6 11:43
程序中的错误前面的楼主已经指出了
作者: 陈雨    时间: 2013-4-6 12:36
其实通宵不好,没休息好,还影响第二天的学习效率,人的抵抗能力,也会降低。欲速则不达啊。
作者: 周志伟    时间: 2013-4-6 18:28
邵震 发表于 2013-4-6 07:11
你通宵了?  我看到你昨晚1点40给我发的信息了

恩,是啊,你当时睡了吧?
作者: 周志伟    时间: 2013-4-6 18:29
陈雨 发表于 2013-4-6 12:36
其实通宵不好,没休息好,还影响第二天的学习效率,人的抵抗能力,也会降低。欲速则不达啊。 ...

我值夜班,呵呵,白天睡觉啦。木事。嘻嘻

作者: 邵震    时间: 2013-4-6 18:32
周志伟 发表于 2013-4-6 18:28
恩,是啊,你当时睡了吧?

早睡了  我每天12点睡觉 然后早上6点多起来  

以后别通宵了 前半夜熬的是体力 吃饭能补回来

后半夜熬的是心血  可就不好补了
作者: 周志伟    时间: 2013-4-6 18:53
邵震 发表于 2013-4-6 18:32
早睡了  我每天12点睡觉 然后早上6点多起来  

以后别通宵了 前半夜熬的是体力 吃饭能补回来

额,我值夜班啊,反正我们值夜班也不能睡觉啊,我们头顶上有一个摄像头,专门盯着我们,不能睡觉啊。

作者: 邵震    时间: 2013-4-6 19:04
周志伟 发表于 2013-4-6 18:53
额,我值夜班啊,反正我们值夜班也不能睡觉啊,我们头顶上有一个摄像头,专门盯着我们,不能睡觉啊。
...

买点书看吧
作者: 周志伟    时间: 2013-4-6 19:08
邵震 发表于 2013-4-6 19:04
买点书看吧

恩恩,好的,我买了,《java jdk 6 学习笔记》
作者: 黄玉昆    时间: 2013-4-6 19:50
如果问题未解决,请继续追问,如果没有问题了,请将帖子分类 改为“已解决”,谢谢
作者: 、__WSD吴少东    时间: 2013-4-7 00:44
庞立森 发表于 2013-4-6 08:26
首先说一下你的代码中的错误public classArrayTool前面的修饰符public必须去掉,否则会变编译错误,
用publ ...

哥们,public classArrayTool 的public  是必须加上吧,我去调了编译失败,加上了编译通过/
作者: 周志伟    时间: 2013-4-7 01:03
张旺达 发表于 2013-4-6 10:14
程序第9行的意思就是:
在使用static之前,都是通过new一个对象来获取数组中的最大值,这个方法你肯定明白 ...

恩,好的,要注意身体的。你说的意思我差不多理解了,就是,用类名调用方法我需要好好消化一下。
作者: 周志伟    时间: 2013-4-7 01:04
陈雨 发表于 2013-4-6 12:36
其实通宵不好,没休息好,还影响第二天的学习效率,人的抵抗能力,也会降低。欲速则不达啊。 ...

恩恩,是的,我知道,只是,我上夜班,没事干,就学习了。嘻嘻
作者: 周志伟    时间: 2013-4-7 01:05
凌晨丶草未眠 发表于 2013-4-6 11:43
int max = ArrayTool.getMax(arr);//这句应该如何理解啊???????求解释啊!!!!!

调用ArrayTool ...

就是静态方法可以用类名.方法名调用,对吧?
作者: 周志伟    时间: 2013-4-7 01:05
凌晨丶草未眠 发表于 2013-4-6 11:43
程序中的错误前面的楼主已经指出了

差不多理解了,嘻嘻,
作者: 凌晨丶草未眠    时间: 2013-4-7 15:42
周志伟 发表于 2013-4-7 01:05
就是静态方法可以用类名.方法名调用,对吧?

嗯 ,如:Math.sqrt();
作者: 周志伟    时间: 2013-4-7 19:26
凌晨丶草未眠 发表于 2013-4-7 15:42
嗯 ,如:Math.sqrt();

知道了,谢谢哈~~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2