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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 石好强   /  2012-4-1 18:28  /  4120 人查看  /  25 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

因为void setNum( int num)这句话中的num接收了一个外部的变量进来,你的语句this.num = num;
中就是把接收到的值赋给了你定义的静态num。
回复 使用道具 举报
邓飞飞 发表于 2012-4-2 06:21
class Single
{

谢谢回答。你和我都误解了,这里的确不能用this.或者super.来修饰,因为静态先于对象存在,此时使用this.和super来代表引用对象,是会报错的。而private Single(); 本身是不能用静态来修饰的,这个你可以试试。我想是因为类加载的时候本身private Single(); 也和静态一起存在于方法区了吧,这个我是这样认为的,还不是太透彻。
回复 使用道具 举报
看了这你应该会明白的
Static关键字是什么?
1,        它是一个修饰符,只能修饰成员(成员变量和局部变量)。
2,        被static修饰的成员变量的数据,可以被对象们所共享。
3,        被静态修饰的成员多了一种调用方式,除了被对象调用以外,还可以被类名直接调用。
4,        静态之所以可以被类名调用,那是因为,静态成员是随着类的加载而加载进内存的。(非静态是随着对象的加载而加载进内存的)。
5,        在对象中存储的数据是特有数据,被static修饰的是共享数据。
6,        静态的优先于对象加载进内存。
静态的注意事项?
1,        静态成员函数只能访问类中的静态成员,不能访问非静态。
非静态方法即可访问静态,也可以访问非静态。
2,        静态方法中不可以定义this、super关键字。
因为静态优先于对象存在。所以静态方法中不可以出现this。
3,        主函数也是静态的。
回复 使用道具 举报
首先你需要看懂静态使用的注意事项:
1.只能访问静态成员
非静态都可以访问
2.静态方法中不能出现this.super关键字
我给你个代码示例:
class Person
{
        String name;
        一、public static void show()
                {
                        System.out.println("haha");//show方法中没有访问到了非静态
                                                                                //的数据name,定义Static
                }
        二、public void show()
                {
                        System.out.println(name+"haha");//show方法中访问到了非静态
                                                                                //的数据name,不能定义Static
                }
}

class StaticDemo
{
        一、Person.show();
        二、Person p = new Person();
                p.show();
}
那么该功能可以定义成静态的。
*/
回复 使用道具 举报

class Single

{


        static private int num ;

        
        static void setNum( int nu)    //求解此处为何不能 静态。明明上面num就是静态的啊

        {

                num = nu;

        
        }

        
         private Single()

        {

                setNum(20);

        }

        
         static private Single s = new Single();

        
        public static Single getInstance()

        {

                return s;   

        }                        
                                       
        
        static  int getNum()

        {

                return num;

        
        }

        
        

}


class  SingleDemo

{

        public static void main(String[] args)
        {

                Single s1 =Single.getInstance();         
                Single s2 = Single.getInstance();
                Single s3 = Single.getInstance();//s1, s2 , s3 其实都是同一个对象。

               
                System.out.println("num="+Single.getNum());

                System.out.println("s1.num="+s1.getNum());

                System.out.println("s2.num="+s2.getNum());

               
                Single.setNum(22);

               
                System.out.println("num="+Single.getNum());

                System.out.println("s1.num="+s1.getNum());

                System.out.println("s2.num="+s2.getNum());

               
               
        }

}
可以使静态啊
回复 使用道具 举报
this是动态的,与静态static相冲突,二者只能用其一!
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马