目录
1.static是什么?
1.static是静态的意思,是一个修饰符,就像是一个形容词,是用来形容类,变量,方法的。
2.static修饰变量,这个变量就变成了静态变量,修饰方法这个方法就成了静态方法,
3.static关键字方便在没有创建对象的情况下来进行调用(方法/变量)。
4.static关键字的作用
5.static关键字你可以理解为是一个形容词,一般是用来形容类、方法、变量,代码块,还有一个作用是用来静态导包
我们只讨论它的三个用法。
1.1修饰变量
不使用static关键字访问对象的属性:
public class Test {
String name;
int age;
public static void main(String[] args) {
Test test = new Test();
test.name = "吕布";//需要先创建对象 才能设置对象的属性
Test.age=18;//这样写 根本就不会出来 age这个属性
}
}
使用static关键字访问对象属性:
public class Test {
static String name;
static int age;
public static void main(String[] args) {
Test.name = "吕布";//使用static关键字修饰变量 可以通过 类名.属性名 直接访问
Test.age=18;//不需要在去实例化对象
}
}
注意:如果一个类的成员变量被static修饰了,那么所有该类的对象都共享这个变量。无论这个类实例化多少对象,它的静态变量只有一份
public class Test {
static String name="貂蝉";
static int age;
public static void main(String[] args) {
Test test1 = new Test();
test1.name="吕布";
Test.name="赵云";
Test test2 = new Test();
Test test3 = new Test();
System.out.println(test1.name);
System.out.println(test2.name);
System.out.println(test3.name);
}
}
输出结果:
1.2修饰方法
用static关键字修饰的方法叫做静态方法。静态方法我们已经用过,它有一个特点相信你已经很熟悉,那就是不需要创建对象就可以直接使用。
注意:正常情况下 是两个类 这里演示 就写在一个类了
public class Test {
public static void hello(){ //静态方法
System.out.println("hello");
}
public void hi(){ //普通方法
System.out.println("hi");
}
public static void main(String[] args) {
Test.hello(); //调用静态方法 只需要 类名.方法即可
Test test = new Test();
test.hi(); //而调用普通方法 需要实例化对象
}
}
静态方法不能使用类的非静态变量
public class Test {
static String name;
int age;
public static void main(String[] args) {
name="貂蝉";
age=1; //静态方法不能直接访问非静态变量
//这个地方会报错
}
}
静态方法可以直接调用静态方法,但是调用普通方法只能通过对象的实例才能调用。
public class Test {
public static void hello(){ //静态方法
System.out.println("hello");
}
public void hi(){ //普通方法
System.out.println("hi");
}
public static void main(String[] args) {
hello();
hi();//错误的调用方法,静态方法不能直接调用普通方法
//普通方法调用是要实例化对象
Test test = new Test();
test.hi();
}
}
3.静态代码块
public class Test {
static {
System.out.println("我是大哥");
}
public static void main(String[] args) {
System.out.println("我是小弟");
}
}
运行结果:
上面中static{ }就是一个静态代码块。
我们在main方法中没有编写任何代码,可是运行的时候,程序还是会输出我被调用了,由此我们可以发现静态代码块是不需要依赖main方法就可以独立运行的。
关于静态代码块你只需要记住一句话:在类被加载的时候运行且只运行一次。
静态代码块中变量和方法的调用也遵守我们之前所说的规则,即只能直接调用静态的属性和方法。
2.static修饰的成员变量是什么?有什么特点?
静态成员变量(有static修饰,属于类,加载一次,内存中只有一份)访问格式
类名.静态成员变量(推荐)
对象.静态成员变量(不推荐)
实例化成员变量(无static修饰,属于对象),访问格式:
对象.实例成员变量
3. 两种成员变量各自在什么情况下定义?
静态成员变量:表示在线人数等需要被类的所有对象共享的信息是
实例成员变量:属于每个对象,且每个对象的该信息不同时(如:name,age.money…)
4.每种成员方法的使用场景是怎么样的?
表示对象自己的行为的,且方法中需要直接访问实例成员,则该方法必须申明成实例方法
如果该方法是以执行一个通用功能未目的,或者需要方便访问,则可以申明称 静态方法
public class User{
//静态成员变量
static String name;
//实例成员变量
int age;
}
public class Test{
public static void main(String[] args){
//访问区别
System.out.println(User.name);
System.out.println(User.age);//报错
User u=new User();
System.out.println(u.age);
System.out.println(u.name);
//静态成员变量可以用类,也可以用对象访问
//实例成员变量只能用对象访问
//static 修饰静态成员变量的特点
User u1=new User();
u1.age=23;
u1.name="貂蝉";
User u2=new User();
u2.age=35;
u2.name="吕布";
System.out.println(u1.age);//23
System.out.println(u1.name);//吕布
}
}
static访问注意事项
静态方法只能访问静态的成员,不可以直接访问实例成员
实例方法可以访问静态的成员,也可以访问实例成员
静态方法中是不可以出现this关键字的