static关键字
Posted 超霸霸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了static关键字相关的知识,希望对你有一定的参考价值。
static关键字
一、什么是static
-
static是静态的意思,是一个修饰符,用来修饰类、变量、方法
-
static修饰变量,变量就成了静态变量;修饰方法,方法就成了静态方法
-
static关键字方便在没有创建对象的情况下进行调用
二、static关键字的作用
- 修饰变量
- 不使用static关键字访问对象的属性:
public class test1 {
public static void main(String[] args) {
//首先需要创建对象,才能访问对象的属性
Person p= new Person;
p.name="张三";
}
class Person {
String name;
int age;
}
}
- 使用static关键字访问对象的属性:
public class test1 {
public static void main(String[] args) {
Person p=new Person();
//访问静态变量name不需要实例化一个对象,可以直接调用
Person.name="张三";
//访问非静态变量age必须实例化一个对象
p.age=12;
}
}
class Person {
static String name;
int age;
}
【注意】:如果一个类的成员变量被static修饰了,那么所有该类的对象都共享这个变量。无论这个类实例化多少对象,它的静态变量只有一份拷贝
public class test1 {
public static void main(String[] args) {
System.out.println(Person.name);
Person p=new Person();
p.name="a1";
System.out.println(Person.name);
Person.name="a2";
Person p1=new Person();
Person p2=new Person();
System.out.println(Person.name);
System.out.println(p1.name);
System.out.println(p2.name);
}
}
class Person {
static String name="a0";
int age;
}
输出为:
a0
a1
a2
a2
a2
- 修饰方法
同修饰变量类似
【注意】:
- 静态方法不能使用类的非静态变量
public class test1 {
int a;
static int b;
public static void main(String[] args) {
//静态方法不能调用类的非静态变量
//静态方法能调用类的静态变量
b=2;
}
public void f()
{
//非静态方法能调用类的非静态变量
a=2;
//非静态方法能调用类的静态变量
b=4;
}
}
- 静态方法可以直接调用静态方法,普通方法只能通过实例化对象调用
public class test1 {
int a;
static int b;
public static void main(String[] args) {
//静态方法能直接调用静态方法
a();
//静态方法不能直接调用非静态方法,只能通过实例化对象调用
test1 t=new test1();
t.b();
}
public static void a() {
System.out.println("静态方法");
}
public void b() {
System.out.println("非静态方法");
}
}
- 静态代码块(类被加载的时候运行且只运行一次)
public class Test {
//类被加载的时候运行且只运行一次
static
{
System.out.println("静态代码块被调用");
}
public static void main(String[] args) {
}
}
输出结果:
静态代码块被调用
三、代码块
public class Person {
//赋初值
{
System.out.println("匿名代码块");
}
//只执行一次
static {
System.out.println("静态代码块");
}
public Person(){
System.out.println("构造方法");
}
public static void main(String[] args) {
Person person=new Person();
System.out.println("===========");
Person person1=new Person();
}
}
运行结果如下:
静态代码块
匿名代码块
构造方法
===========
匿名代码块
构造方法
可以看出:
- 匿名代码块可以赋初值
- 静态代码块只执行一次
- 优先级为:静态代码块>匿名代码块>构造方法
以上是关于static关键字的主要内容,如果未能解决你的问题,请参考以下文章