【无标题】

第一个

static其实也是一个关键字,关于关键字的使用,其实就是大家关心的就是在哪用用来做什么,
在这么有一个static的关键字的引入的一段话,关于这一段话呢我就有感情的读一下啊!

当我们编写一个类时,主要就是在描述其一个对象的属性和行为,而并没有产生实质上的对象,也就是这个时候还没有创建对象,只有通过new关键字才会产生出对象,这时系统才会分配内存空间给对象,这个时候可以通过这个对象去调用方法。我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下,某些特定的数据在内存空间里只有一份,例如所有的中国人都有一个国家名称,每一个中国人都共享这个中国名称,不必在每一个中国人的实例对象中都单独分配一个用于代表国家名称的变量

其实呢这段话就说了两个事,前面的这个事就是我们之前的做法,只有new一个对象才可以分配一个空间,方法这个时候才可以通过对象去调用,后面这个事就是有些时候属性不会因为对象的改变而改变

第二个

多个对象共享一个数据
后面的修改会覆盖上一个数据

我们根据我刚才讲的情景进行代码书写

/*static 关键字的使用

     1.static :静态的
     2.static 可以修饰属性,方法,代码块,
     内部类(但是不能修饰普通类)

     3。static修饰属性:称为静态变量
     (但是注意的是static是不能修饰局部变量)。
           
    4。static修饰方法

*/
/本类用于测试多个对象共享一份数据
public class StaticTest {

public static void main(String[] args) {

    //创建对象就相当于每一个人
    Person  P1=new Person();
    P1.name="詹姆斯";
    P1.age=38;

在这里讲一下存储方式

    System.out.println();


    Person p2=new Person();

    p2.name="张继科";
    p2.age=30;


    //在这个时候,每一个对象都不会
    相互影响

    //在这里我们通过p1调用nation,
    并且给这个属性附一个值,
   // 但是这个时候我并没有给p2的属性赋值

         P1.nation="chn";

    //但是这个时候我并没有给p2的属性赋值,
    但是当我们打印这个值的时候,
    出现的就是c1赋的值

         System.out.println(p2.nation);


    //还有一种情况,当我们使用c2的对象修改值,
    我们打印c1的属性值

    p2.nation="china";
    System.out.println(P1.nation);


}

}

class Person{

//作为一个人呢它可定有一些相关的属性,
每一个人的属性名字和年龄都会不同

String  name;
int age;

//在这里我们再引入一个属性

static String nation;

}

第三个

3。static修饰属性:称为静态变量(
但是注意的是static是不能修饰局部变量)。
3。1 属性是否使用static修饰有分为:
静态属性和非静态属性(实例变量)

1):实例变量 :当我们创建了类的
多个对象,每个对象独立的拥有一套类中
的实例变量,当修改其中一个对象中的
非静态属性值,不会导致其他对象的
属性值的修改

2):静态变量:我们创建了类的多个对象
多个对象共享一个静态变量,
当通过某一个对象,修改静态变量是,
会导致其他对象调用此静态变量时,
是修改过了的

其实这一点就和我们生活中的一个例子很像
这个例子就是我们共同使用一个房间这个例子,
每一个房间有几个卧室,这个房间的
所有人共享一个厨房

第四个

static属性修饰的特点说明

1)静态变量随着类的加载而加载,
再main方法里面写一个类名.静态属性
可以通过“类名.静态属性”
而实例变量是随着对象的加载而加载

2)静态资源是是属于类的所以静态资源是
优先于对象的加载,因为只有先有了类才
会有对象。所以静态资源优先于对象的加载

3)由于类只会加载一次,则静态资源也
只会存在一份,但是他会存在缓存中,
我们如归想要使用就直接拿来使用,
可以提高我们的效率,只有内存不
足的时候才会进行清除

总结:
【无标题】_第1张图片

ppt里面我也总结了这些特点

静态方法

我们刚才学了一些静态属性
静态方法就是使用static修饰的方法,我们可以来写一下关于静态方法的特点
随着类的加载而加载,可以通过“类名.静态“方法进行调用
静态方法中,只能调用静态的方法和属性(
这一点我们可以根据生命周期去理解)
非静态的方法中既可以调用非静态的
方法或属性,也可以调用静态方法或属性

public  void eat(){

      System.out.println("我是eat方法");
  }

  public static void  show(){

      System.out.println("我是一个show方法");
      
      //报错静态方法不能调用非静态方法
      //其实在这里省略了this关键字
      //this指的是对象,而静态是类资源所以不能调用
      
      eat();

在方法中static的注意点:
1):在静态方法内,不能使用this关键字,
super关键字(this指的是当前对象,
super指的是父类对象,而静态则是类的资源)

3):在这里我们不用死记硬背,我们要根据生命
周期的角度去理解(这个生命周期会设计到类的
生命周期或者对象的生命周期)

【无标题】_第2张图片

你可能感兴趣的:(java,jvm,c++)