java中的static关键字
来源:互联网 发布:方正电子书数据库 编辑:程序博客网 时间:2024/06/03 19:13
Java中的static关键字
一般来说,在Java中,定义类的时候,只是描述这个类的一些成员,行为规则,在还没有new出这个类的实例之前,我们没有办法用这个类去做任何事情,只有在new出这个类的对象时,给这个类分配了存储空间,其方法才供外接使用。
但是,有两种情况是例外
- 单独为这个类中的某个域分配特定的存储空间,这样一来,这个域就不用关心该类创建了对少个对象了,深圳不关心这个类有没有创建对象,因为其单独拥有一个存储空间,不会依赖对象的存储空间。
- 另一种,是该类中的方法不想与这个类的某一个实例拥有太大的联系,而是作为一个单独的存在,使得没有创建这个类的实例时,也能通过类名来调用它。
在定义域或者方法的时候加上static关键字,可以实现以上两种需求。
static的使用
- 使用static修饰域,以字段为例。
public class TestStatic { public static void main(String[] args) { /* * 对于static变量来说,调用的方法有两种, * 一。可以通过通过类名直接调用, * 二。可以通过该类的对象进行调用。 * 两者调用的都是同一个变量,因为它单独处于一个独立的空间,不会因为对象的不同而不同 * 建议使用第一种调用方法,因为: * 可以强调当前变量是一个static变量 * 从某种角度来说,其有助于编译器进行优化。 */ System.out.println(Test.param1); System.out.println(Test.param2); Test testObject = new Test(); System.out.println(testObject.param1); System.out.println(testObject.param2); System.out.println(testObject.param3); }}class Test { /* * 定义static字段的时候,只需要在字段定义的类型之前加上一个"static"关键字即可 */ public static int param1 = 1; public static int param2 = 2; public int param3 = 3;}
- 使用static 修饰方法
package test;public class TestStatic { public static void main(String[] args) { /** * 调用静态方法的方式同样有两种 * 一,通过类名直接调用静态方法 * 二。通过类的对象调用静态方法 * 这两者调用的都是同一个静态方法 */ System.out.println(Test.add(1)); Test testObject = new Test(); System.out.println(testObject.del(1)); }}class Test { /* * 在定义static方法的时候,只需要在方法类型定义之前加一个"static"关键字。 */ public static int add(int param1) { return param1 ++; } public int del(int param1) { return param1 -- ; }}
static 方法和 static 变量在jvm中的位置
根据《Java虚拟机规范》的规定,运行时数据区通常包括这几个部分:
程序计数器(Program Counter Register)
也有称作为PC寄存器,在汇编中,程序计数器,用来存储程序当前执行指令的地址,当CPU需要执行指令时,需要从程序计数器中得到当前需要执行的指令所在存储单元的地址,然后根据得到的地址获取到指令,在得到指令之后,程序计数器便自动加1或者根据转移指针得到下一条指令的地址,如此循环,直至执行完所有的指令。
但是,汇编中知道的程序计数器是一个物理概念,jvm中指的是一个逻辑的概念,但是两者的功能是一样的
在设计到多线程的时候,每个线程指的的指令都不一样,所以,在多线程环境中,每个线程都有一个程序计数器。Java栈(VM Stack)
Java栈的作用有四个
1.用于存储程序中的变量,这里的变量有可能是Java中的基本数据类型的标量,对于这种变量来说,java栈中直接存储了变量的值。还有一种变量是指向对象的引用。在Java中,对象实例存储在Java中,而指向这个对象的引用存储在栈中。
2.用于进行数据运算。
3.用于存储指向常量池的引用
4.用于存储方法的返回地址。
每个线程都拥有自己的栈
本地方法栈(Native Method Stack
顾名思义,本地方法栈是执行本地方法的时候用到的栈,而Java栈是执行Java方法的时候用到的栈方法区(Method Area)
在方法区中,存储了每个类的信息,包括:
类的名,
方法信息,
字段信息,
静态变量,
常量,
编译器编译后的代码等。堆(Heap)
在java中,讲类的实例对象放在堆中,堆是所有线程共享的,有java的垃圾回收机制实现垃圾回收。
也就是说,static变量和方法都存储在jvm的方法区中。
- Java中的static关键字
- JAVA中的static关键字
- JAVA中的static关键字
- java中的static关键字
- java中的static关键字
- Java中的static关键字
- Java 中的 static 关键字
- java中的static关键字
- Java中的static关键字
- java中的static关键字
- Java 中的static关键字
- JAVA中的static关键字
- java中的static关键字
- java中的static关键字
- java中的static关键字
- Java中的static关键字
- java中的static关键字
- Java中的关键字static
- 《HBase权威指南》读书笔记 第八章:架构,存储
- python 装饰器
- 斯坦福Nature论文宣布新突破:深度学习皮肤癌诊断达专家水平
- [NOIP2017模拟]举办比赛
- java进制转换
- java中的static关键字
- Parade
- Release错误提示解决办法
- 终身伴侣(两个人的网站)代码+效果演示(文末源码地址)
- B
- dom4j读取xml文件获取所有标签
- 最为流行的几款Java IDE
- Grasshopper And the String
- Emergency(只有10分),保存一下代码。求大神改正。