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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HM何伟 中级黑马   /  2013-3-25 21:10  /  1443 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问一下,这段代码为什么编绎会失败啊?
有什么方法可以访问到method方法中的name?
  1. class StaticTest{
  2.         String name="张三";
  3.         static String s="李四";
  4.         void function()
  5.         {
  6.                 System.out.println(name);
  7.                 System.out.println(s);
  8.         }
  9.         static void method()
  10.         {
  11.                 System.out.println(StaticTest.name);
  12.                 System.out.println(s);
  13.        
  14.         }
  15. }
  16. class StaticTestDemo{

  17.         public static void main(String[] args){
  18.                 StaticTest t=new StaticTest();
  19.                 t.function();
  20.                 StaticTest.method();
  21.         }
  22. }
复制代码

点评

 如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-27 13:27

评分

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

查看全部评分

6 个回复

倒序浏览
System.out.println(StaticTest.name);
name属性不是static的不能通过类名访问,只能通过对象才能访问

而s是静态的,可以通过类名访问,也可以通过对象访问,推荐通过类名访问
回复 使用道具 举报
在静态的方法中是不能访问非静态的属性的。
而且非静态方法和属性必须创建类才能访问的。
{:soso_e128:}

评分

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

查看全部评分

回复 使用道具 举报
有什么方法可以访问到method中的那个name么?请把代码,呈上
回复 使用道具 举报
  1. class StaticTest{
  2.         String name="张三";
  3.         static String s="李四";
  4.         void function()
  5.         {
  6.                 System.out.println(getName());
  7.                 System.out.println(s);
  8.         }
  9.         static void method()
  10.         {
  11.                 System.out.println(new StaticTest().getName());
  12.                 System.out.println(s);
  13.       
  14.         }
  15.         
  16.                 public String getName() {
  17.                         return name;
  18.                 }
  19.                 public void setName(String name) {
  20.                         this.name = name;
  21.                 }
  22.         
  23.         
  24. }
  25. public class StaticTestDemo{

  26.         public static void main(String[] args){
  27.                 StaticTest t=new StaticTest();
  28.                 t.function();
  29.                 StaticTest.method();
  30.         }
  31. }
复制代码
1、建议给非静态属性都添加get和set方法,当访问属性是都通过其get或者set方法去设置和访问
2、建议不要在静态区去访问非静态属性

评分

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

查看全部评分

回复 使用道具 举报
method();方法是被静态修饰的,所以只能访问被静态修饰的的变量,这一点在毕老师的java25天基础视频里面有说过。非常建议楼主采用kongbei  的第一种方法,第二中是静态方法好像只能访问被静态修饰的变量;

评分

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

查看全部评分

回复 使用道具 举报
你把name属性 设置为static就可以了.
原因:
  非静态属性是不能用类名直接访问的.而需要具体的实例才可以调用.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马