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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 闫杏荣 黑马帝   /  2012-6-4 11:00  /  3014 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 闫杏荣 于 2012-6-4 11:02 编辑

为什么不能在主函数中定义私有变量,编译会报错。
私有变量的作用域不是在本类中有效么?

package yxrong;
class SetDemo {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
  private int x=9;
  System.out.println(x);
  
}
}



5 个回复

倒序浏览
private是修饰类的成员和类的,不能修饰方法中的局部变量

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
你在main函数中定义的变量,属于局部变量,是为main方法所服务,作用域就是main方法体中,不存在私有来修饰它。修饰符可以修饰类中的成员变量。

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
private修饰的变量或者方法,只能在该类内部被访问。

private修饰的属性就可以把属性隐藏在类的内部,这样就可以将属性进行有效的封装,一般是在类的主体中定义。

而main方法是方法的主体,在main方法中定义的变量的作用范围只是main方法本身,出了main方法就无法使用,因此在main方法中定义private变量没有任何意义。

而且不仅是main方法,一个类中的普通方法内也是不能定义private变量的,会提示参数的修饰符不合法。无论是什么方法,在方法内定义的变量的作用域只存在于方法主体内部,因此private没有任何意义
回复 使用道具 举报
本帖最后由 杨永峰 于 2012-6-4 11:42 编辑
  1. class PrvTest{

  2.         public static void main(String[] args){
  3.                 //private int x = 0;///静态方法中,编译错误:非法表达式的开始
  4.                 //public int x = 0;///静态方法中,编译错误:非法表达式的开始
  5.                 int y = 0;
  6.                 final int X = 0;
  7.                 //static int z = 1;///静态方法中,编译错误:非法表达式的开始
  8.                 System.out.println(X+z);
  9.                 Unstatic us = new Unstatic();
  10.                 us.field();
  11.         }
  12.         
  13. }
  14. class Unstatic{
  15.         public void field(){
  16.                 //private int a = 0;///非静态方法中,编译错误:非法表达式的开始
  17.                 //public int a = 0;///非静态方法中,编译错误:非法表达式的开始
  18.                 int b = 0;
  19.                 final int A = 0;
  20.                 //static int c = 1;///非静态方法中,编译错误:非法表达式的开始
  21.                 System.out.println(A+c);
  22.         }
  23. }
复制代码
private、public是标示所修饰东东的被访问的权限,由于方法区中的变量的权限是确定的,其有效范围是所在方法的内部,只有这一种形式,所以变量只有不带任何权限修饰符的这种默认方式。
static 是用于标示所修饰东东是否存储于 方法区中,由于定义方法的时候,方法所属的内存在哪儿开辟已经确定了,所以在方法内部的变量是否在方法区存储也已经确定了,不允许再次定义也就可以接受了。
final 用于标示所修饰东东的和所指向具体值的绑定关系,自然可以在方法中修饰局部变量。
总之,我们只能按照编译器已定的规格来办事,不这样就会挂掉。
回复 使用道具 举报
private 是用于修饰成员变量的,成员变量应该定义在函数外的类中。 函数里定义的变量为局部变量,不能以private,public等修饰符修饰!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马