黑马程序员技术交流社区

标题: 静态static 问题 [打印本页]

作者: HM何伟    时间: 2013-3-25 21:10
标题: 静态static 问题
请问一下,这段代码为什么编绎会失败啊?
有什么方法可以访问到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-25 21:39
System.out.println(StaticTest.name);
name属性不是static的不能通过类名访问,只能通过对象才能访问

而s是静态的,可以通过类名访问,也可以通过对象访问,推荐通过类名访问
作者: 桉树    时间: 2013-3-25 22:00
在静态的方法中是不能访问非静态的属性的。
而且非静态方法和属性必须创建类才能访问的。
{:soso_e128:}
作者: HM何伟    时间: 2013-3-25 23:09
有什么方法可以访问到method中的那个name么?请把代码,呈上

作者: 李游    时间: 2013-3-27 00:04
  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、建议不要在静态区去访问非静态属性
作者: 刘胜寒    时间: 2013-3-27 09:27
method();方法是被静态修饰的,所以只能访问被静态修饰的的变量,这一点在毕老师的java25天基础视频里面有说过。非常建议楼主采用kongbei  的第一种方法,第二中是静态方法好像只能访问被静态修饰的变量;
作者: 程宁宁    时间: 2013-3-27 12:01
你把name属性 设置为static就可以了.
原因:
  非静态属性是不能用类名直接访问的.而需要具体的实例才可以调用.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2