类变量(静态变量):独立于方法之外的变量 用static修饰
实例变量:独立于方法之外的变量 没有static修饰 //必须先创建一个对象 实例化
局部变量(类方法中的变量):类的方法中的变量
成员变量(直接可被类调用和访问、非静态变量):独立于方法之外 类似:String a=‘xiao'
重点:静态变量是用来声明规则的,一旦固定都是用来引用的类似法律,规定好后只需拿来用,但是也可以改
通过重新的声明法律就习惯
public class Variable{
static int allClicks=0; // 类变量
String str="hello world"; // 实例变量
public void method(){
int i =0; // 局部变量
}
}
重点:实例变量和成员变量的区别:
主要的区别:就是访问是否需要创建对象、而对于类成员变量、所有对象是共享一个变量的
class Text{
public static int number;
public int temp;
}
如上:要访问temp属性、必须先创建一个Text对象 才能访问:Text b =new Text();
b.temp 这个就是实例成员变量
而想访问number的话 不用创建Text的实例直接可以访问 Text.number 这就是类成员变量
一、局部变量
举例子:
以下实例中age是一个局部变量 定义在pupAge()方法中 它的作用域在这个方法中
public class Test {
public void pupAge() {
int age = 0;
age = age + 7;
System.out.println("小狗的年龄是: " + age);
}
public static void main(String args[]) {
Test test = new Test(); //创建一个对象进行实例化
test.pupAge(); //用实例化的对象调用pupAge()方法
}
}
二、实例变量
public class Employee {
// 这个实例变量对子类可见
public String name;
// 私有变量,仅在该类可见
private double salary;
// 在构造器中对name赋值
public Employee(String empName) {
name = empName;
}
// 设定salary的值
public void setSalary(double empSal) {
salary = empSal;
}
// 打印信息
public void printEmp() {
System.out.println("名字 : " + name);
System.out.println("薪水 : " + salary);
}
public static void main(String args[]) {
Employee empOne = new Employee("RUNOOB");
empOne.setSalary(1000);
empOne.printEmp();
}
}
运行结果:
名字 : RUNOOB
薪水 : 1000.0
三、类变量 static修饰
public class Employee {
// salary是静态的私有变量
private static double salary;
// DEPARTMENT是一个常量
public static final String DEPARTMENT = "开发人员";
public static void main(String args[]) {
salary = 10000;
System.out.println(DEPARTMENT + "平均工资:" + salary);
}
}
运行结果: 开发人员平均工资:10000.0
四、实例变量在整个类内部都是可访问的、而不管实例变量声明在类的哪个位置
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("RUNOOB");
empOne.setSalary(1000);
empOne.printEmp();
System.out.println(empOne.salary);
}
public String name;
private double salary;
}
运行结果:
name:RUNOOB
salary:1000.0
1000.0
五、类变量可在类中直接使用、实例变量需实例化后才能使用
public class StaticTest {
public 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);
}
}
六、类的静态数据成员值被所有对象共享,任何对象都可以访问类的静态数据成员。但是他们使用的是同一个数据,操作的是同一块内存,无论哪个对象修改了它,对其他对象来说,他已经变了。
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
}
}
运行结果:
10,10,10
40,40,40
50,50,50