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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨杨 中级黑马   /  2013-3-6 11:14  /  2053 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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.           
复制代码

9 个回复

倒序浏览
  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表示.
回复 使用道具 举报
你要注意,你的main函数是个静态方法
静态方法中不可以定义this,super关键字,因为静态优先于对象存在,所以静态方法中不可以出现this和super。
所以this.x = "abc";这句话就有语法错误
你的代码中,main方法和x都属于Test类里面的静态成员,成员方法可以直接调用类变量
可以把this.x = "abc改成 x="abc";
如果main方法不是在Test类里面,则可以直接类名调用不是private权限的静态成员
回复 使用道具 举报
张豪杰 发表于 2013-3-6 11:39
你要注意,你的main函数是个静态方法
静态方法中不可以定义this,super关键字,因为静态优先于对象存在,所 ...

x="abc"也不对吧 你测试过了吗求代码
回复 使用道具 举报
  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";
        }
}
          
回复 使用道具 举报
访问静态变量方法:
        法1:类名.静态成员
        法2:对像.静态成员        哪个对象在调用this所在的函数,this就代表哪个对象,
而你的变量私有化了,又没有创建对象,那你的this.x="abc"; 这个this代表一个对象,但你对象又没创建,你就访问静态变量当然出错啦
回复 使用道具 举报
杨杨 发表于 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 11:29
this:就代表本类的对象,代表它所在函数所属对象的引用
简单说:哪个对象在调用this所在的函数,this就代表哪 ...

变量x你定义的是private修饰的,对外是不可见的,先那些可以直接调用属性或方法的话,是直接使用类名.属性或类名.方法名(注意要直接调用的属性或方法不但要用static修饰,同时还需要用public就行修饰);
回复 使用道具 举报
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);
    }
}
     

评分

参与人数 1技术分 +1 收起 理由
张庚 + 1

查看全部评分

回复 使用道具 举报
张豪杰 发表于 2013-3-6 13:23
我发誓,我这里输出的就是abc!

确实可以我弄错了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马