JAVA中类中的实例方法可以操作类变量(static变量)吗?类方法(static方法)可以操作实例变量吗?

作者&投稿:蓟平 (若有异议请与网页底部的电邮联系)
类中的实例方法可以操作类变量吗?~

1.类中的实例方法可以操作类变量
因为类总是先于实例存在的 实例只是类在特定状态下的一个特定对象 所以必须类存在 才能从类创建实例 所以实例方法可以操作类变量 因为类变量肯定存在
2.类方法不可以操作实例变量
因为类方法的作用域在类上 类本身并不知道自己被创建了多少实例 这些实例哪些还存在 所以类方法没有办法访问到实例变量

实例方法随着实例的产生而产生,随着实例的消亡而消亡。
并且实例方法是存储在内存中的堆中的,每一个实例,就在内存中存在一个该方法的副本
类方法是static的,和实例没有关系,存储在栈中,多个实例共享一个类方法。
类如果直接调用方法,由于在内存中没有初始化,内存中不存在实例方法,所以类不能调用实例方法。

对于补充的回答:
class A调用class B
class A{
public void funA(){}
}
class B{
public void funB(){
A a=new A();
a.funA();//调用A的方法
}
}
方法的初始化的时候,程序自动会给方法分配内存,不用像成员变量那样还要赋初值。所以方法初始化,楼主可以不用管。

实例方法可以操作类变量
类方法(static方法)不可以操作实例变量

静态方法

通常,在一个类中定义一个方法为static,那就是说,无需本类的对象即可调用此方法。如下所示:

class Simple{
static void go(){
System.out.println("Go...");
}
}
public class Cal{
public static void main(String[] args){
Simple.go();
}
}

调用一个静态方法就是“类名.方法名”,静态方法的使用很简单如上所示。一般来说,静态方法常常为应用程序中的其它类提供一些实用工具所用,在Java的类库中大量的静态方法正是出于此目的而定义的。

静态变量

静态变量与静态方法类似。所有此类实例共享此静态变量,也就是说在类装载时,只分配一块存储空间,所有此类的对象都可以操控此块存储空间,当然对于final则另当别论了。看下面这段代码:

class Value{
static int c=0;
static void inc(){
c++;
}
}
class Count{
public static void prt(String s){
System.out.println(s);
}
public static void main(String[] args){
Value v1,v2;
v1=new Value();
v2=new Value();
prt("v1.c="+v1.c+" v2.c="+v2.c);
v1.inc();
prt("v1.c="+v1.c+" v2.c="+v2.c);
}
}

结果如下:

v1.c=0 v2.c=0
v1.c=1 v2.c=1

由此可以证明它们共享一块存储区。static变量有点类似于C中的全局变量的概念。值得探讨的是静态变量的初始化问题。我们修改上面的程序:

class Value{
static int c=0;
Value(){
c=15;
}
Value(int i){
c=i;
}
static void inc(){
c++;
}
}
class Count{
public static void prt(String s){
System.out.println(s);
}
Value v=new Value(10);
static Value v1,v2;
static{
prt("v1.c="+v1.c+" v2.c="+v2.c);
v1=new Value(27);
prt("v1.c="+v1.c+" v2.c="+v2.c);
v2=new Value(15);
prt("v1.c="+v1.c+" v2.c="+v2.c);
}

public static void main(String[] args){
Count ct=new Count();
prt("ct.c="+ct.v.c);
prt("v1.c="+v1.c+" v2.c="+v2.c);
v1.inc();
prt("v1.c="+v1.c+" v2.c="+v2.c);
prt("ct.c="+ct.v.c);
}
}

运行结果如下:

v1.c=0 v2.c=0
v1.c=27 v2.c=27
v1.c=15 v2.c=15
ct.c=10
v1.c=10 v2.c=10
v1.c=11 v2.c=11
ct.c=11

