Java 教程 在线

1296Java 变量类型

class A{
    static int i;
    void change(int i1){i=i1;}
}

public class Test{
    public static void main(String[] args){
    A.i=10;
    A a=new A();
    A b=new A();
    System.out.println(A.i+","+a.i+","+b.i);//10,10,10
    a.change(40);
    System.out.println(A.i+","+a.i+","+b.i);//40,40,40
    b.i+=10;
    System.out.println(A.i+","+a.i+","+b.i);//50,50,50
    }
}

类的静态数据成员值被所有对象共享,任何对象都可以访问类的静态数据成员。但是他们使用的是同一个数据,操作的是同一块内存,无论哪个对象修改了它,对其他对象来说,他已经变了。

1295Java 变量类型

成员变量、局部变量、静态变量的区别

 

成员变量

局部变量

静态变量

定义位置

 在类中,方法外

方法中,或者方法的形式参数

在类中,方法外

初始化值

有默认初始化值

,先定义,赋值后才能使用

有默认初始化值

调用方式

对象调用

---

对象调用,类名调用

存储位置

堆中

栈中

方法区

生命周期

与对象共存亡

与方法共存亡

与类共存亡

别名

实例变量

---

类变量

1294Java 变量类型

类变量与实例变量的区别

类变量可在类中直接使用,实例变量需实例化后才能使用。

public class StaticTest {
    private static int staticInt = 2;
    private int random = 2;

    public static void main(String[] args) {
        System.out.println(staticInt);
        StaticTest test = new StaticTest();
        System.out.println(test.random);
    }
}

1293Java 变量类型

类变量赋值方法

  • 无final修饰,声明时赋值,构造器中赋值,静态语句块或静态方法赋值
  • 有final修饰,声明时赋值,声明与赋值分开可在静态语句块中赋值
public class StaticTest {
    private static int staticInt = 2;
    private int random = 2;

    public StaticTest() {
        staticInt++;
        random++;
    }

    public static void main(String[] args) {
        System.out.println("类变量与对象变量的值变化");
        StaticTest test = new StaticTest();
        System.out.println("  实例1:staticInt:" + test.staticInt + "----random:" + test.random);
        StaticTest test2 = new StaticTest();
        System.out.println("  实例2:staticInt:" + test.staticInt + "----random:" + test.random);
        System.out.println("静态变量赋值");
        System.out.println("  静态语句块起作用:" + A.staticA);
        A a = new A();
        System.out.println("  构造器起作用:" + a.staticA);
        a.toChange();
        System.out.println("  静态方法1起作用:" + A.staticA);
        a.toChange2();
        System.out.println("  静态方法2起作用:" + A.staticA);
        System.out.println("常量赋值");
        System.out.println("  静态语句赋值:" + B.staticB);
    }
}

class A { 
    public static  String  staticA ="A" ;  
    //静态语句块修改值 
    static{  staticA ="A1"; } 
    //构造器修改值
    public A (){  staticA ="A2"; } 
    //静态方法起作用 
    
    public static void toChange(){  staticA ="A3"; } 
    public static void toChange2(){  staticA ="A4"; }  
}

class B { 
    public static final String  staticB ;  // 声明与赋值分离 
    static{  staticB ="B"; }
}

1292Java 变量类型

java 实例变量在整个类内部是可访问的,而不管实例变量声明在类的哪个位置。

import java.io.*;

public class Employee{

    public Employee (String empName){
        name = empName;
    }
    
    public void setSalary(double empSal){
        salary = empSal;
    }
    
    public void printEmp(){
        System.out.println("name:" + name);
        System.out.println("salary:" + salary);
    }
    
    public static void main(String args[]){
        Employee empOne = new Employee("facesho");
        empOne.setSalary(1000);
        empOne.printEmp();
        System.out.println(empOne.salary);
    }
    public String name;
    private double salary;
}

比如在上面代码中,尽管实例变量声明在类的尾部,在之前方法中仍可访问。