zoukankan      html  css  js  c++  java
  • Static关键字---Java

    1.1概述:  

      关于 static 关键字的使用,它可以用来修饰的成员变量和成员方法,

      被修饰的成员是属于类的,而不是单单是属于某个对象的。

    1.2定义和使用格式:

    类变量

     static 修饰成员变量时,该变量称为类变量。该类的每个对象都共享同一个类变量的值。任何对象都可以更改
    该类变量的值,但也可以在不创建该类的对象的情况下对类变量进行操作。

    类变量:使用 static关键字修饰的成员变量。

    定义格式:

    static 数据类型 变量名 

    例如(static int numberID;)

     1 package cn.itcast.day08.demo03;
     2 
     3 public class Student {
     4 
     5     private int id; // 学号
     6     private String name; // 姓名
     7     private int age; // 年龄
     8     static String room; // 所在教室
     9     private static int idCounter = 0; // 学号计数器,每当new了一个新对象的时候,计数器++
    10 
    11     public Student() {
    12         this.id = ++idCounter;
    13     }
    14 
    15     public Student(String name, int age) {
    16         this.name = name;
    17         this.age = age;
    18         this.id = ++idCounter;
    19     }
    20 
    21     public int getId() {
    22         return id;
    23     }
    24 
    25     public void setId(int id) {
    26         this.id = id;
    27     }
    28 
    29     public String getName() {
    30         return name;
    31     }
    32 
    33     public void setName(String name) {
    34         this.name = name;
    35     }
    36 
    37     public int getAge() {
    38         return age;
    39     }
    40 
    41     public void setAge(int age) {
    42         this.age = age;
    43     }
    44 }
    Student
     1 /*
     2 如果一个成员变量使用了static关键字,那么这个变量不再属于对象自己,而是属于所在的类。多个对象共享同一份数据。
     3  */
     4 public class Demo01StaticField {
     5 
     6     public static void main(String[] args) {
     7 
     8         Student two = new Student("黄蓉", 16);
     9         two.room = "101教室";
    10         System.out.println("姓名:" + two.getName()
    11                 + ",年龄:" + two.getAge() + ",教室:" + two.room
    12                 + ",学号:" + two.getId());
    13 
    14         Student one = new Student("郭靖", 19);
    15         System.out.println("姓名:" + one.getName()
    16                 + ",年龄:" + one.getAge() + ",教室:" + one.room
    17                 + ",学号:" + one.getId());
    18     }
    19 
    20 }
    一旦使用static修饰成员方法,那么这就成为了静态方法。静态方法不属于对象,而是属于类的。

    如果没有static关键字,那么必须首先创建对象,然后通过对象才能使用它。
    如果有了static关键字,那么不需要创建对象,直接就能通过类名称来使用它。

    无论是成员变量,还是成员方法。如果有了static,都推荐使用类名称进行调用
    静态变量:类名称.静态变量
    静态方法:类名称.静态方法()


    注意事项

    1. 静态不能直接访问非静态
    原因:因为在内存当中是【先】有的静态内容,【后】有的非静态内容。
    “先人不知道后人,但是后人知道先人。”
    2. 静态方法当中不能用this
    原因:this代表当前对象,通过谁调用的方法,谁就是当前对象。
     1 public class MyClass {
     2 
     3     int num; // 成员变量
     4     static int numStatic; // 静态变量
     5 
     6     // 成员方法
     7     public void method() {
     8         System.out.println("这是一个成员方法。");
     9         // 成员方法可以访问成员变量
    10         System.out.println(num);
    11         // 成员方法可以访问静态变量
    12         System.out.println(numStatic);
    13     }
    14 
    15     // 静态方法
    16     public static void methodStatic() {
    17         System.out.println("这是一个静态方法。");
    18         // 静态方法可以访问静态变量
    19         System.out.println(numStatic);
    20         // 静态不能直接访问非静态【重点】
    21 //        System.out.println(num); // 错误写法!
    22 
    23         // 静态方法中不能使用this关键字。
    24 //        System.out.println(this); // 错误写法!
    25     }
    26 
    27 }
     1 public class Demo02StaticMethod {
     2 
     3     public static void main(String[] args) {
     4         MyClass obj = new MyClass(); // 首先创建对象
     5         // 然后才能使用没有static关键字的内容
     6         obj.method();
     7 
     8         // 对于静态方法来说,可以通过对象名进行调用,也可以直接通过类名称来调用。
     9         obj.methodStatic(); // 正确,不推荐,这种写法在编译之后也会被javac翻译成为“类名称.静态方法名”
    10         MyClass.methodStatic(); // 正确,推荐
    11 
    12         // 对于本来当中的静态方法,可以省略类名称
    13         myMethod();
    14         Demo02StaticMethod.myMethod(); // 完全等效
    15     }
    16 
    17     public static void myMethod() {
    18         System.out.println("自己的方法!");
    19     }
    20 
    21 }




  • 相关阅读:
    javascript js 内存泄露
    javascript js 内存泄露工具使用
    逻辑运算符及按位或与非比较难理解先放着87
    //测试全局变量及局部变量的输出结果的异同
    域名被墙原因
    编写转义字符:78页
    1.1-java创建包和类的方法
    浏览器方法及代码打包成APP的
    一个简单的jsp+servlet实例,实现简单的登录
    LeetCode.985-查询后偶数的总和(Sum of Even Numbers After Queries)
  • 原文地址:https://www.cnblogs.com/zeon/p/13357596.html
Copyright © 2011-2022 走看看