这个程序展示了静态初始化的各种特性。如果你初次接触Java,结果可能令你吃惊。可能会对static后加大括号感到困惑。首先要告诉你的是,static定义的变量会优先于任何其它非static变量,不论其出现的顺序如何。正如在程序中所表现的,虽然v出现在v1和v2的前面,但是结果却是v1和v2的初始化在v的前面。在static{后面跟着一段代码,这是用来进行显式的静态变量初始化,这段代码只会初始化一次,且在类被第一次装载时。如果你能读懂并理解这段代码,会帮助你对static关键字的认识。在涉及到继承的时候,会先初始化父类的static变量,然后是子类的,依次类推。

通常一个普通类不允许声明为静态的,只有一个内部类才可以。这时这个声明为静态的内部类可以直接作为一个普通类来使用,而不需实例一个外部类。如下代码所示:

public class StaticCls{
public static void main(String[] args){
OuterCls.InnerCls oi=new OuterCls.InnerCls();
}
}
class OuterCls{
public static class InnerCls{
InnerCls(){
System.out.println("InnerCls");
}
}
}

输出结果会如你所料:

InnerCls

和普通类

实例方法可以操作类变量(static变量),也叫类的静态变量。
static方法不能操作实例变量。

原因很简单,实例变量(或实例方法)是要有类的实例才能访问的,即先要new一个对象,才能访问。
而static方法或变量,不需要创建对象,直接通过类名访问,所以它不能访问实例变量。


java小程序 会的请进
你视频里class Dog() 肯定不是作为内部类存在的,你给出的代码把class Dog() 放在了 T1类中

给点游戏AVA的资料
四位代言作为《A.V.A》韩国首个电子竞技比赛A.V.A The First Mission的宣传大使,通过比赛现场直播中进行的各种活动给观众带去多种优惠。战地之王(AVA)正式开启"加冕封测"2008年12月30日,腾讯公司在这个即将告别2008的日子再爆重磅炸弹,在业内被盛誉为FPS(第一视角射击)游戏神作之称的《A.V....

在AVA里面重载和重写有什么区别啊?
Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被...

AVA公司的公司作品
1st Mini Album《Avaholic》(李贞贤第一张个人迷你专辑《Avaholic》)专辑歌手:李贞贤专辑语言:韩语音乐类型:Pop发行日期:2009\/05\/19发行公司:M-NET MDEIA经济公司:AVA FILMS & ENTERTAINMENT唱片曲目:01.VOGUE GIRL(IT GIRL)02.CRAZY03.넌 내꺼 (你是我的)04.2NIGHT...

Frame类有哪些方法?
这些都是父类的方法 java.awt.Frame extends java.awt.Window java.awt.Window extends java.awt.Container java.awt.Container extends java.awt.Component java.awt.Component extends ava.lang.Object

如何关闭开发者模式
以华为P30为例,关闭开发者模式的方法是:1、点击“设置”,打开“系统与更新”。2、点击“开发人员选项”。3、点击关闭即可,灰色为关闭。ava开发者模式用于开放给开发人员调试运行中的手机程序。运行在这个模式下,程序会通过调低日志输出级别、增加调试信息等方式向开发人员输出程序的相关信息,方便开发...

如何在Java 8中愉快地处理日期和时间
怎么才能愉快地处理日期和时间?答案是:立刻升级到Java 8!ava 8新增了LocalDate和LocalTime接口,为什么要搞一套全新的处理日期和时间的API?因为旧的java.util.Date实在是太难用了。java.util.Date月份从0开始,一月是0,十二月是11,变态吧!java.time.LocalDate月份和星期都改成了enum,就不可能...

java中的super()是什么
要说super就先要说this。"this",作为一个特殊的关键字,它的规则如下:1。可以表示构造函数传递。this(a,b)表示调用另外一个构造函数。这里面的this就是一个特殊语法,不是变量,没有什么类型。2。可以在一个类的非static成员内部使用,表示当前这个对象。此时,this就是一个final的普通变量,它有...

INCAVA注册过商标吗?还有哪些分类可以注册?
INCAVA商标总申请量1件其中已成功注册1件,有0件正在申请中,无效注册0件,0件在售中。经八戒知识产权统计,INCAVA还可以注册以下商标分类:第1类(化学制剂、肥料)第2类(颜料油漆、染料、防腐制品)第3类(日化用品、洗护、香料)第4类(能源、燃料、油脂)第5类(药品、卫生用品、营养品)第6类...

怎么玩AVA
游戏名称:《战地之王》英文名称:ALLIANCE OF VALIANT ARMS 简称 AVA 游戏类型:FPS-射击 运营厂商:腾讯 测试时间:2009年6月18号内测 收费模式:道具收费 画面:★★★ 音效:★★★☆ 系统设定:★★★☆ 操作:★★★☆ 游戏介绍:2005年12月,罗莎国的激进主义者弗拉德。玛斯克夫大总统的领导...

许昌市15976406708: Java中的一个类怎么调用另一个类中的方法? -
夹詹肤疡: 方法1. 新建一个类.然后在调用类中先进行被调用类实例化,然后通过实例化的对象访问.例如://先定义一个类//实例化,调用 方法2.新建一个类,将该类中需要被调用的方法设置为静态(static),加了static后,就可以用类名直接调用.然后...

许昌市15976406708: java中,在一个类中的实例方法中可以使用该类的什么成员 -
夹詹肤疡: 要看你的此方法是static 的还是普通的,static的方法只能用static的成员,非static的都可以

许昌市15976406708: java中怎么在一个类中调用另一个类的全部方法 -
夹詹肤疡: java类有两种方法一种是类方法就是用static修饰的,一种是实例方法,就是没有static修饰的方法.类方法可以同时类名.方法名的方式调用.而实例方法必须先生存类的实例在通过实例.方法名的方式调用.例如:public class MethodCall {public...

许昌市15976406708: JAVA中实例方法、类方法的作用 -
夹詹肤疡: 当类的字节码文件被加载到内存时,类的实例方法不会被分配入口地址,当该类创建对象后,类中的实例方法才分配入口地址,从而实例方法可以被类创建的任何对象调用执行.需要注意的是,当我们创建第一个对象时,类中的实例方法就分配...

许昌市15976406708: JAVA中类方法(静态方法)和实例方法的区别 -
夹詹肤疡: 静态方法是使用了关键字static修饰的方法,并且静态方法是属于类的,可以用"类名.静态方法名"调用,也可以使用实例调用,但是尽量使用类名调用,而实例方法是属于一个实例的,只能使用实例来调用它

许昌市15976406708: 请解释一下JAVA的实例方法和类方法 -
夹詹肤疡: 有关类实例的调用方法.也可简单称为方法. 类的任一个特定都能调用的方法.它作用于整个类,而不是类的某个特定实例.类方法也称为静态方法. 实例方法必须对类实例化才能调用,类方法可以直接通过类调用,不需要实例化

许昌市15976406708: java提供的类中的方法为什么可以直接调用啊 -
夹詹肤疡: 因为那些方法是静态方法,或者是你的属性所属的类本身就带有这个方法,比如你定义一个String类型 String name = ""; 这个时候name就有很多方法可以点出来,虽然你没定义这些方法但是这些方法在String这个类里是已经写好的,而你用的又是这个类,所以可以直接调用,就和你在自已写的类里调类本身的方法一样的. 当然如果有些方法是静态的那么你也可以直接用静态方法的类名点方法名来调用这个方法,不用实例化这个类的对象,这个是JAVA本身的语言规范记住就好了.

许昌市15976406708: 如何在一个类中调用另一个类的方法 -
夹詹肤疡: java类有两种方法一种是类方法就是用static修饰的,一种是实例方法,就是没有static修饰的方法.类方法可以同时类名.方法名的方式调用.而实例方法必须先生存类的实例在通过实例.方

许昌市15976406708: java中,编写类,是不是需要包含实例变量和方法?能不能举个例子.. -
夹詹肤疡: 不一定非得需要,public class Test { public static void main(String[] args) { System.out.println("yes"); } }

许昌市15976406708: java中的实例方法存在哪 -
夹詹肤疡: HI我,我对你的问题蛮感兴趣的 类的实例方法在内存中是只有一份,不过肯定不会是第一个对象中,如果是第一个对象的话,那么当第一个对象被销毁的时候,那么后面的对象就永远无法调用了...类的实例方法存在一个专门的区叫方法区,事实...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网