Java关键字—static(静态变量、静态方法、静态类)

来源:互联网 发布:面相分析软件 编辑:程序博客网 时间:2024/06/05 02:26
  1. Java的静态对象与非静态对象的区别
 静态非静态拥有属性类共同拥有各实例对象独立拥有内存分配位于“数据区”,且唯一位于“堆空间”,每new一个对象创建一份分配顺序先分配静态对象的空间然后为非静态对象分配空间
  1. Java中静态对象的用处
    1. 静态成员表示全局性、唯一性;
    2. 引用方便,类名.静态变量类名.静态函数
    3. static final 用来修饰成员变量和成员方法,可简单理解为“全局常量”。对于变量,表示一旦给值就不可修改;对于方法,表示不可覆盖。
  2. static方法
    1. 静态方法只能调用静态方法;
    2. 静态方法只能访问静态数据;
    3. 不能以任何方式引用this和super(this涉及到对象,super 与继承有关)。
  3. static变量
按照是否静态的,对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是:
对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
对于实例变量,没创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。
  1. static代码块
static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。
  1. static类——静态内部类(内嵌类)?????
    1. 静态内部类跟静态方法一样,只能访问静态的成员变量和方法,不能访问非静态的方法和属性,但是普通内部类可以访问任意外部类的成员变量和方法;
    2. 静态内部类可以声明普通成员变量和方法,而普通内部类不能声明static成员变量和方法,但是可以声明static final 成员变量和方法。
    3. 静态内部类可以单独初始化: 
Inner i =new Outer.Inner();
 普通内部类初始化:
Outer o =new Outer();Inner i = o.new Inner();
  1. static和final一块用表示什么
static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。       
特别要注意一个问题:
对于被static和final修饰过的实例常量,实例本身不能再改变了,但对于一些容器类型(比如,ArrayList、HashMap)的实例变量,不可以改变容器变量本身,但可以修改容器中存放的对象,这一点在编程中用到很多。


原创粉丝点击