面向对象_static关键字

一、static概述:
    1.是一种修饰符,静态修饰符,用于修饰成员(成员变量和成员函数)不能修饰局部
    2. 当成员被修饰了之后就多了一种调用方式,除了被对象调用之外还可以直接被类名调用用法是:类名.静态成员
    3. 被静态修饰的属性存放在方法区(类中的方法),共享区,数据区中。这样可以节省内存
    4.将每个对象的共性提取出来,用static修饰,则将该共性的属性存放在方法区中,这样就可以节省内存了
    5. 每个对象的特有属性不要用static修饰,存在在对象中

    6.使用static关键字修饰一个属性(声明为static的变量实质上就是全局变量)

    7.使用static关键字修饰一个方法 通常在一个雷中定义一个方法为static,那就是说,无需本类的对象即可调用此方法

  

二、Static的特点:

        1.随着类的加载而加载;也就是说随着类的出现而加载进内存,随着类的的消失而消失,说明他的生命周期最长,

        2.优先于对对象存在,就是静态先存在,对象是后存在的

        3.被所有对象所共享

        4.可以直接被类名调用。

三、静态使用注意事项:
     1、静态方法只能访问静态成员,不能访问非静,因为静态优先于对象存在,没对象时非静态成员是不存在的 。非静态方法既可以访问静态也可以访问非静态(静态属性和方法在类加载后,就存到方法区内存中,此时,还没有产生对象,而普通方法和属性属于对象,所以静态方法不能调用非静态方法)
     2、静态方法中不可以定义this,super关键字。因为静态优先于对象存在,所以静态方法中不可以出现this

四、静态有利有弊:
     好处:对对象的共享数据进行单独空间的存储,节省空间。没有必要每一个对象中都存储一分  可以直接被类名调用。
     弊端:生命周期过长,访问出现局限性,(静态虽好 只能访问静态)

五、实例变量(成员变量)和类变量(静态变量)的区别:

  1.存放位置
            类变量随着类的加载而存在于方法区(数据区,共享区)中随着类的消失而消失
        实例变量随着对象的建立而存在于堆内存中
      2.生命周期
        类变量的生命周期是最长的,随着类的消失而消失
        实例变量的生命周期随着对象的消失而消失(类的生命周期是最长的,其次是对象)
      3.调用方式
        成员变量只能对象调用
        静态变量能用对象调用也能用类名调用

六、代码实例:

 1 public class StaticDemo {
 2     public static void main(String[] args) {
 3         Person p=new Person();
 4         System.out.println(p.getCountry());//通过对象调用成员
 5         Person p1=new Person();
 6         p1.show();
 7         p.show();
 8         System.out.println(Person.getCountry());//通过类名来调用成员。当成员被修饰了之后就多了一种调用方式,除了被对象调用之外还可以直接被类名调用用法是:类名.静态成员
 9     }
10 }
11 class Person{
12     private String name;//成员变量,实例变量,,随着对象的建立存在于堆内存中,生命周期随着对象的消失而消失
13     private static String country="CN";//将每个对象的共性提取出来用静态修饰,存储在另一个空间中这样就不用每建立一个对象就为该属性开辟空间这样会很占用内存
14
15     public String getName() {
16         return name;
17     }
18
19     public void setName(String name) {
20         this.name = name;
21     }
22
23     public static String getCountry() {
24         return country;
25     }
26
27     public static void setCountry(String country) {
28         Person.country = country;
29     }
30
31     //静态的成员变量,类变量  存在于方法区中,生命周期最长,
32     public void show(){
33         System.out.println(name+"......"+country);
34     }
35 }
public class NinetyEight_NinetyNine_oneHundred {
    public static void main(String[] args) {
        Mistress m1 = new Mistress("小白");
        Mistress m2 = new Mistress("小红");

        m1.desc();
        m2.desc();
        m1.profession = "小三";//改掉了方法区中的静态属性
        m1.desc();
        m2.desc();

        //Mistress.profession;//静态数据不属于对象,属于类,所以调用静态数据使用类区调用

        //调用静态方法(直接类名调用)
        Mistress.promosion();
        m1.desc();
        m2.desc();
    }
}
class Mistress{
    String name;
    static String profession = "情人";//使用static修饰属性,那么这个属性,就存在于方法区中
    public Mistress(String name) {
        this.name = name;
    }

    public void desc(){
        System.out.println("我的名字是:"+name+",我的职业是:"+profession);
    }

    //使用static修饰一个方法(表示这个方法是静态方法,不属于对象,用类名直接调用)
    public static void promosion(){
        System.out.println("转正了");
        profession = "主妇";
        //desc();静态方法不能调用非静态方法,因为desc方法是对象的,静态方法在对象还没创建的时候就加载了
    }
}

