静态static
静态static
static概述
如果使用了static关键字,这样的内容就不是属于对象自己的,而是属于类的,只要是本类的对象都共享同一份数据.
这份数据保存在类中
static关键字用于成员变量
如果一个成员变量使用了static关键字,那么这个对象就不属于自己而是属于类的
static可以用来计数
代码示例
Student类
public class Student {
private String name;
private int age;
static String room;
//可以用来自动生成学号
private static int count;//计数器,可以使用这个静态变量来计算生成对象的个数
private int id;//学号
public Student() {
count++;
id = count;
}
public Student(String name, int age) {
this.name = name;
this.age = age;
count++;
id = count;
}
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;
}
}
主函数
public class Demo09 {
public static void main(String[] args) {
Student two = new Student("易烊千玺", 23);
two.room = "407实验室";//room为所有对象共享的
System.out.println("姓名:" + two.getName() + ",年龄:" + two.getAge() + ",教室:" + two.room + ",学号:" + two.getId());
Student one = new Student("蔡徐坤", 19);
System.out.println("姓名:" + one.getName() + ",年龄:" + one.getAge() + ",教室:" + one.room + ",学号:" + one.getId());
}
}
static关键字用于成员方法
静态方法概述
原本的成员方法需要先创建对象才能使用,对于静态方法直接通过类名称使用方法
推荐使用--类名称.静态方法
不推荐--对象名称.静态方法
代码示例
类
public class Myclass {
public static void methodStatic()
{
System.out.println("我是静态方法");
}
public void method()
{
System.out.println("我是成员方法");
}
}
主函数
public class Demo10 {
public static void main(String[] args) {
Myclass one=new Myclass();
one.method();
one.methodStatic();//不推荐写法
Myclass.methodStatic();//推荐写法
hello();
}
public static void hello()
{
System.out.println("你好");
}
}
注意事项
静态不能访问非静态
因为在内存中先有静态内容,然后有非静态内容
静态方法里面不能用this
代码截图
代码示例
public class Myclass {
private String name;
private static int age;
public static void methodStatic() {
System.out.println("我是静态方法");
// System.out.println(name);
//静态方法不能访问非静态变量
System.out.println(age);
//静态方法可以访问静态变量
// System.out.println(this);
// 静态方法不能使用this
}
public void method() {
System.out.println(name);
//成员方法可以访问非静态变量
System.out.println(age);
//成员可以访问静态变量
System.out.println("我是成员方法");
System.out.println(this);//成员方法可以使用this
}
}
静态static的内存图
方法区里面有一个静态区,方法区里面的静态变量会指向这个静态区
根据类名称访问成员变量的时候,全程和对象没关系,只和类有关系.
代码示例
Student类
public class Student {
public static String room;
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public static String getRoom() {
return room;
}
public static void setRoom(String room) {
Student.room = room;
}
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;
}
}
Main方法
public class Main {
public static void main(String[] args) {
Student.room = "407实验室";
Student one = new Student("蔡徐坤", 20);
Student two = new Student("易烊千玺", 19);
System.out.println("姓名:" + one.getName() + ",年龄:" + one.getAge() + ",教室:" + Student.room);
System.out.println("姓名:" + two.getName() + ",年龄:" + two.getAge() + ",教室:" + Student.room);
}
}
静态代码块
public class 类名称{
static{
//静态代码块的内容
}
}
1.第一次使用本类的时候静态代码块执行
2.静态内容总是优先于非静态,使用静态代码块比构造方法先执行
代码示例
Student类
public class Student {
static
{
System.out.println("我是静态代码块");
}
public Student() {
System.out.println("构造方法执行");
}
}
Main方法
public class Main {
public static void main(String[] args) {
Student one = new Student();//静态代码块总是优先于构造代码块
//静态代码块只执行一次
Student two = new Student();
}
}