2 t2045817161 t2045817161 于 2016.04.18 17:41 提问

成员变量的问题 static修饰符

图片说明

为什么成员变量s前面一定要加static,否则就报错

3个回答

caozhy
caozhy   Ds   Rxr 2016.04.19 03:38
 这个道理很简单,实例变量是每个对象实例都有的,而静态方法是一个类才有一个的。
看下面的代码
class Test
{
public int i;
static void foo()
{
println(i);
}
}
我们假设这代码是可以编译的
看如下调用
Test t1 = new Test();
t1.i = 1;
Test t2 = new Test();
t2.i = 2;
Test.foo(); //请问输出什么?输出1还是输出2?
magicioney
magicioney   2016.04.18 17:48

如果说类是模具,那对象就是模具压出来的月饼。静态的方法和属性就好比是模具的方法和属性。非静态的方法和属性,就好比是月饼的方法和属性。所有的这些都是自己调用自己的。月饼A自己的方法只能用月饼A自己的变量。同理,模具自己的方法,也只能调用模具自己的变量。

magicioney
magicioney   2016.04.18 17:45

静态方法里只能调用静态资源,你得main方法是静态方法,只能调用静态成员变量

java6218
java6218 赞成
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Java面向对象,static修饰符和特点
贝壳信息 2017-05-11 18:43 以上图春哥和凤姐为例,对象都有name和age两个状态,但是不同对象的name值和age的值是不一样的,也就是说:不同对象的name和age是不一样的。 Person p1 = new Person(); p1.name = "春哥"; p1.age = 31; Person p2 = new Person(); p2.name =
Static修饰符 , 成员变量 , 局部变量
Static修饰符的基本用法: (1)Static修饰的成员,随着所在类的加载而加载.   当JVM把字节码加载进JVM的时候,static修饰的成员已经在内存中存在了. (2)优先于对象存在:因为对象是我们手动通过new关键字创建出来的. (3)static修饰的成员被根据该类创建出来的所有对象共享. (4)static修饰的成员可以被所有该类的对象访问,也可以被类名直接访问.  
Java中的类修饰符,成员变量修饰符,函数修饰符
收录至网络 类修饰符: public(访问控制符),将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类。 abstract,将一个类声明为抽象类,没有实现的方法,需要子类提供方法实现。 final,将一个类生命为最终(即非继承类),表示他不能被其他类继承。 friendly,默认的修饰符,只有在相同包中的对象才能使用这样的类。    成员变量修饰符: pub
java中的修饰符final和static
1.final 修饰类时表明该类不能被继承,自然类中的方法默认是final型的。 2.final 修饰方法时不允许被子类覆盖,也就是可以被继承。一个final类中,一个final方法只能被实现一次。 public class Test1 { public final void show(){ System.out.println("this is super cl
Java的非访问控制符:static,final,abstract
非访问控制符 非访问控制符 基本含义 修饰类 修饰成员 修饰局部变量 static 静态的、非实例的(本质)、类的 可以修饰内部类 Yes final 最终的、不可改变的 Yes Yes Yes abstract 抽像的,不可实例的 Yes(修饰抽象的方法) Yes 控制符:staticstatic字段 静态字段最本质
类修饰符的含义 成员变量修饰符 成员方法修饰符的含义
类修饰符的含义 public  将一个声明为公共类,他可以被任何对象访问 abstract 将一个类声明为抽象类,没有实现方法,需要子类提供方法的实现,所以不能创建该类的实例 final 将一个类声明为最终类,即非继承类,表示 他不能被其他类继承 缺省 缺省修饰的时候,则表示在相同包类的对象才能够使用这样的类   成员变量修饰符的含义 public 公共访问控制符 指定该变量为公共的
Static修饰成员变量
Static修饰一个变量:表示这个变量是类范围内的属性,叫类变量;所有类对象共享一个这样的属性。也即是说创建一个对象的时候不会创建用static修饰的变量。语法如下 访问控制符 + static + 变量类型 +变量名;使用方法 类名.类变量名;使用案例: 对象计数器 public static int objCounter =0; puplic CounterObject() {
JAVA中static修饰成员变量时 和 不修饰成员变量时的区别 如下面的两个例子 的区别 为什么下面的是错误的
 static   static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。   被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对
Java接口成员变量和方法默认修饰符
Java接口成员变量和方法默认修饰符  Java的interface中,成员变量的默认修饰符为:public static final 所以我们在interface中定义成员变量的时候,可以 1:public static final String name = "张三"; 2:String name = "张三"; 以上两种都可以,老司机一般都是第二种。
static修饰符的作用及应用
/* static 修饰符 1.数据共享成员变量(实例变量)和静态变量(类变量)的区别 1.两个变量的生命周期不同 成员变量随对象的创建而存在,随对象被回收而释放 静态变量随类的加载而存在,随类的消失而消失 2.调用方式不同 成员变量只能被对象调用 静态变量还可以被类名调用 3.数据存储位置不同 成员变量–>堆内存的对象中,也叫对象的特有数据 静态变量–>方法区(共享数据区)的