<span style="font-family: Arial, Helvetica, sans-serif; ">关于静态方法以及静态变量的使用就不详细的说了,我就这里只是探讨一下“static成员是不能被其所在class创建的实例访问”</span>

作为一个java的渣渣。最近在看static关键字的详解,看到网上的一篇文章中写道:static成员是不能被其所在class创建的实例访问。

就感觉怪怪的,感觉应该是可以访问的。然后自己写了一个例子测试了一下。

代码如下:

public class StaticTest {
	public static void main(String[] args)
	{
		A mm = new A();
		System.out.println("A.a = "+ A.a);
		System.out.println("mm.a = "+ mm.a);
		A.add(100);
		mm.add(24);
	}
}
class A{
	protected static int a = 5;
	private static int b;
	public static void add(int c)
	{
		b = c;
		System.out.println("b=="+b);
	}
}

输出结果:

A.a = 5
mm.a = 5
b==100
b==24

上面的例子中我实例化了一个Class A 的对象mm,然后用该对象调用Class A 中的静态方法以及静态的成员变量,结果都是可以访问到的。

类的实例对象明明是可以访问该类的静态变量以及静态方法的。

类中的静态变量是存储在JVM中的方法区中,方法区是共享区。所有该类的对象都是可以访问该静态变量。

类的静态方法以及静态变量可以直接通过类名来调用(ClassName.method()、ClassName.variable,在类外),可以不需要实例化对象就可以访问。

但是实例化了之后也是可以用实例化的对象来访问类的静态方法以及静态变量的。

只是这种方式是不推荐的。

** 使用类的实例对象调用静态方法:对象.静态方法 。这样子不能很清楚的看出他们是类的方法。

** 使用类的实例对象调用静态变量:对象.静态变量。这样子不能很清楚的看出他们是类的变量。

所以在调用类中的静态方法以及静态变量的时候,使用ClassName.method()、ClassName.variable的方式

详细的可以参看java开发文档:http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html

  转自:http://blog.csdn.net/zzzxzxh/article/details/44672941

static成员是可以被其所在class创建的实例访问!!!的更多相关文章

  1. 类模版的static成员

    类模版中声明static成员 template <class T> class Foo { public: static size_t count() { ++ctr; cout < ...

  2. cc31a_demo--CppPrimer_静态成员与继承-在派生类中访问基类中的static成员的方法

    //*基类中的static成员,在整个继承层次中只有一个实例 //*在派生类中访问基类中的static成员的方法 //1.基类名::成员名 //2.子类名::成员名 //3.对象.成员名 //4.指针 ...

  3. java static成员变量方法和非static成员变量方法的区别

    这里的普通方法和成员变量是指,非静态方法和非静态成员变量首先static是静态的意思,是修饰符,可以被用来修饰变量或者方法. static成员变量有全局变量的作用       非static成员变量则 ...

  4. 为什么static成员必须在类外初始化,而不能在类的头文件中初始化

    为什么static成员必须在类外初始化 为什么静态成员不能在类内初始化 在C++中,类的静态成员(static member)必须在类内声明,在类外初始化,像下面这样.   class A { pri ...

  5. 类的static成员并用其实现一个单例模式

    对于特定类型的全体对象而言,有时候可能需要访问一个全局的变量.比如说统计某种类型对象已创建的数量.如果我们用全局变量会破坏数据的封装,一般的用户代码都可以修改这个全局变量,这时我们可以用类的静态成员来 ...

  6. 类模板的static成员

    下列代码可以通过编译吗?如何修改使其通过编译? template <class T> struct sum {   static void foo(T op1 , T op2){    c ...

  7. C++_static与非static成员(函数)

    static与非static成员(函数)  <C++ Primer>第4版399页: 对于特定类类型的全体对象而言,访问一个全局变量有时是必要的.然而,全局变量会破坏封装:对象需要支持特定 ...

  8. static成员函数

    1.static成员函数不能定义为const的,这是因为static成员函数只是全局函数的一个形式上的封装,而且static成员函数不能访问类的非静态成员(没有this)指针,修改非静态数据成员又从何 ...

  9. C++中的static数据成员与static成员函数

    本文要点: 1.static成员它不像普通的数据成员,static数据成员独立于该类的任意对象而存在,每个static数据成员是与类关联的对象,并不与该类的对象相关联! aka:每个static数据成 ...

随机推荐

  1. JAVA版A星算法实现

    import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collections; import java.u ...

  2. java_XML_JAXB

    JAXB 可以实现Java对象与XML的相互转换,在JAXB中,将一个Java对象转换为XML的过程称之为Marshal,将XML转换为Java对象的过程称之为UnMarshal. 下面使用的是JDK ...

  3. 【4Large-Style】前端框架设计——Button 的设计思路

    Button 的设计 Button 作为基本的 Web 元素,看似简单,却需要非常用心的设计,因为 Button 作为按钮,是具有多个不同的状态,每种状态都基本上需要进行一些特殊的优化设计,以让组件更 ...

  4. Android Studio 错误集

    错误列表与解决方案: 1.Android studio Gradle project sync failed Android studio 构建项目出错 Error:Unable to start t ...

  5. Oracle索引语句整理

    转载:http://www.cnblogs.com/djcsch2001/articles/1823459.html 索引,索引的建立.修改.删除 索引索引是关系数据库中用于存放每一条记录的一种对象, ...

  6. java常见文件操作

    收集整理的java常见文件操作,方便平时使用: //1.创建文件夹 //import java.io.*; File myFolderPath = new File(str1); try { if ( ...

  7. windows下读取utf-8文件

    #include <stdio.h> #include <tchar.h> #include <memory> int main() { FILE* fp1 = f ...

  8. Synchronize执行过程

    Synchronize执行过程及原理 在windows原生应用程序开发中,经常伴随多线程的使用,多线程开发很简单,难点就是在于线程的同步,在Delphi中提供了VC中不具备的一个过程Synchroni ...

  9. Java和C++的对比

    事实上, Java 本来就是从 C++衍生出来的. C++和 Java 之间仍存在一些显著的差异.可以这样说,这些差异代表着技术的极大进步.一旦我们弄清楚了这些差异,就会理解为什么说 Java 是一种 ...

  10. 前端基本知识(三):JS的闭包理解

    JS闭包的理解 一.变量的作用域 二.如何从外部读取局部变量 三.什么是闭包 四.深入理解闭包 五.闭包的用途 六.使用闭包注意情况 七.JavaScript的垃圾回收机制 八.一些思考题 一.变量作 ...