目录
1.概述
2.定义格式和使用
2.1 静态变量及其访问
2.2 实例变量及其访问
2.3 静态方法及其访问
2.4 实例方法及其访问
3.小结
1.概述
static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量。被static修饰后的,直接利用“类名.静态变量=xxx”的格式初始化,该类中所有对象都可以共享这个成员变量,成员方法,不用一一赋值
被static修饰的成员变量,叫做静态变量
- 特点:被该类的所有对象共享
- 调用方式:类名调用(推荐);对象名调用
被static修饰的成员方法,叫做静态方法
- 特点:多用在测试类和工具类中,JavaBean中很少使用
- 调用方式:类名调用(推荐);对象名调用
补充:
JavaBean类:用来描述一些事物的类
测试类:用来检查其他的类是书写正确,带有main方法的类,是程序的入口
工具类:帮助我们做一些事情,但是不描述任何事情的类
- 见名知意
- 私有化换构造方法,目的:不让外界创建它的对象
-
public class Student{ privte Student(){}//私有化构造方法 //不写构造方法的话,程序会自动给你一个无参构造,但不是private的 }
以前我们定义过如下类:
public class Student{
//成员变量
public String name;
public char sex;//'男','女'
public int age;
//无参构造方法
public Student(){
}
//有参构造方法
public Student(String name){
this.name=name;
}
}
我们已经知道面向对象中,存在类和对象的概念,我们在类中定义了一些成员变量,例如studentTeacher ,结果发现这些成员变量,每个对象都存在(因为每个对象都可以访问)。
而像name ,age , sex确实是每个学生对象都应该有的属性,应该属于每个对象。
所以Java中成员(变量和方法)等是存在所属性的,Java是通过static关键字来区分的。static关键字在Java开发非常的重要,对于理解面向对象非常关键。
关于 static 关键字的使用,它可以用来修饰的成员变量和成员方法,被static修饰的成员是属于类的是放在静态区中,没有static修饰的成员变量和方法则是属于对象的。我们上面案例中的成员变量都是没有static修饰的,所以属于每个对象。
2.定义格式和使用
static是静态的意思。 static可以修饰成员变量或者修饰方法。
2.1 静态变量及其访问
有static修饰成员变量,说明这个成员变量是属于类的,这个成员变量称为类变量或者静态成员变量。 直接用 类名访问即可。因为类只有一个,所以静态成员变量在内存区域中也只存在一份。所有的对象都可以共享这个变量。
- 如何使用呢
例如现在我们需要定义传智全部的学生类,那么这些学生类的对象的学校属性应该都是“传智”,这个时候我们可以把这个属性定义成static修饰的静态成员变量。
- 静态成员变量的访问:
格式:类名.静态变量
- 定义格式
修饰符 static 数据类型 变量名=初始值;
举例
package staticins.oo;
class Student {
String name;
int age;
static String teacherName;//static 共享的成员变量
public void show(){
System.out.println(name+","+age+","+teacherName);
}
}
public class StudentText {
public static void main(String[] args) {
Student.teacherName="老师大人";//Student类的所有对象都可以调用
Student stu1=new Student();
stu1.name="肘子";
stu1.age=18;
stu1.show();
Student stu2=new Student();
stu2.show();
}
}
结果
2.2 实例变量及其访问
无static修饰的成员变量属于每个对象的, 这个成员变量叫实例变量,之前我们写成员变量就是实例成员变量。
需要注意的是:实例成员变量属于每个对象,必须创建类的对象才可以访问。
格式:对象.实例成员变量
package staticins.oo;
public class test {
public String name ;
public test(String name) {
this.name = name;
}
}
class name{
public static void main(String[] args) {
test name1=new test("aaa");
test name2=new test("QQQ");
System.out.println(name1.name);
System.out.println(name2.name);
}
}
结果
2.3 静态方法及其访问
有static修饰成员方法,说明这个成员方法是属于类的,这个成员方法称为类方法或者静态方法**。 直接用 类名访问即可。因为类只有一个,所以静态方法在内存区域中也只存在一份。所有的对象都可以共享这个方法。
与静态成员变量一样,静态方法也是直接通过类名.方法名称即可访问。
举例
public class Student{
public static String schoolName = "传智播客"; // 属于类,只有一份。
// .....
public static void study(){
System.out.println("我们都在黑马程序员学习");
}
}
- 静态成员变量的访问:
格式:类名.静态方法
public static void main(String[] args){
Student.study();
}
2.4 实例方法及其访问
无static修饰的成员方法属于每个对象的,这个成员方法也叫做实例方法。
需要注意的是:实例方法是属于每个对象,必须创建类的对象才可以访问。
格式:对象.实例方法
示例:
public class Student {
// 实例变量
private String name ;
// 2.方法:行为
// 无 static修饰,实例方法。属于每个对象,必须创建对象调用
public void run(){
System.out.println("学生可以跑步");
}
// 无 static修饰,实例方法
public void sleep(){
System.out.println("学生睡觉");
}
public static void study(){
}
}
public static void main(String[] args){
// 创建对象
Student stu = new Student ;
stu.name = "徐干";
// Student.sleep();// 报错,必须用对象访问。
stu.sleep();
stu.run();
}
3.小结
1.当 static 修饰成员变量或者成员方法时,该变量称为静态变量,该方法称为静态方法。该类的每个对象都共享同一个类的静态变量和静态方法。任何对象都可以更改该静态变量的值或者访问静态方法。但是不推荐这种方式去访问。因为静态变量或者静态方法直接通过类名访问即可,完全没有必要用对象去访问。
2.无static修饰的成员变量或者成员方法,称为实例变量,实例方法,实例变量和实例方法必须创建类的对象,然后通过对象来访问。
3.static修饰的成员属于类,会存储在静态区,是随着类的加载而加载的,且只加载一次,所以只有一份,节省内存。存储于一块固定的内存区域(静态区),所以,可以直接被类名调用。它优先于对象存在,所以,可以被所有对象共享。
4.无static修饰的成员,是属于对象,对象有多少个,他们就会出现多少份。所以必须由对象调用。
4.static的注意事项
- 静态方法只能访问静态变量和静态方法 //静态方法中,只能访问静态
- 非静态的方法可以访问静态变量和静态方法,也可以访问非静态的成员变量和非静态的成员方法 //非静态的可以访问所有
非静态从属于对象,需要区分对象;静态从属于类(所以对象共享的),不需要区分对象,但是对象可以调用
- 静态方法中没有this关键字,因为不存在对象