static的理解以及具体用法
static 意思是静态的
(1)对于static的个人理解:
在类加载的时候,会将静态的内容也加载到方法区的静态域中。(就是类创建后static关键字创建的也会被加载。)
静态的内容先于对象存在,这个静态内容被所有该类的对象共享。(就是说没创建对象之前这个静态的内容已经存在了。)
(2)官方推荐的访问属性的方式:
类名.属性名
static修饰属性总结
属性分为:
静态属性 又称(类变量)
非静态属性 又称(实例变量)
static 修饰属性的注意点:
一、在类加载的时候将静态属性一起加载入方法区中的 静态域 中
二、先于对象存在 就是 对象还没被创建的时候就已经被加载存在了
三、可以通过类名.属性 和 对象.属性 访问
四、这个静态的内容被所有该类的对象共享
static 修饰属性的用法:
一、某些特定的数据想要在内存中共享,这种情况下可以用static修饰
二、即某个属性每个类的对象都要求一样 例如:
package play;
public class People {
int age;
String name;
static String school;
double height;
public People(){
//定义一个空构造器
}
//定义一个有参构造器
public People(int age,String name,double height){
this.age = age;
this.name = name;
this.height = height;
}
public void eat(){
System.out.println("吃饭 吃饭!");
}
public static void main(String[] args){
People.school = "boai yizhong";
People cc = new People(21, "小黄", 176);
System.out.println(cc.name);
System.out.println(cc.age);
System.out.println(cc.school);
People cc1 = new People(22, "小丑", 166);
System.out.println(cc1.name);
System.out.println(cc1.age);
System.out.println(cc1.school);
}
}
static修饰方法总结
package play;
public class Demo {
//定义一个非静态的 和 静态的属性
int id = 5;
static int sid = 6;
//定义一个非静态的 和 静态的方法
public void a(){
System.out.println(id);
System.out.println(sid);
System.out.println("a方法");
}
static public void b(){
//静态的方法 只能访问静态的属性
//静态的方法 不能用this关键字
System.out.println(sid);
System.out.println("b方法");
}
public static void main(String[] args){
//创建一个Demo 的 对象 c
Demo c = new Demo();
//非静态的方法可以直接用对象名.方法名 去调用
c.a();
//静态的方法可以用对象名.方法名 也可以用 类名.方法名(推荐)
c.a();
Demo.b();
}
//在同一个类中可以直接使用b()调用
}
static修饰代码块
总结:(1)代码块执行顺序
最先执行静态块,只在类加载的时候执行一次,所以一般以后实战写项目:创建工厂 或者数据化初始化信息都放入静态块,一般都用于执行一些全局性的初始化操作。
再执行构造块(不常用)
再执行构造器
再执行方法中的普通块