七、什么时候使用静态

  1、什么时候定义静态变量(类变量):

     当对象中出现共享数据时,该数据被静态所修饰,

     对象中的特有数据要定义成非静态存在于堆内存中。

  2.什么时候定义静态函数

    当功能内部没有访问到非静态数据(对象的特有数据)时。那么该功能可以定义成静态的(当然也可以定义成非静态,但是非静态需要被对象调用,而仅仅创建对象调用非静态,没有访问特有数据的方法,该对象创建是没有意义的,所以为了程序更加严谨,还是定义成静态的)

时间: 2024-10-14 07:17:32

面向对象_static关键字的相关文章

java面向对象_static关键字

1. 修饰成员变量:有static修饰的为静态变量,没有static修饰的称为实例变量. 实例变量:属于对象的,一个对象有一份.在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响.存储在堆中. 静态变量:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化. Demo: 1 public class Spike 2 { 3 public static void main(String[] args) 4 { 5 Counter a = new Co

10 面向对象(package关键字的概述及作用)

10.01_面向对象(package关键字的概述及作用) A:为什么要有包 *开发时有很多类,如果放在一个文件夹中不方便管理,而且容易重复 将字节码(.class)进行分类存放 包其实就是文件夹 B:包的概述 举例: 学生:增加,删除,修改,查询 老师:增加,删除,修改,查询 - 方案1:按照功能分 com.heima.add AddStudent AddTeacher com.heima.delete DeleteStudent DeleteTeacher com.heima.update U

面向对象this关键字和概述和应用

面向对象this关键字和概述和应用 1 package thisdemo; 2 3 /** 4 * 面向对象this关键字和概述和应用 5 * 6 */ 7 8 //定义老师类 9 class Teacher { 10 private String name; 11 private int age; 12 13 //设置姓名值 14 public void setName(String n){ 15 name = n; 16 } 17 18 //获取姓名值 19 public String ge

JAVA面向对象-----super关键字

JAVA面向对象-–super关键字 1:定义Father(父类)类 1:成员变量int x=1; 2:构造方法无参的和有参的,有输出语句 2:定义Son类extends Father类 1:成员变量int y=1; 2:构造方法无参和有参的.有输出语句this.y=y+x; 3:创建Son类对象 Son son=new Son(3); System.out.println(son.y); //4 class Father { int x = 1; Father() { System.out.p

3.03_面向对象(static关键字及内存图)

* A:案例演示     * 通过一个案例引入static关键字.     * 人类:Person.每个人都有国籍,中国. * B:画图演示     * 带有static的内存图 lass Demo1_Static { public static void main(String[] args) { /*Person p1 = new Person();  //创建对象 p1.name = "苍老师";                   //调用姓名属性并赋值 p1.country

PHP中面向对象的关键字

php面向对象中常用的关键字有final.static.const (1)final: 1,final不能修饰成员属性 2,final只能修饰类和方法 作用: 使用final修饰的类不能被子类继承 使用final修饰的方法不能被子类去覆盖 用来限制类不被继承,方法不能被覆盖就使用final(2.)static: 1,使用static可以修饰成员属性和成员方法,不能修饰类 2,用static修饰的成员属性,可以被同一个类的所有对象共享 3,静态的数据是存在内存中的数据段中(初始化静态段) 4,静态

面向对象——this关键字

this关键字 作用:区分成员变量和局部变量同名的问题 方法中的局部变量和成员变量如果同名,在方法中打印该变量会遵循就近原则,不会去理会成员变量,如果在该变量前面加上this.的话,就会指向成员变量,this的作用就是哪个对象调用我就指向哪个对象. 面向对象的案例:判断两人是否为同龄人 l  描述人的类 package cn.itcast.this关键字; /*  * 定义人的类,描述年龄即可  */ public class Person {    //定义年龄    private int 

52 面向对象static关键字的特点

static 关键字的特点 随着类的加载而加载 优先于对象存在 被类的所有对象共享 什么时候用Static静态? 如果某个成员变量是被所有对象共享的,那么它就应该被定义为静态的 共性用静态; 可以通过类名调用 其实它本身也可以通过对象名调用. 推荐使用类名调用 静态修饰的内容一般称为 与类相关的,类成员 static静态使用内存图 static 的注意事项 在静态方法中是没有this关键字的 如何理解 静态是随着类的加载而加载的 静态比对象优先存在 静态方法只能访问静态成员变量和静态的成员方法

面向对象---final关键字

final 在java中表示的意思是最终,也称为完结器,可以用final关键字声明类.属性.方法,在声明时需要注意以下几点: 1.使用final声明的类不能有子类. 2.使用final声明的方法不能被子类所覆盖. 3.使用final声明的变量即称为常量,常量不可以修改. 需要注意的是:final声明变量时,要求全部字母大写. 如果一个程序中的变量使用public static final 声明,则此变量为全局常量. 如:public static final String INFO="hello