JAVA中static关键字
程序员文章站
2024-03-05 12:33:24
...
概述
一旦使用了static关键字。内容就属于类,而不属于对象自己,凡是本类的对象,都能共享这一份数据。
static用于修饰成员变量
package cn.hu.day01.demo06;
public class Student {
private int id;//学号
private String name;
private int age;
static String room;//所在教室
private static int idCounter=0;//学号计数器 每当new一个新对象时,计数器++
public Student() {
this.id=++idCounter;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
this.id=++idCounter;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package cn.hu.day01.demo06;
public class Demo01StaticField {
public static void main(String[] args) {
Student one=new Student("刘备",19);
one.room="101教室";
System.out.println("姓名:"+one.getName()+
"\t年龄:"+one.getAge()+"\t教室:"+one.room
+"\t学号:"+one.getId());
Student two=new Student("张飞",16);
System.out.println("姓名:"+two.getName()+
"\t年龄:"+two.getAge()+"\t教室:"+two.room
+"\t学号:"+two.getId());
}
}
static用于修饰成员方法
一旦使用static修饰成员方法,那么这就成为了静态方法。静态方法不属于对象,而是属于类的。
如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它。
如果有了static关键字,那么不需要创建对象,直接通过类名称来使用它。
无论是成员变量,还是成员方法。如果有了static关键字,都推荐使用类名进行调用。
注意事项:
1.静态不能直接访问非静态
因为在内存当中先有静态类容,后又非静态内容。
<<先人不知道后人,后人知道先人>>
2.静态方法中不能用this
因为this代表当前对象,通过谁调用的方法,谁就是当前对象。
package cn.hu.day01.demo06;
public class MyClass {
int num;//成员变量
static int numStatic;//静态变量
//成员方法
public void method(){
System.out.println("这是一个成员方法");
//成员方法可以访问成员变量
System.out.println(num);
//成员方法可以访问静态变量
System.out.println(numStatic);
}
//静态方法
public static void methodStatic(){
System.out.println("这是一个静态方法");
//静态方法可以访问静态变量
System.out.println(numStatic);
//静态不能直接访问非静态
// System.out.println(num);//错误写法
//静态方法中不能使用this关键字
// System.out.println(this);//错误写法
}
}
静态static的内存图
方法区中有一个静态区静态变量在里面开辟空间,根据类名称访问静态成员变量的时候,直接去方法去中的静态区找,全程没有关系,之和类有关系
package cn.hu.day01.demo06;
public class Demo03StaticStudent {
public static void main(String[] args) {
//首先设置教室,静态东西通过类名称调用
Student.room="101教室";
Student one=new Student("吕布",20);
System.out.println("one的姓名:"+one.getName());
System.out.println("one的年龄:"+one.getAge());
System.out.println("one的教室:"+Student.room);
Student two=new Student("貂蝉",16);
System.out.println("two的姓名:"+two.getName());
System.out.println("two的年龄:"+two.getAge());
System.out.println("two的教室:"+Student.room);
}
}
static用法之静态代码块
格式:
static{
//静态代码块的内容
}
特点:
当第一次用到本类时,静态代码快执行唯一的一次 。
静态的总是优先于非静态,所以静态代码块,比构造方法先执行。
静态代码块的典型用途:
用来一次性的对静态成员变量进行赋值。
package cn.hu.day01.demo07;
public class Person {
static {
System.out.println("静态代码快执行!");
}
public Person() {
System.out.println("构造方法执行!");
}
}
package cn.hu.day01.demo07;
public class Demo01Static {
public static void main(String[] args) {
Person one=new Person();
Person two=new Person();
}
}