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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 石好强 中级黑马   /  2012-4-11 13:07  /  3202 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

视频中讲到,一个类不能创建实例对象,首先应该想到应该提供一个方法,这个方法要是静态类型,而且返回值类型应该是本类类型,为什么?

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

7 个回复

倒序浏览
是单例模式吧  你这个类都不能创建对象了,别的类要调用该类对象就应该提供一个方法来获得该类的对象, 方法必须是静态的,这样可以通过类名调用该方法,如果不静态修饰,这个类既不可以创建对象(在本类以外),方法也调用不了; 调用该方法的作用就是获得该类型的对象,所以返回类型是本类类型

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
1,。为了避免其他程序多建立该类对象。先进制其他程序建立该类对象
2。还未了让其他程序反问改类对象。只好在本类中。自定义一个对象
3。为了方便其他程序对自定义对象的访问。可以对外提供一些访问方式
回复 使用道具 举报


class Single
{

        private int num;

        public void setNum(int num)
        {
                this.num=num;
        }

        public int getNum()
        {
                return num;
        }
         private Single(){}
        private static Single s=new Single();//这个是在方法区中,不再内存中

        public static  Single getSingle(s)//需要返回一个对象
        {
                return s;
        }
}
class  SingleDemo
{
        public static void main(String[] args)
        {
                Single s1=Single.getSingle();
                Single s2=Single.getSingle();
       
                //Single s1=new Single();
                //Single s2=new Single();
                s1.setNum(20);


                System.out.println(s2.getNum());


        }
}
这种情况是出现在在单例模式中。因为这是为了解决一个类中只存在一个对象的问题。
为了让其他程序访问到该类对象,所以在本类中自定义一个对象。为了使其他对对象的访问,
提供一些访问的方式。当你提供公有方法时,此时就是为了访问这对象,所以你提供的
方法返回类型是Single的(public  Single getSingle()),并且方法调用时,只有两种方法
要么建立对象,要么通过类名调用。此时不可以再建立对象,所以利用类名访问(类名访问必须声明方法为静态的)
(public static Single getSingle()),静态方法访类中成员,此时成员必须为静态的。
解释大体是这样的了.........
回复 使用道具 举报
单例模式。
顾名思义,就是只需要一个实例对象。所以讲他的构造方法进行私有化。
私有化之后想操作这个类中的属性和方法,首先不能new 对象了,所以我们就提供一个静态的方法,可以直接用类名调用。
这个方法里面就是对这个类进行实例化。方法返回的就是这个类的对象。
这种设计模式很常用。比如,日历类,比如Runtime类。
还有就是,懒汉模式时,需要注意同步。
回复 使用道具 举报
视频中讲到,一个类不能创建实例对象,首先应该想到应该提供一个方法,这个方法要是静态类型,而且返回值类型应该是本类类型,为什么?


这个方法要是静态类型
这是因为在单例设计模式中,只能有一个对象,不能再建立其他对象,所以要调用该get方法,就只能使用
类名.静态方法名  的方式调用,这就要求该方法必须是被static修饰符所修饰


而且返回值类型应该是本类类型,为什么?

因为该方法的最终返回的是一个本类对象,所以返回值类型因该是本类类型
回复 使用道具 举报
   我们在定义类的时候,可能会遇到这样一种情况,我们只需要对该类的唯一一个对象进行操作。(视频中举的例子是
变更Editplus的背景色,每次更改(即每次操作),都会将选定的效果固定,好比操作的是同一个对象。)
为了达到此目的,首先要让这个类不能创建实例对象,那么让所有的构造函数私有化吧,于是外部不能new对象了。
但是唯一的那个对象怎么得来呢?
    办法是在类里面先创建好。因为如果从外部能创建,它能创建第一个,就有可能再造出第二个、、、
    好了,在类里面创建了一个对象,它将作为唯一的对象被提供出去,那么能将它提供出去的方法是什么样子的呢?
    方法要是静态类型:类中的方法要想被调用-----要么对象,要么类名。现在外面不能new对象了,
只好通过类名调用方法。而类名调用方法,这个方法就必须和类一起加载进内存。而方法只有是静态的才具备这个特点,所以
提供的方法必须是静态类型。
    返回值类型应该是本类类型:接着说对外提供的方法。我们建立这个方法的初衷是要将在本类中创建的对象作为唯一对象提供
出去让外面操作,外面操作这个对象可以通过操作该对象的引用来实现,所以提供的方法只需要将对象的引用作为返回值返回即可,
于是返回值的类型-------即对象引用的类型。对象引用指向本类对象,它的类型自然是本类类型,所以返回值的类型也是本类类型。

”单例“觉得可以这样理解:”单一的实例“。就像上面始终对一个对象进行操作的情况,它能有效地解决某一类问题。视频中老师说过:
解决某一类问题行之有效的方法,称之为模式。
单例设计模式:上面的朋友都讲过了~
回复 使用道具 举报
葛尧 中级黑马 2012-4-11 17:51:45
8#
因为该类不能创建对象,所以要调用里面的方法,就要是静态的了。
如果需要通过一个静态方法,来返回一个对象
首先 该方法 要有返回类型吧,没返回值怎么获取对象
然后 获取的类型当然就是该对象的类型。。想想经常用的     类名 变量名 = new 类名(); 就知道了 "new 类名()"是个对象
能接收这个对象的就是  该"类型声明的变量"        

比如 int   test() {  return 1; }  该方法 返回值类型是int  返回的数就必须是一个整形数据       int x = test();             相当于int x = 1;
      static Test test(){ return new Test(); }   该方法返回值是Test类型  返回的是一个对象         对比上面 Test t = Test.test();      相当于Test t = new Test();
      
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马