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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 范龙波 高级黑马   /  2013-4-9 22:18  /  1933 人查看  /  17 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 范龙波 于 2013-4-9 23:57 编辑

class xuesheng
{
        private xuesheng(){};
        public static xuesheng x=new xuesheng();
        public static xuesheng getxuesheng()
        {
                return x;
        }
        private int age;
        public void setage(int age)
        {
                this.age=age;
        }
        public int getage()
        {
                return age;
        }
}
class yanshi
{
        public static void main(String[] args)
        {
                xuesheng a=xuesheng.getage();
                xuesheng b=xuesheng.getage();
               
                a.setage(22);                                                              /*我看视频基本思想懂了可是到这个地方卡可了我如果将class xuesheng 编程唯一类之后 a.setage(22)无法重静态上下文/中引用非静态方法怎么解决?,我想要a.setage(22)这个功能还想让上面的class xuesheng 保证唯一性不被别人建立,应该怎么做*/
                System.out.println(b.getage());
        }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

17 个回复

倒序浏览
求解释谢谢了。
回复 使用道具 举报
  //注意类名大小,最好采用与之对应的英文名,xuesheng改作Student更好,方法名最好采用驼峰命名法如setAge(),getXueSheng();刚开始学养成好的编程习惯很重要

public static void main(String[] args)
        {
                xuesheng a=xuesheng.getage();   //你编译通不过吧。这里明显不对哦.
                xuesheng b=xuesheng.getage();
               
                a.setage(22);          //在这里调用setage()方法 是可以的,因为它是属于对象的,a是xuesheng对象自然没问题                                                
                System.out.println(b.getage());
        }

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
田磊阳 + 1
范龙波 + 1 谢谢帮助受教了

查看全部评分

回复 使用道具 举报
本帖最后由 范龙波 于 2013-4-9 23:00 编辑
谢达 发表于 2013-4-9 22:48
//注意类名大小,最好采用与之对应的英文名,xuesheng改作Student更好,方法名最好采用驼峰命名法如setAge ...

谢谢,以后改正 可是
xuesheng a=xuesheng.getage();   //你编译通不过吧。这里明显不对哦.
                                                 //这个位置是哪里出问题了我看视频上的代码是这样的啊。我的getage()方法也是静态的啊。
xuesheng b=xuesheng.getage();   
回复 使用道具 举报
最好能给我把完整的代码复制下,帮我改一下谢谢了。
回复 使用道具 举报
你这个代码有错误O . O所有我也看了半天没明白你的意思。先说说你的错误吧。然你再理一下你的问题,看看我是否能替你解答

class xuesheng
{
        private xuesheng(){};
        public static xuesheng x=new xuesheng();
        public static xuesheng getxuesheng()
        {
                return x;
        }
        private int age;
        public void setage(int age)
        {
                this.age=age;
        }
        public int getage()
        {
                return age;
        }
}
class yanshi
{
        public static void main(String[] args)
        {
                xuesheng a=xuesheng.getage();//错误的地方是在别的类里面,无法直接通过类名.方法
                xuesheng b=xuesheng.getage();();//错误的地方是在别的类里面,无法直接通过类名.方法
                //然后,就算你是要将数值传送给a和b,那么他们的类型也只能是int,因为getage()方法返回值是int类型,所有这里出错了,至于你的问题,我还是没法看懂你在问的什么
               
                a.setage(22);                                
               System.out.println(b.getage());
        }
}


评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
田磊阳 + 1
范龙波 + 1 谢谢

查看全部评分

回复 使用道具 举报
如果修改你的代码,那么就是如下:
class xuesheng
{
        private xuesheng(){};
        public static xuesheng x=new xuesheng();
        public static xuesheng getxuesheng()
        {
                return x;
        }
        private int age;
        public void setage(int age)
        {
                this.age=age;
        }
        public int getage()
        {
                return age;
        }
}
class yanshi
{
        public static void main(String[] args)
        {
                int a=xuesheng.x.getage();
                int b=xuesheng.x.getage();
               
              xuesheng.x.setage(22);  //修改了以后就是这样。但是,你这个毫无意义啊已经给定了b的值,然后在下面给他传入值是不被保存的,那么你下面输出的也只会是0.。除非。你把我修改的这句话放在第一行或者int a=xuesheng.x.getage();下面。这样能保证b输出的22;                                               
                System.out.println(b.getage());
        }
}


评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
李凯 发表于 2013-4-9 23:05
你这个代码有错误O . O所有我也看了半天没明白你的意思。先说说你的错误吧。然你再理一下你的问题,看看我 ...

我的意思是通过a向classxuesheng里面传值然后在通过b.getage打印出来。
xuesheng a=xuesheng.getage() 为什么无法通过类名访问方法啊?我的方法是静态的啊。
回复 使用道具 举报
你用的是单例模式 所以我们在主函数里面是不能建议对象的.
单例模式原理就是为了保证对象的唯一性.
  1. package ketangcode111;

