一:类变量基本介绍
1:什么是类变量
类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。
多发
2:如何定义类变量
定义语法:
//访问修饰符 static 数据结构 变量名;[推荐]
//static 访问修饰符 数据类型 变量名
private static int age; [推荐这种写法]
statoc private int age;
3:如何访问类变量
//类名.类变量名
//或者对象名.类变量名【静态变量的访问修饰符的访问权限和范围和普通属性是一样的。】
//推荐使用:类名.类变量名;
public static void main(String[] args) {
Person p1 = new Person();
//两种方式都可以调用,推荐用类名.类变量名
System.out.println(Person.num);
System.out.println(p1.num);
}
class Person{
public static int num;
}
二:类变量注意事项和细节
**_什么时候需要用类变量?
- 当我们需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(静态变量):比如:定义学生类,统计所有学生共交多少钱。Student (name, staticfee)
类变量与实例变量(普通属性)区别?
- 类变量是该类的所有对象共享的,而实例变量是每个对象独享的。
加上static称为类变量或静态变量,否则称为实例变量/普通变量/非静态变量
类变量可以通过类名.类变量名或者对象名.类变量名来访问,但java设计者推荐我们使用类名.类变量名方式访问。【前提是满足访问修饰符的访问权限和范围】
实例变量不能诵讨类名.类变量名方式访问
类变量是在类加载时就初始化了,也就是说,即使你没有创建对象,只要类加载了,就可以使用类变量了。 ```java public class test { public static void main(String[] args) {
//此时即便没有创建对象,类已经加载了,类变量也就可以使用了
System.out.println(person.age);
} } class person{
static int age= 1; }
- **_类变量的生命周期是随类的加载开始,随着类消亡而销毁。_**
<a name="A9Y1h"></a>
### 三:类方法基本介绍
<a name="UaoLi"></a>
#### 1:类方法基本介绍
**_类方法也就静态方法_**
```java
//访问修饰符 static 数据返回类型 方法名(){ }【推荐】
//static 访问修饰符 数据返回类型 方法名(){ }
public static void Speak(){
System.out.println("说");
}
2:类方法的调用
public class test {
public static void main(String[] args) {
person.Speak();
}
}
class person{
public static void Speak(){
System.out.println("说");
}
}
3:应用案例
//模拟交学费,总学费开始为0;
public class test {
public static void main(String[] args) {
Student sakura = new Student("sakura", 300);
Student sa = new Student("sakura1", 400);
System.out.println(Student.Fee);
}
}
class Student{
public static int Fee = 0;
private String name;
public Student(String name ,int fee) {
this.name = name;
Student.Fee+= fee;
}
//开发自己的工具类时,可以将方法做成静态的,方便调用
class MyTools { //求出两个数的和
public static double calSum(double n1, double n2) {
return n1 + n2;
} //可以写出很多这样的工具方法...
}
4:类方法经典的使用场景
- 当方法中不涉及到任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率。
- 比如:工具类中的方法utils
- Math类、Arrays类、Collections集合类看下源码:
-
四:类方法注意事项和细节
类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区∶
- 类方法中无this的参数
- 普通方法中隐含着this的参数
类方法可以通过类名调用,也可以通过对象名调用
- 普通方法和对象有关,需要通过对象名调用,
- 比如对象名.方法名(参数),不能通过类名调用
类方法中不允许使用和对象有关的关键字,比如this和super。**普通方法(成员方法)可以**。
类方法(静态方法)中只能访问静态变量或静态方法。
普通成员方法,既可以访问非静态成员,也可以访问静态成员。
class Student{
public static int Fee = 0;
String name;
public static void speak(){
System.out.println(Student.Fee);
System.out.println(name);//无法访问
}
}
:::danger 静态方法;只能访问静态属性;
非静态方法;可以访问所有成员; :::五:练习
1:
、