A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐林渊 黑马帝   /  2012-1-6 21:10  /  3379 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 jacktang 于 2012-1-8 19:17 编辑

昨晚学到了 静态的那方面,今天找个几个问题想请教各位,我是参考毕老师的教学视频

第一个问题   讲的时候说,讲方法静态后方便使用,但该类还是可以被其他程序创建对象,为了不让建立对象,将构造函数私有化。。。我不明白为什么要阻止建立对象.....建立对象对哪方面造成影响吗?,麻烦详细点谢谢

第二个问题   为什么所有的功能都要加public 我试试不加好像也可以运行的。


public class ArrayTool
{
        private ArrayTool(){}                                   //                       第一个问题
        public static int getMax(int[] arr)        
        {                                                        
                int max = 0;
                for(int x=1; x<arr.length; x++)
                {
                        if(arr[x]>arr[max])
                                max = x;
                }
                return arr[max];
        }
       
       
        public static int getMin(int[] arr)                        //              第二个问题
        {
                int min = 0;
                for(int x=1; x<arr.length; x++)
                {
                        if(arr[x]<arr[min])
                                min = x;
                }
                return arr[min];
        }
       
        public static void selectSort(int[] arr)
        {
                for (int x=0; x<arr.length-1 ; x++ )
                {
                        for(int y=x+1; y<arr.length; y++)
                        {
                                if(arr[x]>arr[y])
                                {
                                        swap(arr,x,y);
                                }
                        }
                }
        }
       
        public static void bubbleSort(int[] arr)
        {
                for (int x=0; x<arr.length-1 ; x++ )
                {
                        for(int y=0; y<arr.length-x-1; y++)
                        {
                                if(arr[y]>arr[y+1])
                                {
                                        swap(arr,y,y+1);
                                }
                        }
                }
        }
       
        private  static void swap(int[] arr,int a,int b)
        {
                int temp = arr[a];
                arr[a] = arr;
                arr = temp;
        }
       
        public static void printArray(int[] arr)
        {
                System.out.print("[");
                for(int x=0; x<arr.length; x++)
                {
                        if(x!=arr.length-1)
                                System.out.print(arr[x]+", ");
                        else
                                System.out.println(arr[x]+"]");
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

9 个回复

倒序浏览
1.  当成员被静态修饰后就多了一种调用方式,也就是除了可以被对象调用外(调用格式:对象名.静态成员),
还可以直接被类名调用,写法格式是:类名.静态成员。
    在工具类的讲解中,工具类是具有很多功能的封装类,比如可以对数组的成员进行排序,方法有冒泡排序方
法、快速排序方法、希尔排序等等方法,求解数组的最大值等等功能,我们可以将这些功能封装在一个类中,封
装之后,我们可以直接利用“类名.静态成员(方法、变量)”的方式调用,没有必要创建对象,而且可以无数次的
使用。如果要创建对象,与直接用“类名.静态成员(方法、变量)”相比用代码实现起来麻烦些,也就是本来有捷
径可走,但是你硬要走弯路也没办法,是吧。
2.  加不加public这是访问权限大小的问题,工具类中的函数是提供给外部类去调用的,public修饰之后访问权限最
大,可以使得外部更加方便使用。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
第一题
方法静态    构造函数私有化  没有联系
类实不实例
与方法静态 调用 不成在关系



第二题:java中有四个访问权限 如下 看明白了你就懂了

这四个作用域的可见范围如下表所示。
说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly。

作用域    当前类 同一package 子孙类 其他package
public        √             √          √       √
protected  √              √          √      ×
friendly       √             √          ×      ×
private       √              ×          ×      ×

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
哈哈
我以前也有过类似楼主的问题,不过我看了很久视频,慢慢才知道是怎么回事了 以下是我的看法:

第一个问题:static 一般都来修饰共享数据的,同时也可以被类名直接调用,方便, 不过你说的那个讲构造函数私有化,不让其建立对象,这个在毕老师的单例模式里面说过了,有些类是只能有一个对象,不过可以通过方法来获取对象,因为目的就是这个类只能有一个对象,其他无什么影响

第二个问题:工具类 public   加了的话权限大,,   方便调用   

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
1。 有时候程序设计的就是不能让外部来创建新的对象,具体的例子可能在以后的工作中才能举明例子,涉及到一些单例模式。
2。 这是Java中的四个权限问题
private是私有的,就是当被private修饰的时候,这个方法或变量只能作用于类内部,只能在类内部使用,类外部的不可访问
一般不填是default 默认的就是包括private后 还允许同一个包内的类访问 但是继承不到,其他包更无法访问。
被protect修饰,其子类可以继承其父类(被protect修饰的所有变量和方法)但其他包依然无法访问,
public就是公有的,就好像共享模式差不多,只要别处想要调用那么都是畅通无阻,建议你看到包那块以后可以用这几个修饰符来自己做几个小例子可以增加对他们的理解……毕竟自己理解才是最好的嘛~

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
代臣 发表于 2012-1-6 21:58
1.  当成员被静态修饰后就多了一种调用方式,也就是除了可以被对象调用外(调用格式:对象名.静态成员),
...

你好  我现在不明白的是为什么要阻止建立对象..
回复 使用道具 举报
朱泽宇 发表于 2012-1-6 22:07
第一题
方法静态    构造函数私有化  没有联系
类实不实例

你好  我现在不明白的是为什么要阻止建立对象..
回复 使用道具 举报
苏格拉底的弟子 发表于 2012-1-7 12:02
哈哈
我以前也有过类似楼主的问题,不过我看了很久视频,慢慢才知道是怎么回事了 以下是我的看法:

你好  我现在不明白的是为什么要阻止建立对象..
回复 使用道具 举报
王冀0127 发表于 2012-1-7 12:57
1。 有时候程序设计的就是不能让外部来创建新的对象,具体的例子可能在以后的工作中才能举明例子,涉及到一 ...

为什么不能让外部来创建新对象呢
回复 使用道具 举报
代臣 黑马帝 2012-1-7 21:42:15
10#
jacktang 发表于 2012-1-7 20:56
你好  我现在不明白的是为什么要阻止建立对象..

工具类中除了函数就是函数,函数之间没有用到特有的数据,也就是没有必要让对象先存在并对那些特有数据进行初始化,这样,就没有必要创建对象了,进一步,为了让程序更加严谨从而阻止创建对象,直接利用“类名.静态成员”的方式调用就ok!
比如定义一个Person(人)类,首先Person有名字name、年龄age等等属性,这些就是特有数据,它里面定义的方法基本上都要用到这些特有数据,在调用Person类的方法之前必须让对象先存在,也就是先初始化,然后再对已经初始化的对象进行赋值什么的,希望你明白了。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马