static变量和public变量有什么区别?

gahade 2006-10-20 09:01:40
书上说声明static变量实际上就是声明public变量,但如果把原来声明的static变量改为public变量,再在static方法中调用的话就会报错.
请问应该怎样理解static和public呢?有什么区别?以及适用的场合.谢谢大家!
class Teststatic{
public int a = 3; //这里改为public就报错
static int b;

static void meth(int x){
System.out.println("x="+x);
System.out.println("a="+a);
System.out.println("b="+b*a);
}
static{
System.out.println("初始化!");
//b=a*4;
}
}


class Teststaticmain{
public static void main(String args[]){
Teststatic.b=5;
Teststatic.meth(42);

Teststatic ts = new Teststatic();
ts.meth(42);
Teststatic.meth(42);
}
}
...全文
1343 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhycc 2006-10-23
  • 打赏
  • 举报
回复
我觉得可以理解为static是对象的,public是实例的;

另外对于书中所写应该是理解的问题

ftiger 2006-10-22
  • 打赏
  • 举报
回复
class Teststatic{
public int a = 3; //这里改为public就报错
static int b;

你可以改成public static a=3;
因为你调用时没有实例化Teststatic,所以无法访问非static内容。
dennisslea 2006-10-22
  • 打赏
  • 举报
回复
你的书上如果说static是public的话,我建议你把你的书烧掉。不要再害你了!
jlu3389 2006-10-20
  • 打赏
  • 举报
回复
这个我问题至于讨论这么长吗?
bjsxt 2006-10-20
  • 打赏
  • 举报
回复
public static int a 和 static int a 不是一回事儿

前者是公共访问权限,后者是包访问权限,也就是说只有在同一个包内部的其他类才能访问!
比如

package a;
class T {
public static int a;
static int b;
}

另外一个类:

package b;

import a.T;

class M {
int c = T.a; //这句话没问题
int d = T.b //这句话有问题,不能编译,因为不能直接访问T中的b, T 和M 位于不同的包里
}

谢谢楼上上上的修正,应该是共享a,独有b的copy

****尚学堂教师,希望对大家有所帮助****
****http://www.bjsxt.com*****
gahade 2006-10-20
  • 打赏
  • 举报
回复
gahade(沙果) ( ) 信誉:100 Blog 2006-10-20 9:40:21 得分: 0

那public static int a;是不是等于static int a;或public int a;呢?

bjsxt() ( ) 信誉:100 Blog 2006-10-20 9:42:06 得分: 0

当然不是!!!!!

--------------------------------------------------------------------------------
to bjsxt()
不对吧,public static int a应该等于static int a吧.
比如
class Testpublicstatic{
static int a;
static{
a=10;
}
}

class Testmain{
public static void main(String args[]){
System.out.println("a="+Testpublicstatic.a);
Testpublicstatic ob = new Testpublicstatic();
ob.a=20;
System.out.println("ob.a="+ob.a);
System.out.println("a="+Testpublicstatic.a);
}
}
结果是:
a=10
ob.a=20
a=20


gahade 2006-10-20
  • 打赏
  • 举报
回复
to 175cm(hanhui)
那么, t中有一个a, t1中也有一个a, 但是他们两个共享b
-----------------------------------------------------------------
怎么是两个共享b呢?应该是共享a吧,b是两个都有一个拷贝
175cm 2006-10-20
  • 打赏
  • 举报
回复
class T {
static int a;
int b;
}

T t = new T():
T t1 = new T();

那么, t中有一个a, t1中也有一个a, 但是他们两个共享b

这就是static的含义, 跟public 没有任何的联系!!!!!!!!!!
---------------------------------------------------------
这样的啊,没反吗,小弟也新学java.
yang6n 2006-10-20
  • 打赏
  • 举报
回复
两个关键字的意义不同,怎么能比呢?
static 是静态方法,只应该使用静态变量
alanfan2006 2006-10-20
  • 打赏
  • 举报
回复
一个是访问控制符,一个是非访问控制符,没有可比性
Tensionli 2006-10-20
  • 打赏
  • 举报
回复
static是一个静态变量,在内存中只存在一个,可以被所有的对象访问,public如果有多个对象时会有多个副本。
seesea10523 2006-10-20
  • 打赏
  • 举报
回复
同意"北京尚学堂教师"
学习Java中 2006-10-20
  • 打赏
  • 举报
回复
java2.pdf第124页中写道"声明为static的变量实质上就是全局变量",全局变量不就是public变量嘛.
===================================================
看看书吧
meil 2006-10-20
  • 打赏
  • 举报
回复
public static int a;没有这种写法,static本身就是全局
static int a;对当前全体用户全局的
public int a;对当前用户程序是全局的
bjsxt 2006-10-20
  • 打赏
  • 举报
回复
请看下面的代码:

class T {
static int a;
int b;
}

T t = new T():
T t1 = new T();

那么, t中有一个a, t1中也有一个a, 但是他们两个共享b

这就是static的含义, 跟public 没有任何的联系!!!!!!!!!!

hdhmail2000 2006-10-20
  • 打赏
  • 举报
回复
两个不是一类
public的说明类的外部可以使用此变量
static是静态的,他修饰的变量一直存在
如:
static int i=0;
public int j=0;
public void test()
{
i++;
}
调用这个函数后,i的值会改变的。public没有这个作用,只是说明别的类可以访问到j
bjsxt 2006-10-20
  • 打赏
  • 举报
回复
当然不是!!!!!

****北京尚学堂教师,希望对您有所帮助*****
****www.bjsxt.com****
gahade 2006-10-20
  • 打赏
  • 举报
回复
那public static int a;是不是等于static int a;或public int a;呢?
meil 2006-10-20
  • 打赏
  • 举报
回复
***
本质的区别:
public:需要使用对象来引用
static:直接使用类名来引用,就是说不需要声明类的对象
bjsxt 2006-10-20
  • 打赏
  • 举报
回复
不是, 他们两个没有联系, 也没有任何共通点, 一个static变量可以是pubic private protected default任意一种
****北京尚学堂教师,希望对您有所帮助*****
****www.bjsxt.com****
加载更多回复(17)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