  2. class xuesheng
  3. {
  4.         private xuesheng(){};
  5.         public  final static xuesheng x=new xuesheng();  // 在这里加上 final  ,声明此对象是最终对象. 不可以被修改和建立  如果将public改为 private
  6. 更 好 ,安全性将更高
  7.         public static xuesheng getxuesheng()
  8.         {
  9.                 return x;
  10.         }
  11.         private int age;
  12.         public void setage(int age)
  13.         {
  14.                 this.age=age;
  15.         }
  16.         public int getage()
  17.         {
  18.                 return age;
  19.         }
  20. }
  21. class yanshi
  22. {
  23.         public static void main(String[] args)
  24.         {
  25.            
  26.                           xuesheng s=xuesheng.getxuesheng();  //由于上面将获取对象的方法设为了公共的. 而且是静态的, 依照静态的属性,我们是可以用类名调用公共的静态方法
  27.                          s.setage(22);  //如果想要调用getage这个方法,我们首先要调用setage来进行对其赋值,然后就可以直接调用getage方法.
  28.                          int ss=s.getage();
  29.                           System.out.println( ss);
  30.                           
  31.         }
  32. }
复制代码

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
田磊阳 + 1
范龙波 + 3 很给力!谢谢。

查看全部评分

回复 使用道具 举报
哦,明白你的意思了,来修改你的代码你的代码,那么就是如下:
class xuesheng
{
        private xuesheng(){};
        public static xuesheng x=new xuesheng();
        public static xuesheng getxuesheng()
        {
                return x;
        }
        private int age;
        public void setage(int age)
        {
                this.age=age;
        }
        public int getage()
        {
                return age;
        }
}
class yanshi
{
        public static void main(String[] args)
        {
                  xuesheng a=xuesheng.x;//得到在你在xuesheng里面创建的对象x
                 a.setage(22);//给定对象a的setage方法参数22
                  xuesheng b=xuesheng.x;//创建对象b
                             System.out.println(b.getage());//读取b里面的参数,然后输出,结果是22;
                   }
}
对于你的问题。因为class yanshi,这是另一个类,在另一个类中是无法直接调用对象xuesheng的。因为你创建了初始化对象  public static xuesheng x=new xuesheng();所有能使用xuesheng.x的方式调用从而得到对象。

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
范龙波 + 1 很给力!
田磊阳 + 1 谢谢耐心的回复···再奖励

查看全部评分

回复 使用道具 举报
胡峰 发表于 2013-4-9 23:18
你用的是单例模式 所以我们在主函数里面是不能建议对象的.
单例模式原理就是为了保证对象的唯一性. ...

谢谢,找到错误了。我的意思是这个;
class xuesheng
{
        private xuesheng(){};
        public static xuesheng x=new xuesheng();
        public static xuesheng getxuesheng()
        {
                return x;
        }
        private int age;
        public void setage(int age)
        {
                this.age=age;
        }
        public int getage()
        {
                return age;
        }
}
class yanshi
{
        public static void main(String[] args)
        {
                xuesheng a=xuesheng.getxuesheng();  /*问题出在了这里上面我写的是xuesheng a=xuesheng.getage 了这弄错了*/
                xuesheng b=xuesheng.getxuesheng();
               
                a.setage(22);
                System.out.println(b.getage());
               
        }
}      //原因我已经找到了

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1 追根问底是学习的最好法宝

查看全部评分

回复 使用道具 举报
xuesheng a=xuesheng.getxuesheng();
xuesheng b=xuesheng.getxuesheng();
改成这样?代码有点看不懂.但是你这也不是把age传到对象里,只是a,b指向的同一个对象地址
回复 使用道具 举报
arthur 发表于 2013-4-9 23:43
xuesheng a=xuesheng.getxuesheng();
xuesheng b=xuesheng.getxuesheng();
改成这样?代码有点看不懂.但是你 ...

嗯,对就是指向同一个对象把数传进a通过b打印出来表达的不正确了引起误会了Sorry.
回复 使用道具 举报
本帖最后由 、__WSD吴少东 于 2013-4-9 23:55 编辑
  1. private xuesheng(){};//一个方法的结尾要么是大括号,要么是分好
复制代码
回复 使用道具 举报
、__WSD吴少东 发表于 2013-4-9 23:51

我的那个private xuesheng(){};不是方法是私有化类 不让别人建立这个类。
回复 使用道具 举报
范龙波 发表于 2013-4-10 00:00
我的那个private xuesheng(){};不是方法是私有化类 不让别人建立这个类。

呃..               
回复 使用道具 举报
李凯 发表于 2013-4-9 23:22
哦,明白你的意思了,来修改你的代码你的代码,那么就是如下:
class xuesheng
{

正解.....
回复 使用道具 举报
l老兄你的代码有点错误:

xuesheng a=xuesheng.getage();
xuesheng b=xuesheng.getage();

(1)xuesheng.getage();返回值是int,,而不是xuesheng 对象呵呵

(2)注意下类名书写规范呵呵,,类名写成 XueSheng 就好

类名接口名:多单词组成时,所有单词的首字母大写。
XxxYyyZzz

下面我自己修改了下你的代码:

          //获得一个xuesheng对象,,这里只能获得一个xuesheng对象
         xuesheng a=xuesheng.x;
          a.setage(22);                                                            
          System.out.println(a.getage());
输出:22

评分

参与人数 1黑马币 +1 收起 理由
范龙波 + 1 赞一个! 谢谢明白了

查看全部评分

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