黑马程序员技术交流社区

标题: 一个小疑惑 [打印本页]

作者: 杨杨    时间: 2013-3-6 11:14
标题: 一个小疑惑
  1. public   class  Test{
  2.         //private  String x="";
  3.         private static String x="";

  4.         public String getX() {
  5.                 return x;
  6.         }

  7.         public void setX(String x) {
  8.                 this.x = x;
  9.         }
  10.         public static void main(String[] args) {
  11.                 this.x="abc";//为什么不能用这个变量呢???
  12.         }
  13. }
  14.           
复制代码

作者: BitmapFactory    时间: 2013-3-6 11:29
  1. public   class  Test{
  2.     //private  String x="";
  3.     private static String x="";

  4.     public String getX() {
  5.             return x;
  6.     }

  7.     public void setX(String x) {
  8.             this.x = x;
  9.     }
  10.     public static void main(String[] args) {
  11.         Test t = new Test();
  12.         t.setX("abc"); //就该这样赋值
  13.         
  14.             //this.x="abc";//为什么不能用这个变量呢???
  15.     }
  16. }
复制代码
this:就代表本类的对象,代表它所在函数所属对象的引用
简单说:哪个对象在调用this所在的函数,this就代表哪个对象
this的应用:当定义类中功能时,该函数内部要用到调用该函数的对象时,这时用this来表示这个对象,但凡本类功能内部使用了本类对象,都用this表示.

作者: 张豪杰    时间: 2013-3-6 11:39
你要注意,你的main函数是个静态方法
静态方法中不可以定义this,super关键字,因为静态优先于对象存在,所以静态方法中不可以出现this和super。
所以this.x = "abc";这句话就有语法错误
你的代码中,main方法和x都属于Test类里面的静态成员,成员方法可以直接调用类变量
可以把this.x = "abc改成 x="abc";
如果main方法不是在Test类里面,则可以直接类名调用不是private权限的静态成员

作者: 杨杨    时间: 2013-3-6 11:59
张豪杰 发表于 2013-3-6 11:39
你要注意,你的main函数是个静态方法
静态方法中不可以定义this,super关键字,因为静态优先于对象存在,所 ...

x="abc"也不对吧 你测试过了吗求代码
作者: 杨杨    时间: 2013-3-6 12:03
  1. package cn.itcast.day1;

  2. import java.io.File;
  3. import java.util.ArrayList;
  4. import java.util.Arrays;
  5. import java.util.Collections;
  6. import java.util.List;
  7. import java.util.Scanner;

  8. public   class  Test{
  9.         public int getX() {
  10.                 return x;
  11.         }
  12.         public void setX(int x) {
  13.                 this.x = x;
  14.         }
  15.         private int x;
  16.         public  void main(String[] args) {
  17.                 this.x=x;
  18.         }
  19. }
  20.           
复制代码
这样貌似可以
但是下面这样就不可以了
package cn.itcast.day1;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
import java.util.Stack;

public   class  Test{
        public int getX() {
                return x;
        }
        public void setX(int x) {
                this.x = x;
        }
        private static int x;
        public static void main(String[] args) {
                x="abc";
        }
}
          
作者: 张卫刚    时间: 2013-3-6 12:52
访问静态变量方法:
        法1:类名.静态成员
        法2:对像.静态成员        哪个对象在调用this所在的函数,this就代表哪个对象,
而你的变量私有化了,又没有创建对象,那你的this.x="abc"; 这个this代表一个对象,但你对象又没创建,你就访问静态变量当然出错啦

作者: 张豪杰    时间: 2013-3-6 13:23
杨杨 发表于 2013-3-6 11:59
x="abc"也不对吧 你测试过了吗求代码
  1. public   class  Test{
  2.     //private  String x="";
  3.     private static String x="";

  4.     public String getX() {
  5.             return x;
  6.     }

  7.     public void setX(String x) {
  8.             this.x = x;
  9.     }
  10.     public static void main(String[] args) {
  11.            x="abc";//这里怎么就不可以了?类中的静态方法访问类中的静态成员,难道还要去建立对象调用么?
  12.            System.out.println(x);
  13.     }
  14. }
  15.      
复制代码
我发誓,我这里输出的就是abc!
作者: 李永科    时间: 2013-3-6 13:58
张学林 发表于 2013-3-6 11:29
this:就代表本类的对象,代表它所在函数所属对象的引用
简单说:哪个对象在调用this所在的函数,this就代表哪 ...

变量x你定义的是private修饰的,对外是不可见的,先那些可以直接调用属性或方法的话,是直接使用类名.属性或类名.方法名(注意要直接调用的属性或方法不但要用static修饰,同时还需要用public就行修饰);
作者: 李永科    时间: 2013-3-6 14:03
package com.itheima;

public class Test12 {
         //private  String x="";
    public  static String x="";//用public修饰

    public String getX() {
            return x;
    }

    public void setX(String x) {
            this.x = x;
    }
    public static void main(String[] args) {
            Test12.x="abc";//为什么不能用这个变量呢???正确答案:要用类名.变量名的形式来使用静态的类成员;
            System.out.println( Test12.x);
    }
}
     
作者: 杨杨    时间: 2013-3-6 14:51
张豪杰 发表于 2013-3-6 13:23
我发誓,我这里输出的就是abc!

确实可以我弄错了




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