Java中静态变量和动态变量

这是我面试遇到的一道题,题目如下:

 1 public class StaticTest {
 2     private static int b = 1;
 3     private int a = 1;
 4
 5     public static void main(String[] args) {
 6         StaticTest a1 = new StaticTest();
 7         StaticTest a2 = new StaticTest();
 8         a1.a = a1.a+1;
 9         a2.a = a2.a+1;
10         System.out.println("a1.a="+a1.a);
11         System.out.println("a2.a="+a2.a);
12
13         StaticTest b1 = new StaticTest();
14         StaticTest b2 = new StaticTest();
15         b1.b = b1.b+1;
16         b2.b = b2.b+1;
17         System.out.println("b1.b="+b1.b);
18         System.out.println("b2.b="+b2.b);
19     }
20 }

这道题考察的是静态变量和动态变量的区别,答案是2,2  3,3。

对于a的值是2,是毫无疑问的。

b在这里有static修饰,说明b是静态变量,可以直接StaticTest.b来调用,a需要new出StaticTest 对象来调用。

b随着类的加载而存在,随着类的消失而消失;a随着对象的创建而存在,随着对象被回收而释放

  1. b1.b = b1.b+1:这一步计算得出b=2
  2. b2.b = b2.b+1;因为StaticTest一直存在,所以此时b的值为2,最终b的值为2+1

时间: 2024-11-23 18:32:35

Java中静态变量和动态变量的相关文章

谈谈java中静态变量与静态方法继承的问题

谈谈java中静态变量与静态方法继承的问题 学习的中如果遇到不明白或者不清楚的的时候,就是自己做些测试,自己去试试,这次我就做一个关于静态变量的继承和静态方法继承问题的测试. 首先我先建一个父类: 这样我在建一个子类: 这些都准备好以后,我对子类创建对象,然后用  类名.静态变量/静态方法  和  对象名.静态方法/静态变量  对他们输出的结果进行测试. 这样输出种类有: 这样我输出的结果是: 这样来总结一下: 1. 通过类名来调用子类中的静态变量和静态方法,当父类与子类相同时是,子类会隐藏父类

Java中静态变量与静态方法的继承

class A { static int a = 1; static int b = 2; public static void printA() { System.out.println(a); } public static void printB() { System.out.println(b); } } class B extends A { static int a = 3; static int b = 4; public static void printB() { // 如果B

java中静态变量在内存中的位置

java程序在内存中的存储分配情况: 一.堆区: 1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令) 2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 栈区: 1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问. 3.栈分为3个部分:基本类型变量区.执行环境上下文.操作指令区(存

Java中静态变量(类变量)、实例变量、局部变量和成员变量

导读 学习Java的过程中,一开始很容易被这些各种变量绕晕,这篇博客主要介绍了这几种变量之间的关系和区别. 例程 package com.cunyu.demo public class Demo { private String name; //成员变量.实例变量 private int age; //成员变量.实例变量 private int ID; //成员变量.实例变量 public static final String school = "卡塞尔学院"; //成员变量.静态变

java 中静态变量(类变量)与实例变量区别

静态变量: 在类内部中,方法的外部声明的对象而且加上static; 实例变量: 在类内部中,声明不需要加static; 比如: public class Demo{ int i1=0; static int i2=0; public void main(String[] args){ //报错,无法直接输出i1,实例对象 System.out.println(i1); //可以直接输出i2,静态变量 System.out.println(i2); Demo D1=new Demo(); Syst

java中静态变量与静态方法的继承(转)

总结: 1.静态变量与静态方法说继承并不确切,静态方法与变量是属于类的方法与变量.而子类也属于超类,比如说Manage extends Employee,则Manage也是一个Employee,所以子类能够调用属于超类的静态变量和方法.注意,子类调用的其实就是超类的静态方法和变量,而不是继承自超类的静态方法与变量.但是如果子类中有同名的静态方法与变量,这时候调用的就是子类本身的,因为子类的静态变量与静态方法会隐藏父类的静态方法和变量. 2.如果子类中没有定义同名的变量和方法,那么调用 "子类名.

随笔⑨ java中的变量 --- 类变量(静态变量),final变量,成员变量,局部变量

java中的变量 --- 类变量(静态变量),final变量,成员变量,局部变量 ① 类变量(也叫静态变量)是类中独立于方法之外的变量,用static 修饰,静态变量随着类的加载而加载. ② final变量:用final关键字修饰,不能被修改.与static一起用可表示常量. ③ 成员变量(也叫"实例变量"."域"):也是类中独立于方法之外的变量,不过没有static修饰.可以不进行初始化,Java会自动进行初始化,如果是引用类型默认初始化为null,如果是基本类型

java中静态代码块的用法 static用法详解

(一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用比如main方法就必须是静态的 这是程序入口两者的区别就是:静态代码块是自动执行的;静态方法是被调用的时候才执行的.静态方法(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是

JAVA的静态变量、静态方法、静态类

JAVA的静态变量.静态方法.静态类 静态变量和静态方法都属于静态对象,它与非静态对象的差别需要做个说明. (1)Java静态对象和非静态对象有什么区别? 比对如下: 静态对象                                                        非静态对象      拥有属性:                是类共同拥有的                                             是类各对象独立拥有的 内存分配: